Skip to content
Snippets Groups Projects
Verified Commit 71dad1d9 authored by Martin Weise's avatar Martin Weise
Browse files

Fixed a lot of persistence issues in testing

parent 3d07c326
No related branches found
No related tags found
2 merge requests!322Master,!321Dev
Showing
with 367 additions and 224 deletions
...@@ -46,6 +46,10 @@ public class ContainerCreateDto { ...@@ -46,6 +46,10 @@ public class ContainerCreateDto {
@JsonProperty("ui_port") @JsonProperty("ui_port")
private Integer uiPort; private Integer uiPort;
@NotNull
@Schema(example = "50")
private Long quota;
@NotBlank @NotBlank
@JsonProperty("privileged_username") @JsonProperty("privileged_username")
@Schema(description = "Username of privileged user", example = "root") @Schema(description = "Username of privileged user", example = "root")
......
...@@ -27,6 +27,11 @@ public class ImageCreateDto { ...@@ -27,6 +27,11 @@ public class ImageCreateDto {
@Schema(example = "mariadb") @Schema(example = "mariadb")
private String name; private String name;
@NotNull
@JsonProperty("is_default")
@Schema(example = "false")
private Boolean isDefault;
@NotBlank @NotBlank
@Parameter(example = "10.5") @Parameter(example = "10.5")
private String version; private String version;
......
...@@ -54,7 +54,7 @@ public class ContainerImage { ...@@ -54,7 +54,7 @@ public class ContainerImage {
@Column(nullable = false) @Column(nullable = false)
private Integer defaultPort; private Integer defaultPort;
@Column(nullable = false, columnDefinition = "BOOLEAN DEFAULT FALSE") @Column(nullable = false, unique = true, columnDefinition = "BOOLEAN DEFAULT FALSE")
private Boolean isDefault = false; private Boolean isDefault = false;
@OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL, CascadeType.PERSIST}, mappedBy = "image") @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL, CascadeType.PERSIST}, mappedBy = "image")
......
...@@ -15,9 +15,7 @@ import jakarta.persistence.*; ...@@ -15,9 +15,7 @@ import jakarta.persistence.*;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@EntityListeners(AuditingEntityListener.class) @EntityListeners(AuditingEntityListener.class)
@jakarta.persistence.Table(name = "mdb_view_columns", uniqueConstraints = { @jakarta.persistence.Table(name = "mdb_view_columns")
@UniqueConstraint(columnNames = {"view_id", "internalName"})
})
public class ViewColumn implements Comparable<ViewColumn> { public class ViewColumn implements Comparable<ViewColumn> {
@Id @Id
......
...@@ -416,6 +416,9 @@ public interface MetadataMapper { ...@@ -416,6 +416,9 @@ public interface MetadataMapper {
}; };
} }
@Mappings({
@Mapping(target = "isDefault", source = "isDefault")
})
ContainerImage createImageDtoToContainerImage(ImageCreateDto data); ContainerImage createImageDtoToContainerImage(ImageCreateDto data);
ImageBriefDto containerImageToImageBriefDto(ContainerImage data); ImageBriefDto containerImageToImageBriefDto(ContainerImage data);
......
...@@ -10,8 +10,8 @@ import java.util.Optional; ...@@ -10,8 +10,8 @@ import java.util.Optional;
@Repository @Repository
public interface ImageRepository extends JpaRepository<ContainerImage, Long> { public interface ImageRepository extends JpaRepository<ContainerImage, Long> {
List<ContainerImage> findAll();
Optional<ContainerImage> findByNameAndVersion(String name, String version); Optional<ContainerImage> findByNameAndVersion(String name, String version);
Optional<ContainerImage> findByIsDefault(Boolean isDefault);
} }
...@@ -13,6 +13,7 @@ import at.tuwien.service.ContainerService; ...@@ -13,6 +13,7 @@ import at.tuwien.service.ContainerService;
import at.tuwien.service.BrokerService; import at.tuwien.service.BrokerService;
import at.tuwien.service.impl.DatabaseServiceImpl; import at.tuwien.service.impl.DatabaseServiceImpl;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -62,6 +63,11 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { ...@@ -62,6 +63,11 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest {
@Autowired @Autowired
private DatabaseEndpoint databaseEndpoint; private DatabaseEndpoint databaseEndpoint;
@BeforeEach
public void beforeEach() {
genesis();
}
@Test @Test
@WithAnonymousUser @WithAnonymousUser
public void create_anonymous_fails() { public void create_anonymous_fails() {
......
...@@ -81,8 +81,8 @@ public class AuthenticationPrivilegedIntegrationMvcTest extends AbstractUnitTest ...@@ -81,8 +81,8 @@ public class AuthenticationPrivilegedIntegrationMvcTest extends AbstractUnitTest
genesis(); genesis();
/* metadata database */ /* metadata database */
licenseRepository.save(LICENSE_1); licenseRepository.save(LICENSE_1);
containerRepository.save(CONTAINER_1);
userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4)); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4));
containerRepository.save(CONTAINER_1);
databaseRepository.save(DATABASE_1); databaseRepository.save(DATABASE_1);
/* keycloak */ /* keycloak */
keycloakUtils.deleteUser(USER_1_USERNAME); keycloakUtils.deleteUser(USER_1_USERNAME);
......
...@@ -76,8 +76,8 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { ...@@ -76,8 +76,8 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest {
genesis(); genesis();
/* metadata database */ /* metadata database */
licenseRepository.save(LICENSE_1); licenseRepository.save(LICENSE_1);
containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4));
userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5));
containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4));
databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4)); databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4));
} }
......
...@@ -47,8 +47,8 @@ public class DatabaseServicePersistenceTest extends AbstractUnitTest { ...@@ -47,8 +47,8 @@ public class DatabaseServicePersistenceTest extends AbstractUnitTest {
genesis(); genesis();
/* metadata database */ /* metadata database */
licenseRepository.save(LICENSE_1); licenseRepository.save(LICENSE_1);
containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4));
userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5));
containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4));
databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4)); databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4));
} }
......
package at.tuwien.service; package at.tuwien.service;
import at.tuwien.test.AbstractUnitTest; import at.tuwien.test.AbstractUnitTest;
import at.tuwien.api.database.DatabaseCreateDto;
import at.tuwien.api.database.DatabaseModifyVisibilityDto; import at.tuwien.api.database.DatabaseModifyVisibilityDto;
import at.tuwien.api.database.internal.CreateDatabaseDto; import at.tuwien.api.database.internal.CreateDatabaseDto;
import at.tuwien.entities.database.Database; import at.tuwien.entities.database.Database;
...@@ -43,9 +42,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ...@@ -43,9 +42,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
@MockBean @MockBean
private DatabaseRepository databaseRepository; private DatabaseRepository databaseRepository;
@MockBean
private ContainerRepository containerRepository;
@Autowired @Autowired
private DatabaseService databaseService; private DatabaseService databaseService;
...@@ -92,23 +88,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ...@@ -92,23 +88,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
}); });
} }
@Test
public void create_notFound_fails() {
final DatabaseCreateDto request = DatabaseCreateDto.builder()
.cid(CONTAINER_1_ID)
.name(DATABASE_1_NAME)
.build();
/* mock */
when(containerRepository.findById(CONTAINER_1_ID))
.thenReturn(Optional.empty());
/* test */
assertThrows(ContainerNotFoundException.class, () -> {
databaseService.create(CONTAINER_1, request, USER_1);
});
}
@Test @Test
public void find_succeeds() throws DatabaseNotFoundException { public void find_succeeds() throws DatabaseNotFoundException {
...@@ -138,26 +117,11 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ...@@ -138,26 +117,11 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
public void create_succeeds() throws Exception { public void create_succeeds() throws Exception {
/* mock */ /* mock */
when(containerRepository.findById(DATABASE_1.getCid()))
.thenReturn(Optional.of(CONTAINER_1));
when(dataServiceGateway.createDatabase(any(CreateDatabaseDto.class))) when(dataServiceGateway.createDatabase(any(CreateDatabaseDto.class)))
.thenReturn(DATABASE_1_DTO); .thenReturn(DATABASE_1_DTO);
/* test */ /* test */
generic_create(DATABASE_1_CREATE, DATABASE_1); generic_create();
}
@Test
public void create_containerNotFound_fails() {
/* mock */
when(containerRepository.findById(anyLong()))
.thenReturn(Optional.empty());
/* test */
assertThrows(ContainerNotFoundException.class, () -> {
generic_create(DATABASE_1_CREATE, DATABASE_1);
});
} }
@Test @Test
...@@ -165,15 +129,13 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ...@@ -165,15 +129,13 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
DatabaseNotFoundException { DatabaseNotFoundException {
/* mock */ /* mock */
when(containerRepository.findById(DATABASE_1.getCid()))
.thenReturn(Optional.of(CONTAINER_1));
doThrow(DataServiceException.class) doThrow(DataServiceException.class)
.when(dataServiceGateway) .when(dataServiceGateway)
.createDatabase(any(CreateDatabaseDto.class)); .createDatabase(any(CreateDatabaseDto.class));
/* test */ /* test */
assertThrows(DataServiceException.class, () -> { assertThrows(DataServiceException.class, () -> {
generic_create(DATABASE_1_CREATE, DATABASE_1); generic_create();
}); });
} }
...@@ -182,15 +144,13 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ...@@ -182,15 +144,13 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
DatabaseNotFoundException { DatabaseNotFoundException {
/* mock */ /* mock */
when(containerRepository.findById(DATABASE_1.getCid()))
.thenReturn(Optional.of(CONTAINER_1));
doThrow(DataServiceConnectionException.class) doThrow(DataServiceConnectionException.class)
.when(dataServiceGateway) .when(dataServiceGateway)
.createDatabase(any(CreateDatabaseDto.class)); .createDatabase(any(CreateDatabaseDto.class));
/* test */ /* test */
assertThrows(DataServiceConnectionException.class, () -> { assertThrows(DataServiceConnectionException.class, () -> {
generic_create(DATABASE_1_CREATE, DATABASE_1); generic_create();
}); });
} }
...@@ -304,7 +264,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ...@@ -304,7 +264,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
/* ## GENERIC TEST CASES ## */ /* ## GENERIC TEST CASES ## */
/* ################################################################################################### */ /* ################################################################################################### */
protected Database generic_create(DatabaseCreateDto createDto, Database database) throws DataServiceException, protected Database generic_create() throws DataServiceException,
DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException,
ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException { ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException {
...@@ -312,13 +272,11 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ...@@ -312,13 +272,11 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
when(searchServiceGateway.update(any(Database.class))) when(searchServiceGateway.update(any(Database.class)))
.thenReturn(DATABASE_1_DTO); .thenReturn(DATABASE_1_DTO);
when(databaseRepository.save(any(Database.class))) when(databaseRepository.save(any(Database.class)))
.thenReturn(database); .thenReturn(DATABASE_1);
/* test */ /* test */
final Database response = databaseService.create(CONTAINER_1, createDto, USER_1); final Database response = databaseService.create(CONTAINER_1, DATABASE_1_CREATE, USER_1);
assertEquals(database.getName(), response.getName()); assertTrue(response.getInternalName().startsWith(DATABASE_1_INTERNALNAME));
assertEquals(database.getIsPublic(), response.getIsPublic());
assertTrue(response.getInternalName().startsWith(database.getInternalName()));
assertNotNull(response.getContainer()); assertNotNull(response.getContainer());
assertNotNull(response.getTables()); assertNotNull(response.getTables());
assertNotNull(response.getViews()); assertNotNull(response.getViews());
...@@ -332,7 +290,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { ...@@ -332,7 +290,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
assertNotNull(response.getOwner()); assertNotNull(response.getOwner());
assertNull(response.getImage()); assertNull(response.getImage());
assertNotNull(response.getExchangeName()); assertNotNull(response.getExchangeName());
assertEquals(database.getIsPublic(), response.getIsPublic());
return response; return response;
} }
......
...@@ -73,8 +73,8 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { ...@@ -73,8 +73,8 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest {
genesis(); genesis();
/* metadata database */ /* metadata database */
licenseRepository.save(LICENSE_1); licenseRepository.save(LICENSE_1);
containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4));
userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5));
containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4));
databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4)); databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4));
} }
......
package at.tuwien.service; package at.tuwien.service;
import at.tuwien.exception.ImageInvalidException;
import at.tuwien.test.AbstractUnitTest; import at.tuwien.test.AbstractUnitTest;
import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.api.container.image.ImageCreateDto;
import at.tuwien.exception.ImageAlreadyExistsException; import at.tuwien.exception.ImageAlreadyExistsException;
import at.tuwien.repository.ContainerRepository; import at.tuwien.repository.ContainerRepository;
import at.tuwien.repository.ImageRepository; import at.tuwien.repository.ImageRepository;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.http.auth.BasicUserPrincipal;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
...@@ -15,8 +15,6 @@ import org.springframework.boot.test.context.SpringBootTest; ...@@ -15,8 +15,6 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.security.Principal;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@Log4j2 @Log4j2
...@@ -42,7 +40,7 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { ...@@ -42,7 +40,7 @@ public class ImageServicePersistenceTest extends AbstractUnitTest {
} }
@Test @Test
public void create_succeeds() throws ImageAlreadyExistsException { public void create_succeeds() throws ImageAlreadyExistsException, ImageInvalidException {
final ImageCreateDto request = ImageCreateDto.builder() final ImageCreateDto request = ImageCreateDto.builder()
.name(IMAGE_1_NAME) .name(IMAGE_1_NAME)
.version("11.1.4") // new tag .version("11.1.4") // new tag
...@@ -51,11 +49,11 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { ...@@ -51,11 +49,11 @@ public class ImageServicePersistenceTest extends AbstractUnitTest {
.dialect(IMAGE_1_DIALECT) .dialect(IMAGE_1_DIALECT)
.driverClass(IMAGE_1_DRIVER) .driverClass(IMAGE_1_DRIVER)
.defaultPort(IMAGE_1_PORT) .defaultPort(IMAGE_1_PORT)
.isDefault(false)
.build(); .build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* test */ /* test */
imageService.create(request, principal); imageService.create(request, USER_1_PRINCIPAL);
} }
@Test @Test
...@@ -67,12 +65,31 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { ...@@ -67,12 +65,31 @@ public class ImageServicePersistenceTest extends AbstractUnitTest {
.driverClass(IMAGE_1_DRIVER) .driverClass(IMAGE_1_DRIVER)
.jdbcMethod(IMAGE_1_JDBC) .jdbcMethod(IMAGE_1_JDBC)
.dialect(IMAGE_1_DIALECT) .dialect(IMAGE_1_DIALECT)
.isDefault(IMAGE_1_IS_DEFAULT)
.build(); .build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* test */ /* test */
assertThrows(ImageAlreadyExistsException.class, () -> { assertThrows(ImageAlreadyExistsException.class, () -> {
imageService.create(request, principal); imageService.create(request, USER_1_PRINCIPAL);
});
}
@Test
public void create_multipleDefaultImages_fails() {
final ImageCreateDto request = ImageCreateDto.builder()
.name("mariadb")
.version("10.5")
.registry(IMAGE_1_REGISTRY)
.defaultPort(IMAGE_1_PORT)
.driverClass(IMAGE_1_DRIVER)
.jdbcMethod(IMAGE_1_JDBC)
.dialect(IMAGE_1_DIALECT)
.isDefault(true) // <<<<
.build();
/* test */
assertThrows(ImageInvalidException.class, () -> {
imageService.create(request, USER_1_PRINCIPAL);
}); });
} }
......
...@@ -71,8 +71,8 @@ public class TableServicePersistenceTest extends AbstractUnitTest { ...@@ -71,8 +71,8 @@ public class TableServicePersistenceTest extends AbstractUnitTest {
genesis(); genesis();
/* metadata database */ /* metadata database */
licenseRepository.save(LICENSE_1); licenseRepository.save(LICENSE_1);
containerRepository.save(CONTAINER_1);
userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); userRepository.saveAll(List.of(USER_1, USER_2, USER_3));
containerRepository.save(CONTAINER_1);
databaseRepository.saveAll(List.of(DATABASE_1)); databaseRepository.saveAll(List.of(DATABASE_1));
} }
......
...@@ -61,8 +61,8 @@ public class ViewServicePersistenceTest extends AbstractUnitTest { ...@@ -61,8 +61,8 @@ public class ViewServicePersistenceTest extends AbstractUnitTest {
genesis(); genesis();
/* metadata database */ /* metadata database */
licenseRepository.save(LICENSE_1); licenseRepository.save(LICENSE_1);
containerRepository.save(CONTAINER_1);
userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); userRepository.saveAll(List.of(USER_1, USER_2, USER_3));
containerRepository.save(CONTAINER_1);
databaseRepository.save(DATABASE_1); databaseRepository.save(DATABASE_1);
} }
......
...@@ -4,6 +4,7 @@ import at.tuwien.api.container.image.ImageChangeDto; ...@@ -4,6 +4,7 @@ import at.tuwien.api.container.image.ImageChangeDto;
import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.api.container.image.ImageCreateDto;
import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.container.image.ContainerImage;
import at.tuwien.exception.ImageAlreadyExistsException; import at.tuwien.exception.ImageAlreadyExistsException;
import at.tuwien.exception.ImageInvalidException;
import at.tuwien.exception.ImageNotFoundException; import at.tuwien.exception.ImageNotFoundException;
import java.security.Principal; import java.security.Principal;
...@@ -32,8 +33,11 @@ public interface ImageService { ...@@ -32,8 +33,11 @@ public interface ImageService {
* @param createDto The new image. * @param createDto The new image.
* @param principal The user principal. * @param principal The user principal.
* @return The container image, if successful. * @return The container image, if successful.
* @throws ImageAlreadyExistsException The image already exists.
* @throws ImageInvalidException The default image cannot be created as a default image already exists.
*/ */
ContainerImage create(ImageCreateDto createDto, Principal principal) throws ImageAlreadyExistsException; ContainerImage create(ImageCreateDto createDto, Principal principal) throws ImageAlreadyExistsException,
ImageInvalidException;
/** /**
* Updates a container image with given id in the metadata database. * Updates a container image with given id in the metadata database.
......
...@@ -34,17 +34,14 @@ import java.util.*; ...@@ -34,17 +34,14 @@ import java.util.*;
public class DatabaseServiceImpl implements DatabaseService { public class DatabaseServiceImpl implements DatabaseService {
private final MetadataMapper metadataMapper; private final MetadataMapper metadataMapper;
private final ContainerService containerService;
private final DatabaseRepository databaseRepository; private final DatabaseRepository databaseRepository;
private final DataServiceGateway dataServiceGateway; private final DataServiceGateway dataServiceGateway;
private final SearchServiceGateway searchServiceGateway; private final SearchServiceGateway searchServiceGateway;
@Autowired @Autowired
public DatabaseServiceImpl(MetadataMapper metadataMapper, ContainerService containerService, public DatabaseServiceImpl(MetadataMapper metadataMapper, DatabaseRepository databaseRepository,
DatabaseRepository databaseRepository, DataServiceGateway dataServiceGateway, DataServiceGateway dataServiceGateway, SearchServiceGateway searchServiceGateway) {
SearchServiceGateway searchServiceGateway) {
this.metadataMapper = metadataMapper; this.metadataMapper = metadataMapper;
this.containerService = containerService;
this.databaseRepository = databaseRepository; this.databaseRepository = databaseRepository;
this.dataServiceGateway = dataServiceGateway; this.dataServiceGateway = dataServiceGateway;
this.searchServiceGateway = searchServiceGateway; this.searchServiceGateway = searchServiceGateway;
......
...@@ -4,6 +4,7 @@ import at.tuwien.api.container.image.ImageChangeDto; ...@@ -4,6 +4,7 @@ import at.tuwien.api.container.image.ImageChangeDto;
import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.api.container.image.ImageCreateDto;
import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.container.image.ContainerImage;
import at.tuwien.exception.ImageAlreadyExistsException; import at.tuwien.exception.ImageAlreadyExistsException;
import at.tuwien.exception.ImageInvalidException;
import at.tuwien.exception.ImageNotFoundException; import at.tuwien.exception.ImageNotFoundException;
import at.tuwien.mapper.MetadataMapper; import at.tuwien.mapper.MetadataMapper;
import at.tuwien.repository.ImageRepository; import at.tuwien.repository.ImageRepository;
...@@ -51,13 +52,17 @@ public class ImageServiceImpl implements ImageService { ...@@ -51,13 +52,17 @@ public class ImageServiceImpl implements ImageService {
@Override @Override
@Transactional @Transactional
public ContainerImage create(ImageCreateDto createDto, Principal principal) throws ImageAlreadyExistsException { public ContainerImage create(ImageCreateDto createDto, Principal principal) throws ImageAlreadyExistsException,
ImageInvalidException {
final ContainerImage image = metadataMapper.createImageDtoToContainerImage(createDto); final ContainerImage image = metadataMapper.createImageDtoToContainerImage(createDto);
if (imageRepository.findByNameAndVersion(createDto.getName(), createDto.getVersion()).isPresent()) { if (imageRepository.findByNameAndVersion(createDto.getName(), createDto.getVersion()).isPresent()) {
log.error("Failed to create image {}:{}: exists in the metadata database", log.error("Failed to create image {}:{}: exists in the metadata database", createDto.getName(), createDto.getVersion());
createDto.getName(), createDto.getVersion());
throw new ImageAlreadyExistsException("Failed to create image " + createDto.getName() + ":" + createDto.getVersion() + ": exists in the metadata database"); throw new ImageAlreadyExistsException("Failed to create image " + createDto.getName() + ":" + createDto.getVersion() + ": exists in the metadata database");
} }
if (createDto.getIsDefault() && imageRepository.findByIsDefault(true).isPresent()) {
log.error("Failed to create image {}:{}: default image exists", createDto.getName(), createDto.getVersion());
throw new ImageInvalidException("Failed to create image: default image exists");
}
final ContainerImage dto; final ContainerImage dto;
try { try {
dto = imageRepository.save(image); dto = imageRepository.save(image);
......
...@@ -9,6 +9,8 @@ import java.util.List; ...@@ -9,6 +9,8 @@ import java.util.List;
public abstract class AbstractUnitTest extends BaseTest { public abstract class AbstractUnitTest extends BaseTest {
public void genesis() { public void genesis() {
CONTAINER_1.setDatabases(new LinkedList<>(List.of(DATABASE_1, DATABASE_2, DATABASE_3)));
CONTAINER_4.setDatabases(new LinkedList<>(List.of(DATABASE_4)));
/* USER_1 */ /* USER_1 */
USER_1.setAccesses(new LinkedList<>()); USER_1.setAccesses(new LinkedList<>());
/* USER_2 */ /* USER_2 */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment