diff options
author | valerijf <valerijf@yahoo-inc.com> | 2016-06-28 11:00:19 +0200 |
---|---|---|
committer | valerijf <valerijf@yahoo-inc.com> | 2016-06-28 11:00:19 +0200 |
commit | 478aff969431059c5cf1ecc215b6da15c2e0fee9 (patch) | |
tree | c75a4df1aa4674c92f04c69164b66f60998a1d74 /node-admin | |
parent | db8e60d1553b9c625ae943416a174d9767aa7cb0 (diff) |
Added Docker failure test
Diffstat (limited to 'node-admin')
-rw-r--r-- | node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java new file mode 100644 index 00000000000..9f0227e7b38 --- /dev/null +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java @@ -0,0 +1,107 @@ +package com.yahoo.vespa.hosted.node.admin.integrationTests; + + +import com.yahoo.vespa.applicationmodel.HostName; +import com.yahoo.vespa.hosted.node.admin.ContainerNodeSpec; +import com.yahoo.vespa.hosted.node.admin.NodeAdmin; +import com.yahoo.vespa.hosted.node.admin.NodeAdminImpl; +import com.yahoo.vespa.hosted.node.admin.NodeAdminStateUpdater; +import com.yahoo.vespa.hosted.node.admin.NodeAgent; +import com.yahoo.vespa.hosted.node.admin.NodeAgentImpl; +import com.yahoo.vespa.hosted.node.admin.docker.ContainerName; +import com.yahoo.vespa.hosted.node.admin.docker.DockerImage; +import com.yahoo.vespa.hosted.node.admin.noderepository.NodeState; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.Optional; +import java.util.function.Function; + +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; + +/** + * @author valerijf + */ +public class DockerFailTest { + private NodeRepoMock nodeRepositoryMock; + private DockerMock dockerMock; + private ContainerNodeSpec initialContainerNodeSpec; + private NodeAdminStateUpdater updater; + + @Before + public void before() throws InterruptedException { + try { + OrchestratorMock.semaphore.acquire(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + OrchestratorMock.reset(); + NodeRepoMock.reset(); + DockerMock.reset(); + + OrchestratorMock orchestratorMock = new OrchestratorMock(); + nodeRepositoryMock = new NodeRepoMock(); + dockerMock = new DockerMock(); + + Function<HostName, NodeAgent> nodeAgentFactory = (hostName) -> + new NodeAgentImpl(hostName, dockerMock, nodeRepositoryMock, orchestratorMock); + NodeAdmin nodeAdmin = new NodeAdminImpl(dockerMock, nodeAgentFactory); + + HostName hostName = new HostName("hostName"); + initialContainerNodeSpec = new ContainerNodeSpec( + hostName, + Optional.of(new DockerImage("dockerImage")), + new ContainerName("container"), + NodeState.ACTIVE, + Optional.of(1L), + Optional.of(1L), + Optional.of(1d), + Optional.of(1d), + Optional.of(1d)); + NodeRepoMock.addContainerNodeSpec(initialContainerNodeSpec); + + updater = new NodeAdminStateUpdater(nodeRepositoryMock, nodeAdmin, 1, 1, orchestratorMock, "basehostname"); + + // Wait for node admin to be notified with node repo state and the docker container has been started + while (nodeAdmin.getListOfHosts().size() == 0) { + Thread.sleep(10); + } + + while (!DockerMock.getRequests().startsWith("startContainer with DockerImage: DockerImage { imageId=dockerImage }, " + + "HostName: hostName, ContainerName: ContainerName { name=container }, minCpuCores: 1.0, minDiskAvailableGb: 1.0, " + + "minMainMemoryAvailableGb: 1.0\nexecuteInContainer with ContainerName: ContainerName { name=container }, " + + "args: [/usr/bin/env, test, -x, /opt/vespa/bin/vespa-nodectl]\nexecuteInContainer with ContainerName: " + + "ContainerName { name=container }, args: [/opt/vespa/bin/vespa-nodectl, resume]\n")) { + Thread.sleep(10); + } + } + + @After + public void after() { + updater.deconstruct(); + OrchestratorMock.semaphore.release(); + } + + @Test + public void dockerFailTest() throws InterruptedException { + dockerMock.deleteContainer(initialContainerNodeSpec.containerName); + + String goal = "startContainer with DockerImage: DockerImage { imageId=dockerImage }, HostName: hostName, " + + "ContainerName: ContainerName { name=container }, minCpuCores: 1.0, minDiskAvailableGb: 1.0, minMainMemoryAvailableGb: 1.0\n" + + "executeInContainer with ContainerName: ContainerName { name=container }, args: [/usr/bin/env, test, -x, /opt/vespa/bin/vespa-nodectl]\n" + + "executeInContainer with ContainerName: ContainerName { name=container }, args: [/opt/vespa/bin/vespa-nodectl, resume]\n" + + "deleteContainer with ContainerName: ContainerName { name=container }\n" + + "startContainer with DockerImage: DockerImage { imageId=dockerImage }, HostName: hostName, ContainerName: " + + "ContainerName { name=container }, minCpuCores: 1.0, minDiskAvailableGb: 1.0, minMainMemoryAvailableGb: 1.0\n" + + "executeInContainer with ContainerName: ContainerName { name=container }, args: [/usr/bin/env, test, -x, /opt/vespa/bin/vespa-nodectl]\n" + + "executeInContainer with ContainerName: ContainerName { name=container }, args: [/opt/vespa/bin/vespa-nodectl, resume]\n"; + while (!DockerMock.getRequests().equals(goal)) { + Thread.sleep(10); + } + + assertThat(DockerMock.getRequests(), is(goal)); + } +} |