summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorvalerijf <valerijf@yahoo-inc.com>2016-06-28 11:00:19 +0200
committervalerijf <valerijf@yahoo-inc.com>2016-06-28 11:00:19 +0200
commit478aff969431059c5cf1ecc215b6da15c2e0fee9 (patch)
treec75a4df1aa4674c92f04c69164b66f60998a1d74 /node-admin
parentdb8e60d1553b9c625ae943416a174d9767aa7cb0 (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.java107
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));
+ }
+}