diff --git a/docker-compose.yml b/docker-compose.yml index 2c495261271a21f680866ab931eb48cd2ba443f9..c19bc103d58338f7f917ea095b2d31c9aab36942 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -85,6 +85,8 @@ services: SPRING_PROFILES_ACTIVE: docker ports: - 9092:9092 + volumes: + - /var/run/docker.sock:/var/run/docker.sock links: - fda-discovery-service - fda-container-service diff --git a/fda-database-service/gateway/src/main/java/at/tuwien/endpoint/ContainerGateway.java b/fda-database-service/gateway/src/main/java/at/tuwien/endpoint/ContainerGateway.java index 48f3ba8211d051439faec6f1fbc47ec09b422704..9318fcb9238e043a119baf0dd380f0f0fd6e76c2 100644 --- a/fda-database-service/gateway/src/main/java/at/tuwien/endpoint/ContainerGateway.java +++ b/fda-database-service/gateway/src/main/java/at/tuwien/endpoint/ContainerGateway.java @@ -23,11 +23,11 @@ public class ContainerGateway { this.restClient = restClient; } - public ContainerDto inspect(Long id) { - final ResponseEntity<ContainerDto> response; - response = restClient.exchange(URL + id, HttpMethod.GET, null, new ParameterizedTypeReference<>() { - }); - return response.getBody(); - } +// public ContainerDto inspect(Long id) { +// final ResponseEntity<ContainerDto> response; +// response = restClient.exchange(URL + id, HttpMethod.GET, null, new ParameterizedTypeReference<>() { +// }); +// return response.getBody(); +// } } diff --git a/fda-database-service/pom.xml b/fda-database-service/pom.xml index c5a0f3e5eb6b8401d6ee1c6ef154b423637c780b..60c64605b9c5c5693d936d959d724f4371f17f76 100644 --- a/fda-database-service/pom.xml +++ b/fda-database-service/pom.xml @@ -169,6 +169,10 @@ <version>${jacoco.version}</version> <configuration> <excludes> + <exclude>at/tuwien/config/**/*</exclude> + <exclude>at/tuwien/mapper/**/*</exclude> + <exclude>at/tuwien/exception/**/*</exclude> + <exclude>**/JdbcConnector.class</exclude> <exclude>**/FdaDatabaseManagingApplication.class</exclude> </excludes> </configuration> diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/BaseIntegrationTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/BaseIntegrationTest.java deleted file mode 100644 index 998b74e1c9326525d3f78bc0eb80d7372c1b2854..0000000000000000000000000000000000000000 --- a/fda-database-service/rest-service/src/test/java/at/tuwien/BaseIntegrationTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package at.tuwien; - -import at.tuwien.entities.container.Container; -import at.tuwien.entities.container.image.ContainerImage; -import at.tuwien.entities.database.Database; -import org.springframework.test.context.TestPropertySource; - -import java.time.Instant; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseIntegrationTest { - - public final Long IMAGE_1_ID = 1L; - public final String IMAGE_1_REPO = "postgres"; - public final String IMAGE_1_TAG = "latest"; - public final Integer IMAGE_1_PORT = 5432; - public final Instant IMAGE_1_CREATED = Instant.now(); - public final Instant IMAGE_1_UPDATED = Instant.now(); - - public final Long DATABASE_1_ID = 1L; - public final String DATABASE_1_NAME = "Fundamentals SEC"; - public final String DATABASE_1_INTERNALNAME = "fundamentals_sec"; - public final String DATABASE_1_IMAGE = "postgres:latest"; - public final Instant DATABASE_1_CREATED = Instant.now(); - public final Instant DATABASE_1_UPDATED = Instant.now(); - - public final Long CONTAINER_1_ID = 1L; - public final String CONTAINER_1_NAME = "fda-userdb-fundamentals-sec"; - public final Instant CONTAINER_1_CREATED = Instant.now(); - public final Instant CONTAINER_1_UPDATED = Instant.now(); - - public final ContainerImage IMAGE_1 = ContainerImage.builder() - .id(IMAGE_1_ID) - .repository(IMAGE_1_REPO) - .tag(IMAGE_1_TAG) - .created(IMAGE_1_CREATED) - .defaultPort(IMAGE_1_PORT) - .compiled(IMAGE_1_UPDATED) - .build(); - - public final Container CONTAINER_1 = Container.builder() - .id(CONTAINER_1_ID) - .name(CONTAINER_1_NAME) - .internalName(CONTAINER_1_NAME) - .containerCreated(CONTAINER_1_CREATED) - .lastModified(CONTAINER_1_UPDATED) - .image(IMAGE_1) - .build(); - - public final Database DATABASE_1 = Database.builder() - .id(DATABASE_1_ID) - .name(DATABASE_1_NAME) - .internalName(DATABASE_1_INTERNALNAME) - .created(DATABASE_1_CREATED) - .lastModified(DATABASE_1_UPDATED) - .container(CONTAINER_1) - .build(); -} diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..07e5551824881909e6798023a9f248d9b6c98442 --- /dev/null +++ b/fda-database-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java @@ -0,0 +1,113 @@ +package at.tuwien; + +import at.tuwien.entities.container.Container; +import at.tuwien.entities.container.image.ContainerImage; +import at.tuwien.entities.database.Database; +import org.springframework.test.context.TestPropertySource; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.List; + +import static java.time.temporal.ChronoUnit.HOURS; + +@TestPropertySource(locations = "classpath:application.properties") +public abstract class BaseUnitTest { + + public final static Long IMAGE_1_ID = 1L; + public final static String IMAGE_1_REPO = "postgres"; + public final static String IMAGE_1_TAG = "latest"; + public final static Integer IMAGE_1_PORT = 5432; + public final static Instant IMAGE_1_CREATED = Instant.now(); + public final static Instant IMAGE_1_UPDATED = Instant.now(); + + public final static Long IMAGE_2_ID = 2L; + public final static String IMAGE_2_REPO = "mariadb"; + public final static String IMAGE_2_TAG = "latest"; + public final static Integer IMAGE_2_PORT = 5432; + public final static Instant IMAGE_2_CREATED = Instant.now(); + public final static Instant IMAGE_2_UPDATED = Instant.now(); + + public final static Long DATABASE_1_ID = 1L; + public final static String DATABASE_1_NAME = "Fundamentals SEC"; + public final static String DATABASE_1_INTERNALNAME = "sec"; + public final static Instant DATABASE_1_CREATED = Instant.now().minus(1, HOURS); + public final static Instant DATABASE_1_UPDATED = Instant.now(); + + public final static Long DATABASE_2_ID = 2L; + public final static String DATABASE_2_NAME = "River Flow"; + public final static String DATABASE_2_INTERNALNAME = "river_flow"; + public final static Instant DATABASE_2_CREATED = Instant.now().minus(1, HOURS); + public final static Instant DATABASE_2_UPDATED = Instant.now(); + + public final static Long CONTAINER_1_ID = 1L; + public static String CONTAINER_1_HASH = "deadbeef"; + public final static String CONTAINER_1_NAME = "Fundamentals"; + public final static String CONTAINER_1_INTERNALNAME = "fda-userdb-fundamentals"; + public final static Instant CONTAINER_1_CREATED = Instant.now().minus(2, HOURS); + public final static Instant CONTAINER_1_UPDATED = Instant.now(); + + public final static Long CONTAINER_2_ID = 2L; + public final static String CONTAINER_2_NAME = "BOKU"; + public final static String CONTAINER_2_INTERNALNAME = "fda-userdb-boku"; + public final static Instant CONTAINER_2_CREATED = Instant.now().minus(2, HOURS); + public final static Instant CONTAINER_2_UPDATED = Instant.now(); + + public final static ContainerImage IMAGE_1 = ContainerImage.builder() + .id(IMAGE_1_ID) + .repository(IMAGE_1_REPO) + .tag(IMAGE_1_TAG) + .created(IMAGE_1_CREATED) + .defaultPort(IMAGE_1_PORT) + .compiled(IMAGE_1_UPDATED) + .build(); + + public final static ContainerImage IMAGE_2 = ContainerImage.builder() + .id(IMAGE_2_ID) + .repository(IMAGE_2_REPO) + .tag(IMAGE_2_TAG) + .created(IMAGE_2_CREATED) + .defaultPort(IMAGE_2_PORT) + .compiled(IMAGE_2_UPDATED) + .build(); + + public final static Container CONTAINER_1 = Container.builder() + .id(CONTAINER_1_ID) + .name(CONTAINER_1_NAME) + .hash(CONTAINER_1_HASH) + .internalName(CONTAINER_1_NAME) + .containerCreated(CONTAINER_1_CREATED) + .lastModified(CONTAINER_1_UPDATED) + .image(IMAGE_1) + .build(); + + public final static Container CONTAINER_2 = Container.builder() + .id(CONTAINER_2_ID) + .name(CONTAINER_2_NAME) + .internalName(CONTAINER_2_NAME) + .containerCreated(CONTAINER_2_CREATED) + .lastModified(CONTAINER_2_UPDATED) + .image(IMAGE_2) + .build(); + + public final static Database DATABASE_1 = Database.builder() + .id(DATABASE_1_ID) + .name(DATABASE_1_NAME) + .internalName(DATABASE_1_INTERNALNAME) + .created(DATABASE_1_CREATED) + .lastModified(DATABASE_1_UPDATED) + .container(CONTAINER_1) + .build(); + + public final static Database DATABASE_2 = Database.builder() + .id(DATABASE_2_ID) + .name(DATABASE_2_NAME) + .internalName(DATABASE_2_INTERNALNAME) + .created(DATABASE_2_CREATED) + .lastModified(DATABASE_2_UPDATED) + .container(CONTAINER_2) + .build(); + + public final static List<String> IMAGE_1_ENVIRONMENT = List.of("POSTGRES_USER=postgres", + "POSTGRES_PASSWORD=postgres", "POSTGRES_DB=" + DATABASE_1_INTERNALNAME); +} diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointUnitTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointUnitTest.java index c5894c0b394fc82930b1fda69ccab1221690e73d..8addcc29f1c91e309163b7f1348f81799cc30f37 100644 --- a/fda-database-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointUnitTest.java +++ b/fda-database-service/rest-service/src/test/java/at/tuwien/endpoint/EndpointUnitTest.java @@ -1,6 +1,6 @@ package at.tuwien.endpoint; -import at.tuwien.BaseIntegrationTest; +import at.tuwien.BaseUnitTest; import at.tuwien.api.database.DatabaseBriefDto; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.endpoints.DatabaseEndpoint; @@ -26,7 +26,7 @@ import static org.mockito.Mockito.when; @SpringBootTest @ExtendWith(SpringExtension.class) -public class EndpointUnitTest extends BaseIntegrationTest { +public class EndpointUnitTest extends BaseUnitTest { @MockBean private DatabaseService databaseService; diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/gateway/GatewayUnitTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/gateway/GatewayUnitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..18f112e1e17273163a0ae684e6c4377c5b3c329a --- /dev/null +++ b/fda-database-service/rest-service/src/test/java/at/tuwien/gateway/GatewayUnitTest.java @@ -0,0 +1,14 @@ +package at.tuwien.gateway; + +import at.tuwien.BaseUnitTest; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@SpringBootTest +@ExtendWith(SpringExtension.class) +public class GatewayUnitTest extends BaseUnitTest { + + + +} diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/service/PostgresIntegrationTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/service/PostgresIntegrationTest.java index 87a7830ddb1af7de9dc9c9a5e0ced693a777a284..f0d4c8f8d9d337e5be1b1d63ba835f27eb119780 100644 --- a/fda-database-service/rest-service/src/test/java/at/tuwien/service/PostgresIntegrationTest.java +++ b/fda-database-service/rest-service/src/test/java/at/tuwien/service/PostgresIntegrationTest.java @@ -1,11 +1,13 @@ package at.tuwien.service; -import at.tuwien.BaseIntegrationTest; +import at.tuwien.BaseUnitTest; import at.tuwien.exception.DatabaseConnectionException; import at.tuwien.exception.DatabaseMalformedException; -import com.netflix.discovery.converters.Auto; -import org.apache.catalina.connector.Connector; -import org.h2.jdbc.JdbcConnection; +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.exception.NotModifiedException; +import com.github.dockerjava.api.model.HostConfig; +import com.github.dockerjava.api.model.PortBinding; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -13,26 +15,29 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import javax.transaction.Transactional; import java.sql.Connection; import java.sql.DriverManager; -import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.Arrays; import java.util.Properties; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.doCallRealMethod; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; +/** + * We cannot use the postgreSQL service directly since it connects within the docker network, we need "127.0.0.1" = localhost + */ +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @Transactional // rollback on each test @SpringBootTest @ExtendWith(SpringExtension.class) -public class PostgresIntegrationTest extends BaseIntegrationTest { +public class PostgresIntegrationTest extends BaseUnitTest { @MockBean private PostgresService postgresService; @@ -40,38 +45,71 @@ public class PostgresIntegrationTest extends BaseIntegrationTest { @Autowired private Properties postgresProperties; - private Connection CONNECTION; + @Autowired + private HostConfig hostConfig; + + @Autowired + private DockerClient dockerClient; @BeforeEach - public void beforeEach() throws SQLException { - CONNECTION = DriverManager.getConnection("jdbc:postgresql://localhost:5433/fda-test", postgresProperties); + public void beforeEach() throws SQLException, InterruptedException { + afterEach(); + /* create container */ + final CreateContainerResponse request = dockerClient.createContainerCmd("postgres:latest") + .withEnv(IMAGE_1_ENVIRONMENT) + .withHostConfig(hostConfig.withNetworkMode("bridge") + .withPortBindings(PortBinding.parse("5433:5432"))) + .withName(CONTAINER_1_INTERNALNAME) + .withHostName(CONTAINER_1_INTERNALNAME) + .exec(); + System.out.println("CREATE CONTAINER " + CONTAINER_1_INTERNALNAME); + /* start container */ + dockerClient.startContainerCmd(request.getId()).exec(); + System.out.println("START CONTAINER " + CONTAINER_1_INTERNALNAME); + CONTAINER_1_HASH = request.getId(); + CONTAINER_1.setHash(CONTAINER_1_HASH); + System.out.println("Wait 5s for DB to get up"); + Thread.sleep(5 * 1000); } @AfterEach - public void afterEach() throws SQLException { - final Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5433/", postgresProperties); - final PreparedStatement statement = connection.prepareStatement("DROP DATABASE IF EXISTS " + DATABASE_1_INTERNALNAME + ";"); - statement.execute(); + public void afterEach() { + /* stop containers and remove them */ + dockerClient.listContainersCmd() + .withShowAll(true) + .exec() + .forEach(container -> { + try { + dockerClient.stopContainerCmd(container.getId()).exec(); + System.out.println("STOP CONTAINER " + Arrays.toString(container.getNames())); + } catch (NotModifiedException e) { + // ignore + } + dockerClient.removeContainerCmd(container.getId()).exec(); + System.out.println("DELETE CONTAINER " + Arrays.toString(container.getNames())); + }); } @Test public void create_succeeds() throws SQLException, DatabaseConnectionException, DatabaseMalformedException { + final Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5433/" + DATABASE_1_INTERNALNAME, postgresProperties); when(postgresService.open(anyString(), any())) - .thenReturn(CONNECTION); - when(postgresService.getCreateDatabaseStatement(CONNECTION, DATABASE_1)) + .thenReturn(connection); + when(postgresService.getCreateDatabaseStatement(connection, DATABASE_2)) .thenCallRealMethod(); doCallRealMethod() .when(postgresService) - .create(DATABASE_1); + .create(DATABASE_2); /* test */ - postgresService.create(DATABASE_1); + postgresService.create(DATABASE_2); } @Test public void create_noConnection_fails() throws SQLException, DatabaseConnectionException, DatabaseMalformedException { + final Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5433/" + DATABASE_1_INTERNALNAME, postgresProperties); when(postgresService.open(anyString(), any())) .thenThrow(SQLException.class); - when(postgresService.getCreateDatabaseStatement(CONNECTION, DATABASE_1)) + when(postgresService.getCreateDatabaseStatement(connection, DATABASE_1)) .thenCallRealMethod(); doCallRealMethod() .when(postgresService) @@ -85,9 +123,10 @@ public class PostgresIntegrationTest extends BaseIntegrationTest { @Test public void create_invalidSyntax_fails() throws SQLException, DatabaseConnectionException, DatabaseMalformedException { + final Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5433/" + DATABASE_1_INTERNALNAME, postgresProperties); when(postgresService.open(anyString(), any())) - .thenReturn(CONNECTION); - when(postgresService.getCreateDatabaseStatement(CONNECTION, DATABASE_1)) + .thenReturn(connection); + when(postgresService.getCreateDatabaseStatement(connection, DATABASE_1)) .thenThrow(SQLException.class); doCallRealMethod() .when(postgresService) @@ -106,9 +145,10 @@ public class PostgresIntegrationTest extends BaseIntegrationTest { @Test public void delete_noConnection_fails() throws SQLException, DatabaseConnectionException, DatabaseMalformedException { + final Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5433/" + DATABASE_1_INTERNALNAME, postgresProperties); when(postgresService.open(anyString(), any())) .thenThrow(SQLException.class); - when(postgresService.getDeleteDatabaseStatement(CONNECTION, DATABASE_1)) + when(postgresService.getDeleteDatabaseStatement(connection, DATABASE_1)) .thenCallRealMethod(); doCallRealMethod() .when(postgresService) @@ -122,9 +162,10 @@ public class PostgresIntegrationTest extends BaseIntegrationTest { @Test public void delete_invalidSyntax_fails() throws SQLException, DatabaseConnectionException, DatabaseMalformedException { + final Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5433/" + DATABASE_1_INTERNALNAME, postgresProperties); when(postgresService.open(anyString(), any())) - .thenReturn(CONNECTION); - when(postgresService.getDeleteDatabaseStatement(CONNECTION, DATABASE_1)) + .thenReturn(connection); + when(postgresService.getDeleteDatabaseStatement(connection, DATABASE_1)) .thenThrow(SQLException.class); doCallRealMethod() .when(postgresService) @@ -138,23 +179,25 @@ public class PostgresIntegrationTest extends BaseIntegrationTest { @Test public void getCreateStatement_succeeds() throws SQLException { + final Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5433/" + DATABASE_1_INTERNALNAME, postgresProperties); when(postgresService.open(anyString(), any())) - .thenReturn(CONNECTION); - when(postgresService.getCreateDatabaseStatement(CONNECTION, DATABASE_1)) + .thenReturn(connection); + when(postgresService.getCreateDatabaseStatement(connection, DATABASE_1)) .thenCallRealMethod(); /* test */ - postgresService.getCreateDatabaseStatement(CONNECTION, DATABASE_1); + postgresService.getCreateDatabaseStatement(connection, DATABASE_1); } @Test public void getDeleteStatement_succeeds() throws SQLException { + final Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5433/" + DATABASE_1_INTERNALNAME, postgresProperties); when(postgresService.open(anyString(), any())) - .thenReturn(CONNECTION); - when(postgresService.getDeleteDatabaseStatement(CONNECTION, DATABASE_1)) + .thenReturn(connection); + when(postgresService.getDeleteDatabaseStatement(connection, DATABASE_1)) .thenCallRealMethod(); /* test */ - postgresService.getDeleteDatabaseStatement(CONNECTION, DATABASE_1); + postgresService.getDeleteDatabaseStatement(connection, DATABASE_1); } } diff --git a/fda-database-service/rest-service/src/test/java/at/tuwien/service/ServiceUnitTest.java b/fda-database-service/rest-service/src/test/java/at/tuwien/service/ServiceUnitTest.java index 414a4f81f973ebbdc6baede7304887e6d0e50a64..a011204ba3bff106f46ab5595d67847178fd6765 100644 --- a/fda-database-service/rest-service/src/test/java/at/tuwien/service/ServiceUnitTest.java +++ b/fda-database-service/rest-service/src/test/java/at/tuwien/service/ServiceUnitTest.java @@ -1,6 +1,6 @@ package at.tuwien.service; -import at.tuwien.BaseIntegrationTest; +import at.tuwien.BaseUnitTest; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.entities.container.Container; import at.tuwien.entities.database.Database; @@ -24,7 +24,7 @@ import static org.mockito.Mockito.when; @SpringBootTest @ExtendWith(SpringExtension.class) -public class ServiceUnitTest extends BaseIntegrationTest { +public class ServiceUnitTest extends BaseUnitTest { @Autowired private DatabaseService databaseService; @@ -73,7 +73,8 @@ public class ServiceUnitTest extends BaseIntegrationTest { } @Test - public void delete_succeeds() throws DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException, DatabaseMalformedException { + public void delete_succeeds() throws DatabaseConnectionException, DatabaseNotFoundException, + ImageNotSupportedException, DatabaseMalformedException { when(databaseRepository.findById(DATABASE_1_ID)) .thenReturn(Optional.of(DATABASE_1)); @@ -106,7 +107,8 @@ public class ServiceUnitTest extends BaseIntegrationTest { } @Test - public void create_succeeds() throws DatabaseConnectionException, ImageNotSupportedException, ContainerNotFoundException, DatabaseMalformedException { + public void create_succeeds() throws DatabaseConnectionException, ImageNotSupportedException, + ContainerNotFoundException, DatabaseMalformedException { final DatabaseCreateDto request = DatabaseCreateDto.builder() .name(DATABASE_1_NAME) .containerId(CONTAINER_1_ID) @@ -139,14 +141,12 @@ public class ServiceUnitTest extends BaseIntegrationTest { @Test public void create_notSupported_fails() { - final Container notPostgresContainer = CONTAINER_1; - notPostgresContainer.getImage().setRepository("mariadb"); final DatabaseCreateDto request = DatabaseCreateDto.builder() - .name(DATABASE_1_NAME) - .containerId(CONTAINER_1_ID) + .name(DATABASE_2_NAME) + .containerId(CONTAINER_2_ID) .build(); - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.of(notPostgresContainer)); + when(containerRepository.findById(CONTAINER_2_ID)) + .thenReturn(Optional.of(CONTAINER_2)); /* test */ assertThrows(ImageNotSupportedException.class, () -> { diff --git a/fda-database-service/rest-service/src/test/resources/integration-test.after b/fda-database-service/rest-service/src/test/resources/integration-test.after index 81d4932b1168cde384c09665843827520a61d2a5..cc1f786e84631faabc68d86a3aefffbd1ae03a06 100755 --- a/fda-database-service/rest-service/src/test/resources/integration-test.after +++ b/fda-database-service/rest-service/src/test/resources/integration-test.after @@ -1,3 +1 @@ -#!/bin/bash -docker stop fda-metadata-db-test -docker rm fda-metadata-db-test \ No newline at end of file +#!/bin/bash \ No newline at end of file diff --git a/fda-database-service/rest-service/src/test/resources/integration-test.before b/fda-database-service/rest-service/src/test/resources/integration-test.before index f6eb2e3ca7535e3edcbebbedbd8bdf8510b04e94..cc1f786e84631faabc68d86a3aefffbd1ae03a06 100755 --- a/fda-database-service/rest-service/src/test/resources/integration-test.before +++ b/fda-database-service/rest-service/src/test/resources/integration-test.before @@ -1,9 +1 @@ -#!/bin/bash -docker stop fda-metadata-db-test -docker rm fda-metadata-db-test -docker run --name fda-metadata-db-test \ - --publish 5433:5432 \ - --env POSTGRES_USER=postgres \ - --env POSTGRES_PASSWORD=postgres \ - --env POSTGRES_DB=fda-test \ - --detach postgres:latest \ No newline at end of file +#!/bin/bash \ No newline at end of file diff --git a/fda-database-service/services/src/main/java/at/tuwien/config/DockerConfig.java b/fda-database-service/services/src/main/java/at/tuwien/config/DockerConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..2eded5372f75f3cfc5d2d9aa96ed8b6bbad8eac9 --- /dev/null +++ b/fda-database-service/services/src/main/java/at/tuwien/config/DockerConfig.java @@ -0,0 +1,36 @@ +package at.tuwien.config; + +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.model.HostConfig; +import com.github.dockerjava.api.model.RestartPolicy; +import com.github.dockerjava.core.DefaultDockerClientConfig; +import com.github.dockerjava.core.DockerClientBuilder; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.httpclient5.ApacheDockerHttpClient; +import com.github.dockerjava.transport.DockerHttpClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class DockerConfig { + + @Bean + public HostConfig hostConfig() { + return HostConfig.newHostConfig() + .withRestartPolicy(RestartPolicy.alwaysRestart()); + } + + @Bean + public DockerClient dockerClientConfiguration() { + final DockerClientConfig dockerClientConfig = DefaultDockerClientConfig.createDefaultConfigBuilder() + .withDockerHost("unix:///var/run/docker.sock") + .build(); + final DockerHttpClient dockerHttpClient = new ApacheDockerHttpClient.Builder() + .dockerHost(dockerClientConfig.getDockerHost()) + .sslConfig(dockerClientConfig.getSSLConfig()) + .build(); + return DockerClientBuilder.getInstance() + .withDockerHttpClient(dockerHttpClient) + .build(); + } +} diff --git a/fda-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/fda-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java index 6343bf6f8d078732df8199f2f0277e1de56c2eb3..83ad7a6ae02d9ce311663ee350f630fc0632b1a0 100644 --- a/fda-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ b/fda-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java @@ -70,7 +70,7 @@ public class DatabaseService { log.debug("retrieved database {}", database); // check if postgres if (!database.getContainer().getImage().getRepository().equals("postgres")) { - log.error("only postgres is supported currently"); + log.error("No support for {}:{}", database.getContainer().getImage().getRepository(), database.getContainer().getImage().getTag()); throw new ImageNotSupportedException("Currently only PostgreSQL is supported."); } // call container to create database