@Test public void testHealthCheckSuccessWithTcpAndPortBindings() throws Throwable { ComputeState containerHost = new ComputeState(); containerHost.address = host.getPreferredAddress(); containerHost.descriptionLink = UriUtils.buildUriPath(ComputeService.FACTORY_LINK, "mockId"); containerHost = doPost(containerHost, ComputeService.FACTORY_LINK); // Create health config and a container to check the health for String mockContainerDescriptionLink = UriUtils.buildUriPath( ContainerDescriptionService.FACTORY_LINK, "mockDescId"); ContainerDescription containerDesc = createContainerDescription(); containerDesc.documentSelfLink = mockContainerDescriptionLink; containerDesc.healthConfig.protocol = RequestProtocol.TCP; containerDesc.healthConfig.port = 8085; containerDesc = doPost(containerDesc, ContainerDescriptionService.FACTORY_LINK); ContainerState container = createContainerStateNoAddress(mockContainerDescriptionLink); container.parentLink = containerHost.documentSelfLink; PortBinding portBinding = new PortBinding(); portBinding.containerPort = "8085"; portBinding.hostPort = "8085"; container.ports = Arrays.asList(portBinding); container = doPost(container, ContainerFactoryService.SELF_LINK); try (ServerSocket socket = new ServerSocket(containerDesc.healthConfig.port)) { verifyHealthSuccessAfterThreshold(containerDesc.healthConfig.healthyThreshold, containerDesc, container); } }
@Test public void testHealthConfigIdempotentPost() throws Throwable { String id = UUID.randomUUID().toString(); ContainerDescription containerDesc = createContainerDescription(); containerDesc.documentSelfLink = ContainerDescriptionService.FACTORY_LINK + "/" + id; containerDesc = doPost(containerDesc, ContainerDescriptionService.FACTORY_LINK); ContainerDescription putConfig = createContainerDescription(); putConfig.documentSelfLink = ContainerDescriptionService.FACTORY_LINK + "/" + id; putConfig.healthConfig.urlPath = "/ping1"; doOperation(putConfig, UriUtils.buildUri(host, putConfig.documentSelfLink), false, Action.PUT); containerDesc = getDocument(ContainerDescription.class, containerDesc.documentSelfLink); assertEquals(putConfig.healthConfig.urlPath, containerDesc.healthConfig.urlPath); putConfig = createContainerDescription(); putConfig.documentSelfLink = ContainerDescriptionService.FACTORY_LINK + "/" + id; putConfig.healthConfig.urlPath = "/ping2"; containerDesc = doPost(putConfig, ContainerDescriptionService.FACTORY_LINK); containerDesc = getDocument(ContainerDescription.class, containerDesc.documentSelfLink); assertEquals(putConfig.healthConfig.urlPath, containerDesc.healthConfig.urlPath); delete(containerDesc.documentSelfLink); putConfig = createContainerDescription(); putConfig.documentSelfLink = ContainerDescriptionService.FACTORY_LINK + "/" + id; putConfig.healthConfig.urlPath = "/ping3"; containerDesc = doPost(putConfig, ContainerDescriptionService.FACTORY_LINK); containerDesc = getDocument(ContainerDescription.class, containerDesc.documentSelfLink); assertEquals(putConfig.healthConfig.urlPath, containerDesc.healthConfig.urlPath); }
@Test public void testHealthCheckSuccessWithHttpAndPortBindings() throws Throwable { ComputeState containerHost = new ComputeState(); containerHost.address = host.getPreferredAddress(); containerHost.descriptionLink = UriUtils.buildUriPath(ComputeService.FACTORY_LINK, "mockId"); containerHost = doPost(containerHost, ComputeService.FACTORY_LINK); // Create health config and a container to check the health for String mockContainerDescriptionLink = UriUtils.buildUriPath( ContainerDescriptionService.FACTORY_LINK, "mockDescId"); ContainerDescription containerDesc = createContainerDescription(); containerDesc.documentSelfLink = mockContainerDescriptionLink; containerDesc.healthConfig.port = 85; containerDesc = doPost(containerDesc, ContainerDescriptionService.FACTORY_LINK); ContainerState container = createContainerStateNoAddress(mockContainerDescriptionLink); container.parentLink = containerHost.documentSelfLink; PortBinding portBinding = new PortBinding(); portBinding.containerPort = "85"; portBinding.hostPort = String.valueOf(host.getPort()); container.ports = Arrays.asList(portBinding); container = doPost(container, ContainerFactoryService.SELF_LINK); // Start a test service to ping for health check TestHealthService pingService = new TestHealthService(); URI pingServiceUri = UriUtils.buildUri(host, TestHealthService.SELF_LINK); host.startService(Operation.createPost(pingServiceUri), pingService); waitForServiceAvailability(TestHealthService.SELF_LINK); verifyHealthSuccessAfterThreshold(containerDesc.healthConfig.healthyThreshold, containerDesc, container); }
@Test public void testHealthCheckSuccessWithHttpAndDefaultPort() throws Throwable { // Create health config and a container to check the health for String mockContainerDescriptionLink = UriUtils.buildUriPath( ContainerDescriptionService.FACTORY_LINK, "mockDescId"); ContainerDescription containerDesc = createContainerDescription(); containerDesc.documentSelfLink = mockContainerDescriptionLink; containerDesc = doPost(containerDesc, ContainerDescriptionService.FACTORY_LINK); ContainerState container = createContainerStateNoAddress(mockContainerDescriptionLink); container = doPost(container, ContainerFactoryService.SELF_LINK); // Start a test service to ping for health check TestHealthService pingService = new TestHealthService(); URI pingServiceUri = UriUtils.buildUri(host, TestHealthService.SELF_LINK); host.startService(Operation.createPost(pingServiceUri), pingService); waitForServiceAvailability(TestHealthService.SELF_LINK); verifyHealthSuccessAfterThreshold(containerDesc.healthConfig.healthyThreshold, containerDesc, container); }
@Test public void testHealthCheckWithHttpAndDefaultPortThresholds() throws Throwable { // Create health config and a container to check the health for ContainerDescription containerDesc = createContainerDescription(); containerDesc.documentSelfLink = UriUtils.buildUriPath( ContainerDescriptionService.FACTORY_LINK, "mockDescId"); containerDesc.healthConfig = new HealthConfig(); containerDesc.healthConfig.protocol = RequestProtocol.HTTP; containerDesc.healthConfig.httpMethod = Action.GET; containerDesc.healthConfig.urlPath = TestHealthService.SELF_LINK; containerDesc = doPost(containerDesc, ContainerDescriptionService.FACTORY_LINK); ContainerState container = createContainerStateNoAddress(containerDesc.documentSelfLink); container.powerState = PowerState.RUNNING; container = doPost(container, ContainerFactoryService.SELF_LINK); verifyHealthFailureAfterThreshold(3, containerDesc, container); // Start a test service to ping for health check TestHealthService pingService = new TestHealthService(); URI pingServiceUri = UriUtils.buildUri(host, TestHealthService.SELF_LINK); host.startService(Operation.createPost(pingServiceUri), pingService); waitForServiceAvailability(TestHealthService.SELF_LINK); verifyHealthSuccessAfterThreshold(3, containerDesc, container); }
@Test public void testHealthCheckWithCommand() throws Throwable { // Create health config and a container to check the health for String mockContainerDescriptionLink = UriUtils.buildUriPath( ContainerDescriptionService.FACTORY_LINK, "mockDescId"); ContainerDescription containerDesc = createContainerDescription(); containerDesc.documentSelfLink = mockContainerDescriptionLink; containerDesc.healthConfig.healthyThreshold = 1; containerDesc.healthConfig.protocol = RequestProtocol.COMMAND; containerDesc.healthConfig.command = "echo"; containerDesc = doPost(containerDesc, ContainerDescriptionService.FACTORY_LINK); ContainerState container = createContainerStateNoAddress(mockContainerDescriptionLink); container.adapterManagementReference = UriUtils.buildPublicUri(host, MockDockerAdapterService.SELF_LINK); container.powerState = PowerState.RUNNING; container = doPost(container, ContainerFactoryService.SELF_LINK); verifyHealthFailureAfterThreshold(containerDesc.healthConfig.unhealthyThreshold, containerDesc, container); MockDockerAdapterService dockerAdapterService = new MockDockerAdapterService(); host.startService(Operation.createPost(UriUtils.buildUri(host, MockDockerAdapterService.class)), dockerAdapterService); waitForServiceAvailability(MockDockerAdapterService.SELF_LINK); verifyHealthSuccessAfterThreshold(containerDesc.healthConfig.healthyThreshold, containerDesc, container); }
@Test public void testHealthConfigPatch() throws Throwable { ContainerDescription containerDesc = createContainerDescription(); containerDesc = doPost(containerDesc, ContainerDescriptionService.FACTORY_LINK); ContainerDescription patchConfig = new ContainerDescription(); patchConfig.healthConfig = new HealthConfig(); patchConfig.healthConfig.urlPath = "/ping"; patchConfig.healthConfig.protocol = RequestProtocol.TCP; doOperation(patchConfig, UriUtils.buildUri(host, containerDesc.documentSelfLink), false, Action.PATCH); ContainerDescription config = getDocument(ContainerDescription.class, containerDesc.documentSelfLink); assertEquals(patchConfig.healthConfig.urlPath, config.healthConfig.urlPath); }