diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java index 207fb9778d9547661d0c17b23fde27f67c55d4e8..f20a5bf5e410b0334d5f94df7c2080a7524c4d11 100644 --- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java @@ -26,6 +26,7 @@ import org.springframework.web.bind.annotation.*; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; + import java.security.Principal; import java.util.List; import java.util.Optional; @@ -152,14 +153,14 @@ public class ContainerEndpoint { mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), }) - public ResponseEntity<ContainerDto> findById(@NotNull @PathVariable("id") Long containerId) throws DockerClientException, - ContainerNotFoundException { + public ResponseEntity<ContainerDto> findById(@NotNull @PathVariable("id") Long containerId) + throws DockerClientException, ContainerNotFoundException { log.debug("endpoint find container, id={}", containerId); final Container container = containerService.find(containerId); final ContainerDto dto = containerMapper.containerToContainerDto(container); final ContainerDto inspect; try { - inspect = containerService.inspect(container.getHash()); + inspect = containerService.inspect(containerId); dto.setIpAddress(inspect.getIpAddress()); dto.setRunning(inspect.getRunning()); dto.setState(inspect.getState()); diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointIntegrationTest.java index a1a199c00ecf54e4d2c5509e342feaa7fca6108a..180297063bdcc2522162acde08a591059c9bcb76 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointIntegrationTest.java +++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointIntegrationTest.java @@ -107,7 +107,7 @@ public class ContainerEndpointIntegrationTest extends BaseUnitTest { @Test @WithMockUser(username = USER_2_USERNAME, authorities = {"delete-container"}) public void delete_hasRole_succeeds() throws ContainerStillRunningException, ContainerAlreadyRemovedException, - ContainerNotFoundException, DockerClientException { + ContainerNotFoundException { /* mock */ when(userRepository.findByUsername(USER_2_USERNAME)) @@ -214,8 +214,7 @@ public class ContainerEndpointIntegrationTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-container-state"}) public void modify_hasRole_succeeds() throws ContainerAlreadyRunningException, - ContainerAlreadyStoppedException, ContainerNotFoundException, UserNotFoundException, NotAllowedException, - DockerClientException { + ContainerAlreadyStoppedException, ContainerNotFoundException, UserNotFoundException, NotAllowedException { /* mock */ when(userRepository.findByUsername(USER_1_USERNAME)) @@ -242,7 +241,7 @@ public class ContainerEndpointIntegrationTest extends BaseUnitTest { @Test @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-foreign-container-state"}) public void modify_hasRoleForeign_succeeds() throws UserNotFoundException, ContainerAlreadyRunningException, - NotAllowedException, ContainerAlreadyStoppedException, ContainerNotFoundException, DockerClientException { + NotAllowedException, ContainerAlreadyStoppedException, ContainerNotFoundException { /* mock */ when(userRepository.findByUsername(USER_2_USERNAME)) @@ -276,7 +275,7 @@ public class ContainerEndpointIntegrationTest extends BaseUnitTest { /* mock */ when(containerService.find(containerId)) .thenReturn(container); - when(containerService.inspect(containerHash)) + when(containerService.inspect(containerId)) .thenReturn(containerDto); /* test */ diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java index 23e8ed753219f23e8040573eca5ac43da97d311f..04cd7b7dc1f69705202fa1512ba5d005d51b081f 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java +++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java @@ -319,7 +319,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { containerRepository.save(CONTAINER_1_SIMPLE); /* test */ - final ContainerDto response = containerService.inspect(CONTAINER_1_HASH); + final ContainerDto response = containerService.inspect(CONTAINER_1_ID); assertEquals(CONTAINER_1_ID, response.getId()); assertEquals(CONTAINER_1_NAME, response.getName()); assertEquals(CONTAINER_1_INTERNALNAME, response.getInternalName()); @@ -331,7 +331,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { /* test */ assertThrows(ContainerNotFoundException.class, () -> { - containerService.inspect(CONTAINER_2_HASH); + containerService.inspect(CONTAINER_2_ID); }); } @@ -344,7 +344,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { /* test */ assertThrows(ContainerNotRunningException.class, () -> { - containerService.inspect(CONTAINER_1_HASH); + containerService.inspect(CONTAINER_1_ID); }); } } diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/ContainerService.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/ContainerService.java index c66cd56e5b76811e30e268848fa4275b2dc26d76..62318ffcefd034045f54b8f0ee7b3ecc222b1ed0 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/service/ContainerService.java @@ -48,12 +48,12 @@ public interface ContainerService { Container find(Long id) throws ContainerNotFoundException; /** - * @param hash + * @param id * @return * @throws DockerClientException * @throws ContainerNotRunningException */ - ContainerDto inspect(String hash) throws DockerClientException, ContainerNotRunningException; + ContainerDto inspect(Long id) throws DockerClientException, ContainerNotRunningException, ContainerNotFoundException; /** * Retrieve a list of all containers from the metadata database diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java index bed82910cab1d59d8ad016225bb8b5d9612eb93c..74d4f07a645b21c68c3983fc9c303c02ac13300e 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java @@ -186,10 +186,11 @@ public class ContainerServiceImpl implements ContainerService { @Override @Transactional - public ContainerDto inspect(String hash) throws DockerClientException, ContainerNotRunningException { + public ContainerDto inspect(Long id) throws DockerClientException, ContainerNotRunningException, ContainerNotFoundException { + final Container container = find(id); final InspectContainerResponse response; try { - response = dockerClient.inspectContainerCmd(hash) + response = dockerClient.inspectContainerCmd(container.getHash()) .withSize(true) .exec(); } catch (NotFoundException e) { @@ -207,8 +208,8 @@ public class ContainerServiceImpl implements ContainerService { log.error("Failed to inspect container state: container is not running"); throw new ContainerNotRunningException("Failed to inspect container state"); } - final ContainerDto container = ContainerDto.builder() - .hash(hash) + final ContainerDto entity = ContainerDto.builder() + .hash(container.getHash()) .running(response.getState().getRunning()) .state(containerMapper.containerStateToContainerStateDto(response.getState())) .build(); @@ -219,8 +220,8 @@ public class ContainerServiceImpl implements ContainerService { log.trace("key {} network {}", key, network); container.setIpAddress(network.getIpAddress()); }); - log.info("Inspected container with hash {}", hash); - return container; + log.info("Inspected container with hash {}", container.getHash()); + return entity; } @Override diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java index e0135a0715100e5a6bd4b7e27bb80a12d9ef30bf..38bdd44dc4da19b29b6406e19135c8f9ff89a682 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java @@ -4,6 +4,7 @@ import at.tuwien.api.amqp.CreateVirtualHostDto; import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto; import at.tuwien.api.auth.SignupRequestDto; import at.tuwien.api.container.ContainerDto; +import at.tuwien.api.container.ContainerStateDto; import at.tuwien.api.container.image.*; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.api.database.DatabaseDto; @@ -885,6 +886,8 @@ public abstract class BaseTest { public final static HealthCheck CONTAINER_1_HEALTHCHECK = new HealthCheck() .withTest(List.of("CMD", "mysqladmin", "ping", "--host=127.0.0.1", "--password=mariadb")); public final static String[] CONTAINER_1_ENV = new String[]{"MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=weather"}; + public final static ContainerStateDto CONTAINER_1_STATE = ContainerStateDto.RUNNING; + public final static Boolean CONTAINER_1_RUNNING = true; public final static Container CONTAINER_1 = Container.builder() .id(CONTAINER_1_ID) @@ -925,6 +928,8 @@ public abstract class BaseTest { .created(CONTAINER_1_CREATED) .ipAddress(CONTAINER_1_IP) .owner(USER_1_BRIEF_DTO) + .state(CONTAINER_1_STATE) + .running(CONTAINER_1_RUNNING) .build(); public final static Long CONTAINER_2_ID = 2L;