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

added service tests

parent 9d6f8520
Branches
Tags
3 merge requests!23Sprint results,!10Revert bdb79ac5,!9Resolve "Refactoring: Backend Endpoints"
Showing
with 390 additions and 74 deletions
...@@ -11,4 +11,6 @@ public class CreateDatabaseContainerDto { ...@@ -11,4 +11,6 @@ public class CreateDatabaseContainerDto {
private String databaseName; private String databaseName;
private String image;
} }
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
<java.version>11</java.version> <java.version>11</java.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<mapstruct.version>1.4.2.Final</mapstruct.version> <mapstruct.version>1.4.2.Final</mapstruct.version>
<docker.version>3.2.7</docker.version>
</properties> </properties>
<dependencies> <dependencies>
...@@ -58,6 +59,24 @@ ...@@ -58,6 +59,24 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<version>1.15.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<version>1.15.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mongodb</artifactId>
<version>1.15.2</version>
<scope>test</scope>
</dependency>
<!-- DTO --> <!-- DTO -->
<dependency> <dependency>
<groupId>io.springfox</groupId> <groupId>io.springfox</groupId>
...@@ -73,12 +92,12 @@ ...@@ -73,12 +92,12 @@
<dependency> <dependency>
<groupId>com.github.docker-java</groupId> <groupId>com.github.docker-java</groupId>
<artifactId>docker-java-api</artifactId> <artifactId>docker-java-api</artifactId>
<version>3.2.1</version> <version>${docker.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.github.docker-java</groupId> <groupId>com.github.docker-java</groupId>
<artifactId>docker-java</artifactId> <artifactId>docker-java</artifactId>
<version>3.2.1</version> <version>${docker.version}</version>
</dependency> </dependency>
<!-- Mapping --> <!-- Mapping -->
<dependency> <dependency>
......
...@@ -3,14 +3,13 @@ package at.tuwien; ...@@ -3,14 +3,13 @@ package at.tuwien;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication @SpringBootApplication
@EnableJpaAuditing @EnableJpaAuditing
@EnableJpaRepositories(basePackages = {"at.tuwien.repositories"}) @EnableJpaRepositories(basePackages = {"at.tuwien.repository"})
@EntityScan(basePackages = {"at.tuwien.entities"}) @EntityScan(basePackages = {"at.tuwien.entities"})
@EnableSwagger2 @EnableSwagger2
public class FdaContainerManagingApplication { public class FdaContainerManagingApplication {
......
...@@ -5,7 +5,8 @@ import at.tuwien.api.dto.container.DatabaseContainerBriefDto; ...@@ -5,7 +5,8 @@ import at.tuwien.api.dto.container.DatabaseContainerBriefDto;
import at.tuwien.api.dto.container.DatabaseContainerDto; import at.tuwien.api.dto.container.DatabaseContainerDto;
import at.tuwien.api.dto.database.CreateDatabaseContainerDto; import at.tuwien.api.dto.database.CreateDatabaseContainerDto;
import at.tuwien.api.dto.database.CreateDatabaseResponseDto; import at.tuwien.api.dto.database.CreateDatabaseResponseDto;
import at.tuwien.entities.DatabaseContainer; import at.tuwien.entity.DatabaseContainer;
import at.tuwien.exception.ImageNotFoundException;
import at.tuwien.mapper.DatabaseContainerMapper; import at.tuwien.mapper.DatabaseContainerMapper;
import at.tuwien.service.ContainerService; import at.tuwien.service.ContainerService;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -44,19 +45,20 @@ public class DatabaseContainerController { ...@@ -44,19 +45,20 @@ public class DatabaseContainerController {
@PostMapping("/database") @PostMapping("/database")
@ApiOperation("Create a new database container") @ApiOperation("Create a new database container")
public ResponseEntity<CreateDatabaseResponseDto> create(@RequestBody CreateDatabaseContainerDto data) { public ResponseEntity<CreateDatabaseResponseDto> create(@RequestBody CreateDatabaseContainerDto data)
final String containerId = containerService.createDatabaseContainer(data); throws ImageNotFoundException {
log.debug("Create new database {} in container {} with id {}", data.getDatabaseName(), data.getContainerName(), containerId); final DatabaseContainer container = containerService.create(data);
log.debug("Create new database {} in container {} with id {}", data.getDatabaseName(), data.getContainerName(), container.getContainerId());
return ResponseEntity.status(HttpStatus.CREATED) return ResponseEntity.status(HttpStatus.CREATED)
.body(CreateDatabaseResponseDto.builder() .body(CreateDatabaseResponseDto.builder()
.containerId(containerId) .containerId(container.getContainerId())
.build()); .build());
} }
@GetMapping("/database/{id}") @GetMapping("/database/{id}")
@ApiOperation("Get info of database container") @ApiOperation("Get info of database container")
public DatabaseContainerDto findById(@RequestParam String id) { public DatabaseContainerDto findById(@RequestParam String id) {
return databaseContaineMapper.databaseContainerToDataBaseContainerDto(containerService.getDatabaseById(id)); return databaseContaineMapper.databaseContainerToDataBaseContainerDto(containerService.getById(id));
} }
......
package at.tuwien;
import at.tuwien.entity.Architecture;
import at.tuwien.entity.ContainerImage;
import at.tuwien.entity.DatabaseContainer;
import org.springframework.test.context.TestPropertySource;
import java.math.BigInteger;
import java.time.Instant;
import static java.time.temporal.ChronoUnit.DAYS;
import static java.time.temporal.ChronoUnit.HOURS;
@TestPropertySource(locations = "classpath:application.properties")
public abstract class BaseIntegrationTest {
public final String IMAGE_1_REPOSITORY = "postgres";
public final String IMAGE_1_TAG = "13-alpine";
public final String IMAGE_1_HASH = "83b40f2726e5";
public final BigInteger IMAGE_1_SIZE = new BigInteger("160000000");
public final Instant IMAGE_1_BUILT = Instant.now().minus(40, HOURS);
public final String IMAGE_2_REPOSITORY = "redis";
public final String IMAGE_2_TAG = "latest";
public final String IMAGE_2_HASH = "f877e80bb9ef";
public final BigInteger IMAGE_2_SIZE = new BigInteger("105000000");
public final Instant IMAGE_2_BUILT = Instant.now().minus(9, DAYS);
public final ContainerImage IMAGE_1 = ContainerImage.builder()
.repository(IMAGE_1_REPOSITORY)
.tag(IMAGE_1_TAG)
.hash(IMAGE_1_HASH)
.size(IMAGE_1_SIZE)
.built(IMAGE_1_BUILT)
.architecture(Architecture.LINUX_AMD64)
.build();
public final ContainerImage IMAGE_2 = ContainerImage.builder()
.repository(IMAGE_2_REPOSITORY)
.tag(IMAGE_2_TAG)
.hash(IMAGE_2_HASH)
.size(IMAGE_2_SIZE)
.built(IMAGE_2_BUILT)
.architecture(Architecture.LINUX_AMD64)
.build();
public final String CONTAINER_1_ID = "deadbeef";
public final ContainerImage CONTAINER_1_IMAGE = IMAGE_1;
public final String CONTAINER_1_DATABASE = "univie";
public final String CONTAINER_1_IP = "231.145.98.83";
public final Instant CONTAINER_1_CREATED = Instant.now().minus(1, HOURS);
public final String CONTAINER_2_ID = "0ff1ce";
public final ContainerImage CONTAINER_2_IMAGE = IMAGE_2;
public final String CONTAINER_2_DATABASE = "tuw";
public final String CONTAINER_2_IP = "233.145.99.83";
public final Instant CONTAINER_2_CREATED = Instant.now().minus(1, HOURS);
public final DatabaseContainer CONTAINER_1 = DatabaseContainer.builder()
.containerId(CONTAINER_1_ID)
.databaseName(CONTAINER_1_DATABASE)
.ipAddress(CONTAINER_1_IP)
.image(CONTAINER_1_IMAGE)
.containerId(CONTAINER_1_ID)
.containerCreated(CONTAINER_1_CREATED)
.build();
public final DatabaseContainer CONTAINER_2 = DatabaseContainer.builder()
.containerId(CONTAINER_2_ID)
.databaseName(CONTAINER_2_DATABASE)
.ipAddress(CONTAINER_2_IP)
.image(CONTAINER_2_IMAGE)
.containerId(CONTAINER_2_ID)
.containerCreated(CONTAINER_2_CREATED)
.build();
}
package at.tuwien.docker;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.testcontainers.containers.PostgreSQLContainer;
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class DockerTest {
@ClassRule
public static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:13")
.withDatabaseName("integration-tests-db")
.withUsername("sa")
.withPassword("sa");
@Test
public void contextLoads() {
//
}
}
package at.tuwien.integration; package at.tuwien.endpoint;
import at.tuwien.BaseIntegrationTest;
import at.tuwien.service.ContainerService;
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.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
@AutoConfigureMockMvc
public class EndpointTest extends BaseIntegrationTest { public class EndpointTest extends BaseIntegrationTest {
@MockBean
private ContainerService containerService;
@Test @Test
public void contextLoads() { public void listAllDatabases_success() {
// //
} }
} }
package at.tuwien.integration;
import org.springframework.test.context.TestPropertySource;
@TestPropertySource(locations = "classpath:application.properties")
public abstract class BaseIntegrationTest {
}
package at.tuwien.mapper; package at.tuwien.mapper;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.InspectContainerResponse; import com.github.dockerjava.api.command.InspectContainerResponse;
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.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.when;
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@SpringBootTest @SpringBootTest
......
package at.tuwien.service;
import at.tuwien.BaseIntegrationTest;
import at.tuwien.api.dto.database.CreateDatabaseContainerDto;
import at.tuwien.entity.DatabaseContainer;
import at.tuwien.exception.ImageNotFoundException;
import at.tuwien.repository.ContainerRepository;
import at.tuwien.repository.ImageRepository;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
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.context.junit.jupiter.SpringExtension;
import java.util.List;
import static org.mockito.Mockito.when;
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class ServiceTest extends BaseIntegrationTest {
@MockBean
private ContainerRepository containerRepository;
@MockBean
private ImageRepository imageRepository;
@Autowired
private ContainerService containerService;
@Test
public void getAllTest_succeeds() {
when(containerRepository.findAll())
.thenReturn(List.of(CONTAINER_1, CONTAINER_2));
final List<DatabaseContainer> response = containerService.getAll();
Assertions.assertEquals(2, response.size());
Assertions.assertEquals(CONTAINER_1, response.get(0));
Assertions.assertEquals(CONTAINER_2, response.get(1));
}
@Test
public void getById_succeeds() {
when(containerRepository.findByContainerId(CONTAINER_1_ID))
.thenReturn(CONTAINER_1);
final DatabaseContainer response = containerService.getById(CONTAINER_1_ID);
Assertions.assertEquals(CONTAINER_1, response);
}
@Test
public void getById_fails() {
when(containerRepository.findByContainerId(CONTAINER_1_ID))
.thenReturn(null);
final DatabaseContainer response = containerService.getById(CONTAINER_1_ID);
Assertions.assertNull(response);
}
@Test
public void create_succeeds() {
when(imageRepository.findByImage(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
.thenReturn(IMAGE_1);
final DatabaseContainer response = containerService.getById(CONTAINER_1_ID);
Assertions.assertNull(response);
}
@Test
public void create_noImage_fails() {
final CreateDatabaseContainerDto containerDto = new CreateDatabaseContainerDto();
containerDto.setImage("postgres:latest");
Assertions.assertThrows(ImageNotFoundException.class, () -> containerService.create(containerDto));
}
}
package at.tuwien.entity;
public enum Architecture {
LINUX_AMD64, LINUX_ARM64, LINUX_RISCV64, LINUX_PPC64LE, LINUX_S390X, LINUX_386, LINUX_ARM_V7, LINUX_ARM_V8
}
package at.tuwien.entities; package at.tuwien.entity;
import lombok.Data; import lombok.*;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter; import org.hibernate.annotations.Parameter;
import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.CreatedDate;
......
package at.tuwien.entity;
import lombok.*;
import javax.persistence.Column;
import javax.persistence.Entity;
import java.math.BigInteger;
import java.time.Instant;
@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
@ToString(callSuper = true, onlyExplicitlyIncluded = true)
public class ContainerImage extends Auditable {
@Column(nullable = false)
private String repository;
@Column(nullable = false)
private String tag;
@Column(nullable = false)
private String hash;
@Column(nullable = false)
private Instant built;
@Column(nullable = false)
private BigInteger size;
@Column(nullable = false)
private Architecture architecture;
}
package at.tuwien.entities; package at.tuwien.entity;
import lombok.*; import lombok.*;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.OneToOne;
import javax.persistence.Transient;
import java.time.Instant; import java.time.Instant;
@Entity @Entity
@Data @Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true) @EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
@ToString(callSuper = true, onlyExplicitlyIncluded = true) @ToString(callSuper = true, onlyExplicitlyIncluded = true)
public class DatabaseContainer extends Auditable { public class DatabaseContainer extends Auditable {
...@@ -25,7 +30,10 @@ public class DatabaseContainer extends Auditable{ ...@@ -25,7 +30,10 @@ public class DatabaseContainer extends Auditable{
@Column(nullable = false) @Column(nullable = false)
private String databaseName; private String databaseName;
@Column @OneToOne(optional = false)
private ContainerImage image;
@Transient
private String status; private String status;
@Column @Column
......
package at.tuwien.exception;
public class ImageNotFoundException extends Exception {
public ImageNotFoundException(String message) {
super(message);
}
public ImageNotFoundException(String message, Throwable thr) {
super(message, thr);
}
public ImageNotFoundException(Throwable thr) {
super(thr);
}
}
...@@ -2,9 +2,10 @@ package at.tuwien.mapper; ...@@ -2,9 +2,10 @@ package at.tuwien.mapper;
import at.tuwien.api.dto.container.DatabaseContainerBriefDto; import at.tuwien.api.dto.container.DatabaseContainerBriefDto;
import at.tuwien.api.dto.container.DatabaseContainerDto; import at.tuwien.api.dto.container.DatabaseContainerDto;
import at.tuwien.entity.ContainerImage;
import com.github.dockerjava.api.command.InspectContainerResponse; import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.model.Container; import com.github.dockerjava.api.model.Container;
import at.tuwien.entities.DatabaseContainer; import at.tuwien.entity.DatabaseContainer;
import com.github.dockerjava.api.model.NetworkSettings; import com.github.dockerjava.api.model.NetworkSettings;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
...@@ -30,6 +31,14 @@ public interface DatabaseContainerMapper { ...@@ -30,6 +31,14 @@ public interface DatabaseContainerMapper {
return data.getNetworks().get("bridge").getIpAddress(); return data.getNetworks().get("bridge").getIpAddress();
} }
default ContainerImage imageToContainerImage(String image) {
int index = image.indexOf(":");
return new ContainerImage().builder()
.repository(image.substring(0,index))
.tag(image.substring(index+1))
.build();
}
DatabaseContainer containerToDatabaseContainer(Container data); DatabaseContainer containerToDatabaseContainer(Container data);
DatabaseContainerBriefDto databaseContainerToDataBaseContainerBriefDto(DatabaseContainer data); DatabaseContainerBriefDto databaseContainerToDataBaseContainerBriefDto(DatabaseContainer data);
......
package at.tuwien.repositories; package at.tuwien.repository;
import at.tuwien.entities.DatabaseContainer; import at.tuwien.entity.DatabaseContainer;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@Repository @Repository
public interface MetadataRepository extends JpaRepository<DatabaseContainer, String> { public interface ContainerRepository extends JpaRepository<DatabaseContainer, Long> {
DatabaseContainer findByContainerId(String id);
} }
package at.tuwien.repository;
import at.tuwien.entity.ContainerImage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface ImageRepository extends JpaRepository<ContainerImage, Long> {
@Query(value = "select distinct tag from ContainerImage where repository = :repo and tag = :tag")
ContainerImage findByImage(@Param("repo") String repository, @Param("tag") String tag);
}
package at.tuwien.service; package at.tuwien.service;
import at.tuwien.api.dto.database.CreateDatabaseContainerDto; import at.tuwien.api.dto.database.CreateDatabaseContainerDto;
import com.github.dockerjava.api.DockerClient; import at.tuwien.entity.ContainerImage;
import com.github.dockerjava.api.command.InspectContainerResponse; import at.tuwien.entity.DatabaseContainer;
import com.github.dockerjava.api.model.Container; import at.tuwien.exception.ImageNotFoundException;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.PortBinding;
import com.github.dockerjava.api.model.RestartPolicy;
import at.tuwien.entities.DatabaseContainer;
import at.tuwien.mapper.DatabaseContainerMapper; import at.tuwien.mapper.DatabaseContainerMapper;
import at.tuwien.repository.ContainerRepository;
import at.tuwien.repository.ImageRepository;
import com.github.dockerjava.api.DockerClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.SocketUtils;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Service @Service
public class ContainerService { public class ContainerService {
private final DockerClient dockerClient; private final DockerClient dockerClient;
private final ContainerRepository containerRepository;
private final ImageRepository imageRepository;
private final DatabaseContainerMapper databaseContainerMapper; private final DatabaseContainerMapper databaseContainerMapper;
@Autowired @Autowired
public ContainerService(DockerClient dockerClient, DatabaseContainerMapper databaseContainerMapper) { public ContainerService(DockerClient dockerClient, ContainerRepository containerRepository,
ImageRepository imageRepository, DatabaseContainerMapper databaseContainerMapper) {
this.dockerClient = dockerClient; this.dockerClient = dockerClient;
this.containerRepository = containerRepository;
this.imageRepository = imageRepository;
this.databaseContainerMapper = databaseContainerMapper; this.databaseContainerMapper = databaseContainerMapper;
} }
public String createDatabaseContainer(CreateDatabaseContainerDto dto) { public DatabaseContainer create(CreateDatabaseContainerDto containerDto) throws ImageNotFoundException {
int availableTcpPort = SocketUtils.findAvailableTcpPort(8180, 8500); final int index = containerDto.getImage().indexOf(":");
HostConfig hostConfig = HostConfig.newHostConfig() final String repositoryName = containerDto.getImage().substring(0,index);
.withPortBindings(PortBinding.parse(availableTcpPort + ":5432")) final String tagName = containerDto.getImage().substring(index+1);
.withRestartPolicy(RestartPolicy.alwaysRestart()); final ContainerImage image = imageRepository.findByImage(repositoryName, tagName);
if (image == null) {
// CreateContainerResponse container = dockerClient.createContainerCmd("rdr-postgres:1.0") throw new ImageNotFoundException("image was not found in metadata database.");
// .withName(dto.getContainerName()) }
// .withEnv("POSTGRES_DB=" + dto.getDatabaseName(), "POSTGRES_PASSWORD=postgres") // int availableTcpPort = SocketUtils.findAvailableTcpPort(8180, 8500);
// .withHostConfig(hostConfig).exec(); // HostConfig hostConfig = HostConfig.newHostConfig()
// dockerClient.startContainerCmd(container.getId()).exec(); // .withPortBindings(PortBinding.parse(availableTcpPort + ":5432"))
// return container.getId(); // .withRestartPolicy(RestartPolicy.alwaysRestart());
return "deadbeef"; //
//// CreateContainerResponse container = dockerClient.createContainerCmd("rdr-postgres:1.0")
//// .withName(dto.getContainerName())
//// .withEnv("POSTGRES_DB=" + dto.getDatabaseName(), "POSTGRES_PASSWORD=postgres")
//// .withHostConfig(hostConfig).exec();
//// dockerClient.startContainerCmd(container.getId()).exec();
//// return container.getId();
return new DatabaseContainer();
} }
/** public DatabaseContainer getById(String containerId) {
* Get specific information for container by id return containerRepository.findByContainerId(containerId);
*
* @param containerID The id
* @return The specific information
*/
public DatabaseContainer getDatabaseById(String containerID) {
final InspectContainerResponse container = dockerClient.inspectContainerCmd(containerID).exec();
return databaseContainerMapper.inspectContainerResponseToDatabaseContainer(container);
} }
public List<DatabaseContainer> getAll() { public List<DatabaseContainer> getAll() {
final List<Container> containers = dockerClient.listContainersCmd() return containerRepository.findAll();
.withShowAll(true)
// .withAncestorFilter(databaseProperties.getDatabaseImages())
.exec();
return containers.stream()
.map(databaseContainerMapper::containerToDatabaseContainer)
.collect(Collectors.toList());
} }
} }
package at.tuwien.service;
import at.tuwien.entity.ContainerImage;
import at.tuwien.repository.ImageRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ImageService {
private final ImageRepository imageRepository;
@Autowired
public ImageService(ImageRepository imageRepository) {
this.imageRepository = imageRepository;
}
public List<ContainerImage> getAll() {
return imageRepository.findAll();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment