diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-09-07 15:06:53 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-09-07 15:06:53 +0200 |
commit | e858dfe2815e6ffda326f69f1a62bcb0f4c2c3db (patch) | |
tree | fd8ec0e8c682497147f0ecf3ca2a6eee9d00c8dc /node-admin/src/test | |
parent | db9105023dc06c7ca56a2914735dba663bd21d5c (diff) |
Move to container engine neutral names
Diffstat (limited to 'node-admin/src/test')
11 files changed, 252 insertions, 252 deletions
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java index 2e40596bcf0..e39161f828a 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; import com.yahoo.application.Networking; import com.yahoo.application.container.JDisc; -import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.ContainerImage; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.host.FlavorOverrides; @@ -106,7 +106,7 @@ public class RealNodeRepositoryTest { assertThat(containersToRun.size(), is(1)); NodeSpec node = containersToRun.get(0); assertThat(node.hostname(), is("host4.yahoo.com")); - assertThat(node.wantedDockerImage().get(), is(DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:6.42.0"))); + assertThat(node.wantedDockerImage().get(), is(ContainerImage.fromString("docker-registry.domain.tld:8080/dist/vespa:6.42.0"))); assertThat(node.state(), is(NodeState.active)); assertThat(node.wantedRestartGeneration().get(), is(0L)); assertThat(node.currentRestartGeneration().get(), is(0L)); @@ -137,7 +137,7 @@ public class RealNodeRepositoryTest { hostname, new NodeAttributes() .withRestartGeneration(1) - .withDockerImage(DockerImage.fromString("image-1:6.2.3"))); + .withDockerImage(ContainerImage.fromString("image-1:6.2.3"))); } @Test diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperationsImplTest.java index bacebcc42c0..4aa59c63662 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/ContainerOperationsImplTest.java @@ -2,10 +2,10 @@ package com.yahoo.vespa.hosted.node.admin.docker; import com.google.common.net.InetAddresses; -import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.ContainerImage; import com.yahoo.vespa.hosted.dockerapi.Container; +import com.yahoo.vespa.hosted.dockerapi.ContainerEngine; import com.yahoo.vespa.hosted.dockerapi.ContainerName; -import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.node.admin.nodeagent.ContainerData; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; @@ -32,26 +32,26 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -public class DockerOperationsImplTest { - private final Docker docker = mock(Docker.class); +public class ContainerOperationsImplTest { + private final ContainerEngine containerEngine = mock(ContainerEngine.class); private final TestTerminal terminal = new TestTerminal(); private final IPAddresses ipAddresses = new IPAddressesMock(); private final FileSystem fileSystem = TestFileSystem.create(); - private final DockerOperationsImpl dockerOperations = new DockerOperationsImpl( - docker, terminal, ipAddresses, fileSystem); + private final ContainerOperationsImpl dockerOperations = new ContainerOperationsImpl( + containerEngine, terminal, ipAddresses, fileSystem); @Test public void processResultFromNodeProgramWhenSuccess() { final NodeAgentContext context = new NodeAgentContextImpl.Builder("container-123.domain.tld").build(); final ProcessResult actualResult = new ProcessResult(0, "output", "errors"); - when(docker.executeInContainerAsUser(any(), any(), any(), any())) + when(containerEngine.executeInContainerAsUser(any(), any(), any(), any())) .thenReturn(actualResult); // output from node program ProcessResult result = dockerOperations.executeNodeCtlInContainer(context, "start"); - final InOrder inOrder = inOrder(docker); - inOrder.verify(docker, times(1)).executeInContainerAsUser( + final InOrder inOrder = inOrder(containerEngine); + inOrder.verify(containerEngine, times(1)).executeInContainerAsUser( eq(context.containerName()), eq("root"), eq(OptionalLong.empty()), @@ -66,7 +66,7 @@ public class DockerOperationsImplTest { final NodeAgentContext context = new NodeAgentContextImpl.Builder("container-123.domain.tld").build(); final ProcessResult actualResult = new ProcessResult(3, "output", "errors"); - when(docker.executeInContainerAsUser(any(), any(), any(), any())) + when(containerEngine.executeInContainerAsUser(any(), any(), any(), any())) .thenReturn(actualResult); // output from node program dockerOperations.executeNodeCtlInContainer(context, "start"); @@ -83,9 +83,9 @@ public class DockerOperationsImplTest { } private Container makeContainer(String name, Container.State state, int pid) { - final Container container = new Container(name + ".fqdn", DockerImage.fromString("mock"), null, + final Container container = new Container(name + ".fqdn", ContainerImage.fromString("mock"), null, new ContainerName(name), state, pid); - when(docker.getContainer(eq(container.name))).thenReturn(Optional.of(container)); + when(containerEngine.getContainer(eq(container.name))).thenReturn(Optional.of(container)); return container; } @@ -100,7 +100,7 @@ public class DockerOperationsImplTest { verify(containerData, times(1)).addFile( fileSystem.getPath("/etc/hosts"), - "# This file was generated by com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl\n" + + "# This file was generated by com.yahoo.vespa.hosted.node.admin.docker.ContainerOperationsImpl\n" + "127.0.0.1 localhost\n" + "::1 localhost ip6-localhost ip6-loopback\n" + "fe00::0 ip6-localnet\n" + @@ -113,7 +113,7 @@ public class DockerOperationsImplTest { verify(containerData, times(1)).addFile( fileSystem.getPath("/etc/hosts"), - "# This file was generated by com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl\n" + + "# This file was generated by com.yahoo.vespa.hosted.node.admin.docker.ContainerOperationsImpl\n" + "127.0.0.1 localhost\n" + "::1 localhost ip6-localhost ip6-loopback\n" + "fe00::0 ip6-localnet\n" + 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 index 0ed52cae5b8..50435ccf46d 100644 --- 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 @@ -1,7 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; -import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.ContainerImage; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import org.junit.Test; @@ -19,24 +19,24 @@ public class DockerFailTest { @Test public void dockerFailTest() { try (DockerTester tester = new DockerTester()) { - final DockerImage dockerImage = DockerImage.fromString("dockerImage"); + final ContainerImage containerImage = ContainerImage.fromString("containerImage"); final ContainerName containerName = new ContainerName("host1"); final String hostname = "host1.test.yahoo.com"; tester.addChildNodeRepositoryNode(NodeSpec.Builder .testSpec(hostname) - .wantedDockerImage(dockerImage) - .currentDockerImage(dockerImage) + .wantedDockerImage(containerImage) + .currentDockerImage(containerImage) .build()); - tester.inOrder(tester.docker).createContainerCommand(eq(dockerImage), eq(containerName)); - tester.inOrder(tester.docker).executeInContainerAsUser( + tester.inOrder(tester.containerEngine).createContainerCommand(eq(containerImage), eq(containerName)); + tester.inOrder(tester.containerEngine).executeInContainerAsUser( eq(containerName), eq("root"), any(), eq(DockerTester.NODE_PROGRAM), eq("resume")); - tester.docker.deleteContainer(new ContainerName("host1")); + tester.containerEngine.deleteContainer(new ContainerName("host1")); - tester.inOrder(tester.docker).deleteContainer(eq(containerName)); - tester.inOrder(tester.docker).createContainerCommand(eq(dockerImage), eq(containerName)); - tester.inOrder(tester.docker).executeInContainerAsUser( + tester.inOrder(tester.containerEngine).deleteContainer(eq(containerName)); + tester.inOrder(tester.containerEngine).createContainerCommand(eq(containerImage), eq(containerName)); + tester.inOrder(tester.containerEngine).executeInContainerAsUser( eq(containerName), eq("root"), any(), eq(DockerTester.NODE_PROGRAM), eq("resume")); verify(tester.nodeRepository, never()).updateNodeAttributes(any(), any()); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java index 1484e40afe9..000d0e69550 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerMock.java @@ -1,12 +1,12 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; -import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.ContainerImage; import com.yahoo.vespa.hosted.dockerapi.Container; +import com.yahoo.vespa.hosted.dockerapi.ContainerEngine; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.ContainerResources; import com.yahoo.vespa.hosted.dockerapi.ContainerStats; -import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import java.net.InetAddress; @@ -23,13 +23,13 @@ import java.util.OptionalLong; * * @author freva */ -public class DockerMock implements Docker { +public class DockerMock implements ContainerEngine { private final Map<ContainerName, Container> containersByContainerName = new HashMap<>(); private static final Object monitor = new Object(); @Override - public CreateContainerCommand createContainerCommand(DockerImage dockerImage, ContainerName containerName) { - return new StartContainerCommandMock(dockerImage, containerName); + public CreateContainerCommand createContainerCommand(ContainerImage containerImage, ContainerName containerName) { + return new StartContainerCommandMock(containerImage, containerName); } @Override @@ -75,14 +75,14 @@ public class DockerMock implements Docker { } @Override - public boolean pullImageAsyncIfNeeded(DockerImage image) { + public boolean pullImageAsyncIfNeeded(ContainerImage image) { synchronized (monitor) { return false; } } @Override - public boolean deleteUnusedDockerImages(List<DockerImage> excludes, Duration minImageAgeToDelete) { + public boolean deleteUnusedContainerImages(List<ContainerImage> excludes, Duration minImageAgeToDelete) { return false; } @@ -98,13 +98,13 @@ public class DockerMock implements Docker { public class StartContainerCommandMock implements CreateContainerCommand { - private final DockerImage dockerImage; + private final ContainerImage containerImage; private final ContainerName containerName; private String hostName; private ContainerResources containerResources; - public StartContainerCommandMock(DockerImage dockerImage, ContainerName containerName) { - this.dockerImage = dockerImage; + public StartContainerCommandMock(ContainerImage containerImage, ContainerName containerName) { + this.containerImage = containerImage; this.containerName = containerName; } @@ -194,7 +194,7 @@ public class DockerMock implements Docker { public void create() { synchronized (monitor) { containersByContainerName.put( - containerName, new Container(hostName, dockerImage, containerResources, containerName, Container.State.RUNNING, 2)); + containerName, new Container(hostName, containerImage, containerResources, containerName, Container.State.RUNNING, 2)); } } } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java index bf14ac2ce5e..da6f115463c 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerTester.java @@ -4,12 +4,12 @@ package com.yahoo.vespa.hosted.node.admin.integrationTests; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.flags.InMemoryFlagSource; -import com.yahoo.vespa.hosted.dockerapi.Docker; +import com.yahoo.vespa.hosted.dockerapi.ContainerEngine; import com.yahoo.vespa.hosted.dockerapi.metrics.Metrics; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; -import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; -import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl; +import com.yahoo.vespa.hosted.node.admin.docker.ContainerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.ContainerOperationsImpl; import com.yahoo.vespa.hosted.node.admin.maintenance.StorageMaintainer; import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl; import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater; @@ -51,11 +51,11 @@ public class DockerTester implements AutoCloseable { private final Thread loopThread; - final Docker docker = spy(new DockerMock()); + final ContainerEngine containerEngine = spy(new DockerMock()); final NodeRepoMock nodeRepository = spy(new NodeRepoMock()); final Orchestrator orchestrator = mock(Orchestrator.class); final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class); - final InOrder inOrder = Mockito.inOrder(docker, nodeRepository, orchestrator, storageMaintainer); + final InOrder inOrder = Mockito.inOrder(containerEngine, nodeRepository, orchestrator, storageMaintainer); final InMemoryFlagSource flagSource = new InMemoryFlagSource(); final NodeAdminStateUpdater nodeAdminStateUpdater; @@ -81,10 +81,10 @@ public class DockerTester implements AutoCloseable { Clock clock = Clock.systemUTC(); Metrics metrics = new Metrics(); FileSystem fileSystem = TestFileSystem.create(); - DockerOperations dockerOperations = new DockerOperationsImpl(docker, terminal, ipAddresses, fileSystem); + ContainerOperations containerOperations = new ContainerOperationsImpl(containerEngine, terminal, ipAddresses, fileSystem); NodeAgentFactory nodeAgentFactory = (contextSupplier, nodeContext) -> new NodeAgentImpl( - contextSupplier, nodeRepository, orchestrator, dockerOperations, storageMaintainer, flagSource, + contextSupplier, nodeRepository, orchestrator, containerOperations, storageMaintainer, flagSource, Optional.empty(), Optional.empty(), Optional.empty(), clock, Duration.ofSeconds(-1)); nodeAdmin = new NodeAdminImpl(nodeAgentFactory, metrics, clock, Duration.ofMillis(10), Duration.ZERO); NodeAgentContextFactory nodeAgentContextFactory = (nodeSpec, acl) -> diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java index e5156e68810..1c2bd86a00e 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java @@ -1,7 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; -import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.ContainerImage; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; @@ -20,31 +20,31 @@ public class MultiDockerTest { @Test public void test() { try (DockerTester tester = new DockerTester()) { - addAndWaitForNode(tester, "host1.test.yahoo.com", DockerImage.fromString("image1")); + addAndWaitForNode(tester, "host1.test.yahoo.com", ContainerImage.fromString("image1")); NodeSpec nodeSpec2 = addAndWaitForNode( - tester, "host2.test.yahoo.com", DockerImage.fromString("image2")); + tester, "host2.test.yahoo.com", ContainerImage.fromString("image2")); tester.addChildNodeRepositoryNode(NodeSpec.Builder.testSpec(nodeSpec2.hostname(), NodeState.dirty).build()); - tester.inOrder(tester.docker).deleteContainer(eq(new ContainerName("host2"))); + tester.inOrder(tester.containerEngine).deleteContainer(eq(new ContainerName("host2"))); tester.inOrder(tester.storageMaintainer).archiveNodeStorage( argThat(context -> context.containerName().equals(new ContainerName("host2")))); tester.inOrder(tester.nodeRepository).setNodeState(eq(nodeSpec2.hostname()), eq(NodeState.ready)); - addAndWaitForNode(tester, "host3.test.yahoo.com", DockerImage.fromString("image1")); + addAndWaitForNode(tester, "host3.test.yahoo.com", ContainerImage.fromString("image1")); } } - private NodeSpec addAndWaitForNode(DockerTester tester, String hostName, DockerImage dockerImage) { - NodeSpec nodeSpec = NodeSpec.Builder.testSpec(hostName).wantedDockerImage(dockerImage).build(); + private NodeSpec addAndWaitForNode(DockerTester tester, String hostName, ContainerImage containerImage) { + NodeSpec nodeSpec = NodeSpec.Builder.testSpec(hostName).wantedDockerImage(containerImage).build(); tester.addChildNodeRepositoryNode(nodeSpec); ContainerName containerName = ContainerName.fromHostname(hostName); - tester.inOrder(tester.docker).createContainerCommand(eq(dockerImage), eq(containerName)); - tester.inOrder(tester.docker).executeInContainerAsUser( + tester.inOrder(tester.containerEngine).createContainerCommand(eq(containerImage), eq(containerName)); + tester.inOrder(tester.containerEngine).executeInContainerAsUser( eq(containerName), eq("root"), any(), eq(DockerTester.NODE_PROGRAM), eq("resume")); tester.inOrder(tester.nodeRepository).updateNodeAttributes(eq(hostName), - eq(new NodeAttributes().withDockerImage(dockerImage).withVespaVersion(dockerImage.tagAsVersion()))); + eq(new NodeAttributes().withDockerImage(containerImage).withVespaVersion(containerImage.tagAsVersion()))); return nodeSpec; } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java index 30f23de15bf..4fb1c578fac 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RebootTest.java @@ -1,7 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; -import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.ContainerImage; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater; @@ -23,14 +23,14 @@ import static org.mockito.ArgumentMatchers.eq; public class RebootTest { private final String hostname = "host1.test.yahoo.com"; - private final DockerImage dockerImage = DockerImage.fromString("dockerImage"); + private final ContainerImage containerImage = ContainerImage.fromString("containerImage"); @Test public void test() { try (DockerTester tester = new DockerTester()) { - tester.addChildNodeRepositoryNode(NodeSpec.Builder.testSpec(hostname).wantedDockerImage(dockerImage).build()); + tester.addChildNodeRepositoryNode(NodeSpec.Builder.testSpec(hostname).wantedDockerImage(containerImage).build()); - tester.inOrder(tester.docker).createContainerCommand(eq(dockerImage), eq(new ContainerName("host1"))); + tester.inOrder(tester.containerEngine).createContainerCommand(eq(containerImage), eq(new ContainerName("host1"))); try { tester.setWantedState(NodeAdminStateUpdater.State.SUSPENDED); @@ -38,7 +38,7 @@ public class RebootTest { tester.inOrder(tester.orchestrator).suspend( eq(HOST_HOSTNAME.value()), eq(List.of(hostname, HOST_HOSTNAME.value()))); - tester.inOrder(tester.docker).executeInContainerAsUser( + tester.inOrder(tester.containerEngine).executeInContainerAsUser( eq(new ContainerName("host1")), eq("root"), eq(OptionalLong.empty()), eq(NODE_PROGRAM), eq("stop")); assertTrue(tester.nodeAdmin.setFrozen(true)); } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java index dd727d102e0..caf7945d05b 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java @@ -1,7 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.integrationTests; -import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.ContainerImage; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; @@ -22,20 +22,20 @@ public class RestartTest { public void test() { try (DockerTester tester = new DockerTester()) { String hostname = "host1.test.yahoo.com"; - DockerImage dockerImage = DockerImage.fromString("dockerImage:1.2.3"); + ContainerImage containerImage = ContainerImage.fromString("containerImage:1.2.3"); - tester.addChildNodeRepositoryNode(NodeSpec.Builder.testSpec(hostname).wantedDockerImage(dockerImage).build()); + tester.addChildNodeRepositoryNode(NodeSpec.Builder.testSpec(hostname).wantedDockerImage(containerImage).build()); - tester.inOrder(tester.docker).createContainerCommand(eq(dockerImage), eq(new ContainerName("host1"))); + tester.inOrder(tester.containerEngine).createContainerCommand(eq(containerImage), eq(new ContainerName("host1"))); tester.inOrder(tester.nodeRepository).updateNodeAttributes( - eq(hostname), eq(new NodeAttributes().withDockerImage(dockerImage).withVespaVersion(dockerImage.tagAsVersion()))); + eq(hostname), eq(new NodeAttributes().withDockerImage(containerImage).withVespaVersion(containerImage.tagAsVersion()))); // Increment wantedRestartGeneration to 2 in node-repo tester.addChildNodeRepositoryNode(new NodeSpec.Builder(tester.nodeRepository.getNode(hostname)) .wantedRestartGeneration(2).build()); tester.inOrder(tester.orchestrator).suspend(eq(hostname)); - tester.inOrder(tester.docker).executeInContainerAsUser( + tester.inOrder(tester.containerEngine).executeInContainerAsUser( eq(new ContainerName("host1")), any(), any(), eq(NODE_PROGRAM), eq("restart-vespa")); tester.inOrder(tester.nodeRepository).updateNodeAttributes( eq(hostname), eq(new NodeAttributes().withRestartGeneration(2))); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java index adecc370b85..cab99b214b3 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.hosted.node.admin.maintenance.acl; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.Acl; -import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.ContainerOperations; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImpl; import com.yahoo.vespa.hosted.node.admin.task.util.file.UnixPath; @@ -35,9 +35,9 @@ public class AclMaintainerTest { private static final String EMPTY_FILTER_TABLE = "-P INPUT ACCEPT\n-P FORWARD ACCEPT\n-P OUTPUT ACCEPT\n"; private static final String EMPTY_NAT_TABLE = "-P PREROUTING ACCEPT\n-P INPUT ACCEPT\n-P OUTPUT ACCEPT\n-P POSTROUTING ACCEPT\n"; - private final DockerOperations dockerOperations = mock(DockerOperations.class); + private final ContainerOperations containerOperations = mock(ContainerOperations.class); private final IPAddressesMock ipAddresses = new IPAddressesMock(); - private final AclMaintainer aclMaintainer = new AclMaintainer(dockerOperations, ipAddresses); + private final AclMaintainer aclMaintainer = new AclMaintainer(containerOperations, ipAddresses); private final FileSystem fileSystem = TestFileSystem.create(); private final Function<Acl, NodeAgentContext> contextGenerator = @@ -63,10 +63,10 @@ public class AclMaintainerTest { aclMaintainer.converge(context); - verify(dockerOperations, times(4)).executeCommandInNetworkNamespace(eq(context), any(), eq("-S"), eq("-t"), any()); - verify(dockerOperations, times(2)).executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any()); - verify(dockerOperations, times(2)).executeCommandInNetworkNamespace(eq(context), eq("ip6tables-restore"), any()); - verifyNoMoreInteractions(dockerOperations); + verify(containerOperations, times(4)).executeCommandInNetworkNamespace(eq(context), any(), eq("-S"), eq("-t"), any()); + verify(containerOperations, times(2)).executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any()); + verify(containerOperations, times(2)).executeCommandInNetworkNamespace(eq(context), eq("ip6tables-restore"), any()); + verifyNoMoreInteractions(containerOperations); List<String> expected = List.of( // IPv4 filter table restore @@ -130,10 +130,10 @@ public class AclMaintainerTest { aclMaintainer.converge(context); - verify(dockerOperations, times(2)).executeCommandInNetworkNamespace(eq(context), any(), eq("-S"), eq("-t"), any()); - verify(dockerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any()); - verify(dockerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("ip6tables-restore"), any()); - verifyNoMoreInteractions(dockerOperations); + verify(containerOperations, times(2)).executeCommandInNetworkNamespace(eq(context), any(), eq("-S"), eq("-t"), any()); + verify(containerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any()); + verify(containerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("ip6tables-restore"), any()); + verifyNoMoreInteractions(containerOperations); List<String> expected = List.of( // IPv4 filter table restore @@ -187,10 +187,10 @@ public class AclMaintainerTest { aclMaintainer.converge(context); - verify(dockerOperations, times(3)).executeCommandInNetworkNamespace(eq(context), any(), eq("-S"), eq("-t"), any()); - verify(dockerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any()); - verify(dockerOperations, never()).executeCommandInNetworkNamespace(eq(context), eq("ip6tables-restore"), any()); //we don't have a ip4 address for the container so no redirect - verifyNoMoreInteractions(dockerOperations); + verify(containerOperations, times(3)).executeCommandInNetworkNamespace(eq(context), any(), eq("-S"), eq("-t"), any()); + verify(containerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any()); + verify(containerOperations, never()).executeCommandInNetworkNamespace(eq(context), eq("ip6tables-restore"), any()); //we don't have a ip4 address for the container so no redirect + verifyNoMoreInteractions(containerOperations); List<String> expected = List.of( "*filter\n" + @@ -231,15 +231,15 @@ public class AclMaintainerTest { "-P POSTROUTING ACCEPT\n" + "-A OUTPUT -d 2001::1/128 -j REDIRECT\n"); - when(dockerOperations.executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any())) + when(containerOperations.executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any())) .thenThrow(new RuntimeException("iptables restore failed")); aclMaintainer.converge(context); - verify(dockerOperations, times(3)).executeCommandInNetworkNamespace(eq(context), any(), eq("-S"), eq("-t"), any()); - verify(dockerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any()); - verify(dockerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("iptables"), eq("-F"), eq("-t"), eq("filter")); - verifyNoMoreInteractions(dockerOperations); + verify(containerOperations, times(3)).executeCommandInNetworkNamespace(eq(context), any(), eq("-S"), eq("-t"), any()); + verify(containerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("iptables-restore"), any()); + verify(containerOperations, times(1)).executeCommandInNetworkNamespace(eq(context), eq("iptables"), eq("-F"), eq("-t"), eq("filter")); + verifyNoMoreInteractions(containerOperations); aclMaintainer.converge(context); } @@ -250,11 +250,11 @@ public class AclMaintainerTest { String path = invoc.getArgument(2); writtenFileContents.add(new UnixPath(path).readUtf8File()); return new CommandResult(null, 0, ""); - }).when(dockerOperations).executeCommandInNetworkNamespace(any(), endsWith("-restore"), any()); + }).when(containerOperations).executeCommandInNetworkNamespace(any(), endsWith("-restore"), any()); } private void whenListRules(NodeAgentContext context, String table, IPVersion ipVersion, String output) { - when(dockerOperations.executeCommandInNetworkNamespace( + when(containerOperations.executeCommandInNetworkNamespace( eq(context), eq(ipVersion.iptablesCmd()), eq("-S"), eq("-t"), eq(table))) .thenReturn(new CommandResult(null, 0, output)); } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java index f8d14eea996..0be68e905ca 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.hosted.node.admin.maintenance.coredump; import com.yahoo.vespa.hosted.dockerapi.ProcessResult; -import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.ContainerOperations; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImpl; import org.junit.Test; @@ -23,7 +23,7 @@ import static org.mockito.Mockito.when; public class CoreCollectorTest { private final String GDB_PATH = "/opt/rh/devtoolset-9/root/bin/gdb"; private final String JDK_PATH = "/path/to/jdk/java"; - private final DockerOperations docker = mock(DockerOperations.class); + private final ContainerOperations docker = mock(ContainerOperations.class); private final CoreCollector coreCollector = new CoreCollector(docker); private final NodeAgentContext context = new NodeAgentContextImpl.Builder("container-123.domain.tld").build(); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java index dc1c0466d39..43bb73ae8d0 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImplTest.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.node.admin.nodeagent; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.ContainerImage; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.test.ManualClock; @@ -19,7 +19,7 @@ import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState; import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.Orchestrator; import com.yahoo.vespa.hosted.node.admin.configserver.orchestrator.OrchestratorException; -import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; +import com.yahoo.vespa.hosted.node.admin.docker.ContainerOperations; import com.yahoo.vespa.hosted.node.admin.maintenance.StorageMaintainer; import com.yahoo.vespa.hosted.node.admin.maintenance.acl.AclMaintainer; import com.yahoo.vespa.hosted.node.admin.maintenance.identity.CredentialsMaintainer; @@ -55,8 +55,8 @@ public class NodeAgentImplTest { private static final String hostName = "host1.test.yahoo.com"; private final NodeAgentContextSupplier contextSupplier = mock(NodeAgentContextSupplier.class); - private final DockerImage dockerImage = DockerImage.fromString("dockerImage"); - private final DockerOperations dockerOperations = mock(DockerOperations.class); + private final ContainerImage containerImage = ContainerImage.fromString("containerImage"); + private final ContainerOperations containerOperations = mock(ContainerOperations.class); private final NodeRepository nodeRepository = mock(NodeRepository.class); private final Orchestrator orchestrator = mock(Orchestrator.class); private final StorageMaintainer storageMaintainer = mock(StorageMaintainer.class); @@ -70,37 +70,37 @@ public class NodeAgentImplTest { @Test public void upToDateContainerIsUntouched() { final NodeSpec node = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .allowedToBeDown(false) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); nodeAgent.doConverge(context); - verify(dockerOperations, never()).removeContainer(eq(context), any()); + verify(containerOperations, never()).removeContainer(eq(context), any()); verify(orchestrator, never()).suspend(any(String.class)); - verify(dockerOperations, never()).pullImageAsyncIfNeeded(any()); + verify(containerOperations, never()).pullImageAsyncIfNeeded(any()); - final InOrder inOrder = inOrder(dockerOperations, orchestrator, nodeRepository); + final InOrder inOrder = inOrder(containerOperations, orchestrator, nodeRepository); // TODO: Verify this isn't run unless 1st time - inOrder.verify(dockerOperations, never()).startServices(eq(context)); - inOrder.verify(dockerOperations, times(1)).resumeNode(eq(context)); + inOrder.verify(containerOperations, never()).startServices(eq(context)); + inOrder.verify(containerOperations, times(1)).resumeNode(eq(context)); inOrder.verify(orchestrator, never()).resume(hostName); } @Test public void verifyRemoveOldFilesIfDiskFull() { final NodeSpec node = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); nodeAgent.doConverge(context); @@ -110,42 +110,42 @@ public class NodeAgentImplTest { @Test public void startsAfterStoppingServices() { - final InOrder inOrder = inOrder(dockerOperations); + final InOrder inOrder = inOrder(containerOperations); final NodeSpec node = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); nodeAgent.doConverge(context); - inOrder.verify(dockerOperations, never()).startServices(eq(context)); - inOrder.verify(dockerOperations, times(1)).resumeNode(eq(context)); + inOrder.verify(containerOperations, never()).startServices(eq(context)); + inOrder.verify(containerOperations, times(1)).resumeNode(eq(context)); nodeAgent.stopForHostSuspension(context); nodeAgent.doConverge(context); - inOrder.verify(dockerOperations, never()).startServices(eq(context)); - inOrder.verify(dockerOperations, times(1)).resumeNode(eq(context)); // Expect a resume, but no start services + inOrder.verify(containerOperations, never()).startServices(eq(context)); + inOrder.verify(containerOperations, times(1)).resumeNode(eq(context)); // Expect a resume, but no start services // No new suspends/stops, so no need to resume/start nodeAgent.doConverge(context); - inOrder.verify(dockerOperations, never()).startServices(eq(context)); - inOrder.verify(dockerOperations, never()).resumeNode(eq(context)); + inOrder.verify(containerOperations, never()).startServices(eq(context)); + inOrder.verify(containerOperations, never()).resumeNode(eq(context)); nodeAgent.stopForHostSuspension(context); nodeAgent.doConverge(context); - inOrder.verify(dockerOperations, times(1)).createContainer(eq(context), any(), any()); - inOrder.verify(dockerOperations, times(1)).startContainer(eq(context)); - inOrder.verify(dockerOperations, times(0)).startServices(eq(context)); // done as part of startContainer - inOrder.verify(dockerOperations, times(1)).resumeNode(eq(context)); + inOrder.verify(containerOperations, times(1)).createContainer(eq(context), any(), any()); + inOrder.verify(containerOperations, times(1)).startContainer(eq(context)); + inOrder.verify(containerOperations, times(0)).startServices(eq(context)); // done as part of startContainer + inOrder.verify(containerOperations, times(1)).resumeNode(eq(context)); } @Test public void absentContainerCausesStart() { final NodeSpec node = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage) + .wantedDockerImage(containerImage) .wantedVespaVersion(vespaVersion) .build(); @@ -153,63 +153,63 @@ public class NodeAgentImplTest { NodeAgentImpl nodeAgent = makeNodeAgent(null, false); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); - when(dockerOperations.pullImageAsyncIfNeeded(eq(dockerImage))).thenReturn(false); + when(containerOperations.pullImageAsyncIfNeeded(eq(containerImage))).thenReturn(false); nodeAgent.doConverge(context); - verify(dockerOperations, never()).removeContainer(eq(context), any()); - verify(dockerOperations, never()).startServices(any()); + verify(containerOperations, never()).removeContainer(eq(context), any()); + verify(containerOperations, never()).startServices(any()); verify(orchestrator, never()).suspend(any(String.class)); - final InOrder inOrder = inOrder(dockerOperations, orchestrator, nodeRepository, aclMaintainer, healthChecker); - inOrder.verify(dockerOperations, times(1)).pullImageAsyncIfNeeded(eq(dockerImage)); - inOrder.verify(dockerOperations, times(1)).createContainer(eq(context), any(), any()); - inOrder.verify(dockerOperations, times(1)).startContainer(eq(context)); + final InOrder inOrder = inOrder(containerOperations, orchestrator, nodeRepository, aclMaintainer, healthChecker); + inOrder.verify(containerOperations, times(1)).pullImageAsyncIfNeeded(eq(containerImage)); + inOrder.verify(containerOperations, times(1)).createContainer(eq(context), any(), any()); + inOrder.verify(containerOperations, times(1)).startContainer(eq(context)); inOrder.verify(aclMaintainer, times(1)).converge(eq(context)); - inOrder.verify(dockerOperations, times(1)).resumeNode(eq(context)); + inOrder.verify(containerOperations, times(1)).resumeNode(eq(context)); inOrder.verify(healthChecker, times(1)).verifyHealth(eq(context)); inOrder.verify(nodeRepository).updateNodeAttributes( - hostName, new NodeAttributes().withDockerImage(dockerImage).withVespaVersion(dockerImage.tagAsVersion())); + hostName, new NodeAttributes().withDockerImage(containerImage).withVespaVersion(containerImage.tagAsVersion())); inOrder.verify(orchestrator, never()).resume(hostName); } @Test public void containerIsNotStoppedIfNewImageMustBePulled() { - final DockerImage newDockerImage = DockerImage.fromString("new-image"); + final ContainerImage newContainerImage = ContainerImage.fromString("new-image"); final NodeSpec node = nodeBuilder(NodeState.active) - .wantedDockerImage(newDockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(newContainerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); - when(dockerOperations.pullImageAsyncIfNeeded(any())).thenReturn(true); + when(containerOperations.pullImageAsyncIfNeeded(any())).thenReturn(true); nodeAgent.doConverge(context); verify(orchestrator, never()).suspend(any(String.class)); verify(orchestrator, never()).resume(any(String.class)); - verify(dockerOperations, never()).removeContainer(eq(context), any()); + verify(containerOperations, never()).removeContainer(eq(context), any()); - final InOrder inOrder = inOrder(dockerOperations); - inOrder.verify(dockerOperations, times(1)).pullImageAsyncIfNeeded(eq(newDockerImage)); + final InOrder inOrder = inOrder(containerOperations); + inOrder.verify(containerOperations, times(1)).pullImageAsyncIfNeeded(eq(newContainerImage)); } @Test public void containerIsUpdatedIfCpuChanged() { NodeSpec.Builder specBuilder = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .allowedToBeDown(false); NodeAgentContext firstContext = createContext(specBuilder.build()); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); - when(dockerOperations.pullImageAsyncIfNeeded(any())).thenReturn(true); + when(containerOperations.pullImageAsyncIfNeeded(any())).thenReturn(true); - InOrder inOrder = inOrder(orchestrator, dockerOperations); + InOrder inOrder = inOrder(orchestrator, containerOperations); nodeAgent.doConverge(firstContext); inOrder.verify(orchestrator, never()).resume(any(String.class)); @@ -221,70 +221,70 @@ public class NodeAgentImplTest { NodeAgentContext thirdContext = new NodeAgentContextImpl.Builder(specBuilder.vcpu(5).build()).cpuSpeedUp(1.25).build(); nodeAgent.doConverge(thirdContext); ContainerResources resourcesAfterThird = ContainerResources.from(0, 4, 16); - mockGetContainer(dockerImage, resourcesAfterThird, true); + mockGetContainer(containerImage, resourcesAfterThird, true); inOrder.verify(orchestrator).suspend(any(String.class)); - inOrder.verify(dockerOperations).updateContainer(eq(thirdContext), eq(resourcesAfterThird)); - inOrder.verify(dockerOperations, never()).removeContainer(any(), any()); - inOrder.verify(dockerOperations, never()).startContainer(any()); + inOrder.verify(containerOperations).updateContainer(eq(thirdContext), eq(resourcesAfterThird)); + inOrder.verify(containerOperations, never()).removeContainer(any(), any()); + inOrder.verify(containerOperations, never()).startContainer(any()); inOrder.verify(orchestrator).resume(any(String.class)); // No changes nodeAgent.converge(thirdContext); inOrder.verify(orchestrator, never()).suspend(any(String.class)); - inOrder.verify(dockerOperations, never()).updateContainer(eq(thirdContext), any()); - inOrder.verify(dockerOperations, never()).removeContainer(any(), any()); + inOrder.verify(containerOperations, never()).updateContainer(eq(thirdContext), any()); + inOrder.verify(containerOperations, never()).removeContainer(any(), any()); inOrder.verify(orchestrator, never()).resume(any(String.class)); // Set the feature flag flagSource.withDoubleFlag(Flags.CONTAINER_CPU_CAP.id(), 2.3); nodeAgent.doConverge(thirdContext); - inOrder.verify(dockerOperations).updateContainer(eq(thirdContext), eq(ContainerResources.from(9.2, 4, 16))); + inOrder.verify(containerOperations).updateContainer(eq(thirdContext), eq(ContainerResources.from(9.2, 4, 16))); inOrder.verify(orchestrator).resume(any(String.class)); } @Test public void containerIsRecreatedIfMemoryChanged() { NodeSpec.Builder specBuilder = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .wantedRestartGeneration(2).currentRestartGeneration(1); NodeAgentContext firstContext = createContext(specBuilder.build()); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); - when(dockerOperations.pullImageAsyncIfNeeded(any())).thenReturn(true); + when(containerOperations.pullImageAsyncIfNeeded(any())).thenReturn(true); nodeAgent.doConverge(firstContext); NodeAgentContext secondContext = createContext(specBuilder.memoryGb(20).build()); nodeAgent.doConverge(secondContext); ContainerResources resourcesAfterThird = ContainerResources.from(0, 2, 20); - mockGetContainer(dockerImage, resourcesAfterThird, true); + mockGetContainer(containerImage, resourcesAfterThird, true); - InOrder inOrder = inOrder(orchestrator, dockerOperations, nodeRepository); + InOrder inOrder = inOrder(orchestrator, containerOperations, nodeRepository); inOrder.verify(orchestrator).resume(any(String.class)); - inOrder.verify(dockerOperations).removeContainer(eq(secondContext), any()); - inOrder.verify(dockerOperations, never()).updateContainer(any(), any()); - inOrder.verify(dockerOperations, never()).restartVespa(any()); + inOrder.verify(containerOperations).removeContainer(eq(secondContext), any()); + inOrder.verify(containerOperations, never()).updateContainer(any(), any()); + inOrder.verify(containerOperations, never()).restartVespa(any()); inOrder.verify(nodeRepository).updateNodeAttributes(eq(hostName), eq(new NodeAttributes().withRestartGeneration(2))); nodeAgent.doConverge(secondContext); inOrder.verify(orchestrator).resume(any(String.class)); - inOrder.verify(dockerOperations, never()).updateContainer(any(), any()); - inOrder.verify(dockerOperations, never()).removeContainer(any(), any()); + inOrder.verify(containerOperations, never()).updateContainer(any(), any()); + inOrder.verify(containerOperations, never()).removeContainer(any(), any()); } @Test public void noRestartIfOrchestratorSuspendFails() { final NodeSpec node = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .wantedRestartGeneration(2).currentRestartGeneration(1) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); doThrow(new OrchestratorException("Denied")).when(orchestrator).suspend(eq(hostName)); try { @@ -292,8 +292,8 @@ public class NodeAgentImplTest { fail("Expected to throw an exception"); } catch (OrchestratorException ignored) { } - verify(dockerOperations, never()).createContainer(eq(context), any(), any()); - verify(dockerOperations, never()).startContainer(eq(context)); + verify(containerOperations, never()).createContainer(eq(context), any(), any()); + verify(containerOperations, never()).startContainer(eq(context)); verify(orchestrator, never()).resume(any(String.class)); verify(nodeRepository, never()).updateNodeAttributes(any(String.class), any(NodeAttributes.class)); @@ -305,16 +305,16 @@ public class NodeAgentImplTest { public void recreatesContainerIfRebootWanted() { final long wantedRebootGeneration = 2; final NodeSpec node = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .wantedRebootGeneration(wantedRebootGeneration).currentRebootGeneration(1) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); - when(dockerOperations.pullImageAsyncIfNeeded(eq(dockerImage))).thenReturn(false); + when(containerOperations.pullImageAsyncIfNeeded(eq(containerImage))).thenReturn(false); doThrow(new ConvergenceException("Connection refused")).doNothing() .when(healthChecker).verifyHealth(eq(context)); @@ -324,17 +324,17 @@ public class NodeAgentImplTest { // First time we fail to resume because health verification fails verify(orchestrator, times(1)).suspend(eq(hostName)); - verify(dockerOperations, times(1)).removeContainer(eq(context), any()); - verify(dockerOperations, times(1)).createContainer(eq(context), any(), any()); - verify(dockerOperations, times(1)).startContainer(eq(context)); + verify(containerOperations, times(1)).removeContainer(eq(context), any()); + verify(containerOperations, times(1)).createContainer(eq(context), any(), any()); + verify(containerOperations, times(1)).startContainer(eq(context)); verify(orchestrator, never()).resume(eq(hostName)); verify(nodeRepository, never()).updateNodeAttributes(any(), any()); nodeAgent.doConverge(context); // Do not reboot the container again - verify(dockerOperations, times(1)).removeContainer(eq(context), any()); - verify(dockerOperations, times(1)).createContainer(eq(context), any(), any()); + verify(containerOperations, times(1)).removeContainer(eq(context), any()); + verify(containerOperations, times(1)).createContainer(eq(context), any(), any()); verify(orchestrator, times(1)).resume(eq(hostName)); verify(nodeRepository, times(1)).updateNodeAttributes(eq(hostName), eq(new NodeAttributes() .withRebootGeneration(wantedRebootGeneration))); @@ -343,18 +343,18 @@ public class NodeAgentImplTest { @Test public void failedNodeRunningContainerShouldStillBeRunning() { final NodeSpec node = nodeBuilder(NodeState.failed) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); nodeAgent.doConverge(context); - verify(dockerOperations, never()).removeContainer(eq(context), any()); + verify(containerOperations, never()).removeContainer(eq(context), any()); verify(orchestrator, never()).resume(any(String.class)); verify(nodeRepository, never()).updateNodeAttributes(eq(hostName), any()); } @@ -373,10 +373,10 @@ public class NodeAgentImplTest { nodeAgent.doConverge(context); // Should only be called once, when we initialize - verify(dockerOperations, times(1)).getContainer(eq(context)); - verify(dockerOperations, never()).removeContainer(eq(context), any()); - verify(dockerOperations, never()).createContainer(eq(context), any(), any()); - verify(dockerOperations, never()).startContainer(eq(context)); + verify(containerOperations, times(1)).getContainer(eq(context)); + verify(containerOperations, never()).removeContainer(eq(context), any()); + verify(containerOperations, never()).createContainer(eq(context), any(), any()); + verify(containerOperations, never()).startContainer(eq(context)); verify(orchestrator, never()).resume(any(String.class)); verify(nodeRepository, never()).updateNodeAttributes(eq(hostName), any()); } @@ -384,19 +384,19 @@ public class NodeAgentImplTest { @Test public void inactiveNodeRunningContainerShouldStillBeRunning() { final NodeSpec node = nodeBuilder(NodeState.inactive) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); nodeAgent.doConverge(context); - final InOrder inOrder = inOrder(storageMaintainer, dockerOperations); - inOrder.verify(dockerOperations, never()).removeContainer(eq(context), any()); + final InOrder inOrder = inOrder(storageMaintainer, containerOperations); + inOrder.verify(containerOperations, never()).removeContainer(eq(context), any()); verify(orchestrator, never()).resume(any(String.class)); verify(nodeRepository, never()).updateNodeAttributes(eq(hostName), any()); @@ -405,7 +405,7 @@ public class NodeAgentImplTest { @Test public void reservedNodeDoesNotUpdateNodeRepoWithVersion() { final NodeSpec node = nodeBuilder(NodeState.reserved) - .wantedDockerImage(dockerImage) + .wantedDockerImage(containerImage) .wantedVespaVersion(vespaVersion) .build(); @@ -421,34 +421,34 @@ public class NodeAgentImplTest { private void nodeRunningContainerIsTakenDownAndCleanedAndRecycled(NodeState nodeState, Optional<Long> wantedRestartGeneration) { NodeSpec.Builder builder = nodeBuilder(nodeState) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage); + .wantedDockerImage(containerImage).currentDockerImage(containerImage); wantedRestartGeneration.ifPresent(restartGeneration -> builder .wantedRestartGeneration(restartGeneration).currentRestartGeneration(restartGeneration)); NodeSpec node = builder.build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); nodeAgent.doConverge(context); - final InOrder inOrder = inOrder(storageMaintainer, dockerOperations, nodeRepository); - inOrder.verify(dockerOperations, times(1)).stopServices(eq(context)); + final InOrder inOrder = inOrder(storageMaintainer, containerOperations, nodeRepository); + inOrder.verify(containerOperations, times(1)).stopServices(eq(context)); inOrder.verify(storageMaintainer, times(1)).handleCoreDumpsForContainer(eq(context), any()); - inOrder.verify(dockerOperations, times(1)).removeContainer(eq(context), any()); + inOrder.verify(containerOperations, times(1)).removeContainer(eq(context), any()); inOrder.verify(storageMaintainer, times(1)).archiveNodeStorage(eq(context)); inOrder.verify(nodeRepository, times(1)).setNodeState(eq(hostName), eq(NodeState.ready)); - verify(dockerOperations, never()).createContainer(eq(context), any(), any()); - verify(dockerOperations, never()).startContainer(eq(context)); - verify(dockerOperations, never()).suspendNode(eq(context)); - verify(dockerOperations, times(1)).stopServices(eq(context)); + verify(containerOperations, never()).createContainer(eq(context), any(), any()); + verify(containerOperations, never()).startContainer(eq(context)); + verify(containerOperations, never()).suspendNode(eq(context)); + verify(containerOperations, times(1)).stopServices(eq(context)); verify(orchestrator, never()).resume(any(String.class)); verify(orchestrator, never()).suspend(any(String.class)); // current Docker image and vespa version should be cleared verify(nodeRepository, times(1)).updateNodeAttributes( - eq(hostName), eq(new NodeAttributes().withDockerImage(DockerImage.EMPTY).withVespaVersion(Version.emptyVersion))); + eq(hostName), eq(new NodeAttributes().withDockerImage(ContainerImage.EMPTY).withVespaVersion(Version.emptyVersion))); } @Test @@ -464,7 +464,7 @@ public class NodeAgentImplTest { @Test public void provisionedNodeIsMarkedAsDirty() { final NodeSpec node = nodeBuilder(NodeState.provisioned) - .wantedDockerImage(dockerImage) + .wantedDockerImage(containerImage) .build(); NodeAgentContext context = createContext(node); @@ -478,40 +478,40 @@ public class NodeAgentImplTest { @Test public void testRestartDeadContainerAfterNodeAdminRestart() { final NodeSpec node = nodeBuilder(NodeState.active) - .currentDockerImage(dockerImage).wantedDockerImage(dockerImage) + .currentDockerImage(containerImage).wantedDockerImage(containerImage) .currentVespaVersion(vespaVersion) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, false); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, false); when(nodeRepository.getOptionalNode(eq(hostName))).thenReturn(Optional.of(node)); nodeAgent.doConverge(context); - verify(dockerOperations, times(1)).removeContainer(eq(context), any()); - verify(dockerOperations, times(1)).createContainer(eq(context), any(), any()); - verify(dockerOperations, times(1)).startContainer(eq(context)); + verify(containerOperations, times(1)).removeContainer(eq(context), any()); + verify(containerOperations, times(1)).createContainer(eq(context), any(), any()); + verify(containerOperations, times(1)).startContainer(eq(context)); } @Test public void resumeProgramRunsUntilSuccess() { final NodeSpec node = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .currentVespaVersion(vespaVersion) .wantedRestartGeneration(1).currentRestartGeneration(1) .allowedToBeDown(true) .build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(eq(hostName))).thenReturn(Optional.of(node)); - final InOrder inOrder = inOrder(orchestrator, dockerOperations, nodeRepository); + final InOrder inOrder = inOrder(orchestrator, containerOperations, nodeRepository); doThrow(new RuntimeException("Failed 1st time")) .doNothing() - .when(dockerOperations).resumeNode(eq(context)); + .when(containerOperations).resumeNode(eq(context)); // 1st try try { @@ -519,13 +519,13 @@ public class NodeAgentImplTest { fail("Expected to throw an exception"); } catch (RuntimeException ignored) { } - inOrder.verify(dockerOperations, times(1)).resumeNode(any()); + inOrder.verify(containerOperations, times(1)).resumeNode(any()); inOrder.verifyNoMoreInteractions(); // 2nd try nodeAgent.doConverge(context); - inOrder.verify(dockerOperations).resumeNode(any()); + inOrder.verify(containerOperations).resumeNode(any()); inOrder.verify(orchestrator).resume(hostName); inOrder.verifyNoMoreInteractions(); } @@ -533,7 +533,7 @@ public class NodeAgentImplTest { @Test public void start_container_subtask_failure_leads_to_container_restart() { final NodeSpec node = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage) + .wantedDockerImage(containerImage) .wantedVespaVersion(vespaVersion) .wantedRestartGeneration(1).currentRestartGeneration(1) .build(); @@ -541,27 +541,27 @@ public class NodeAgentImplTest { NodeAgentContext context = createContext(node); NodeAgentImpl nodeAgent = spy(makeNodeAgent(null, false)); - when(dockerOperations.pullImageAsyncIfNeeded(eq(dockerImage))).thenReturn(false); - doThrow(new DockerException("Failed to set up network")).doNothing().when(dockerOperations).startContainer(eq(context)); + when(containerOperations.pullImageAsyncIfNeeded(eq(containerImage))).thenReturn(false); + doThrow(new DockerException("Failed to set up network")).doNothing().when(containerOperations).startContainer(eq(context)); try { nodeAgent.doConverge(context); fail("Expected to get DockerException"); } catch (DockerException ignored) { } - verify(dockerOperations, never()).removeContainer(eq(context), any()); - verify(dockerOperations, times(1)).createContainer(eq(context), any(), any()); - verify(dockerOperations, times(1)).startContainer(eq(context)); + verify(containerOperations, never()).removeContainer(eq(context), any()); + verify(containerOperations, times(1)).createContainer(eq(context), any(), any()); + verify(containerOperations, times(1)).startContainer(eq(context)); verify(nodeAgent, never()).resumeNodeIfNeeded(any()); // The docker container was actually started and is running, but subsequent exec calls to set up // networking failed - mockGetContainer(dockerImage, true); + mockGetContainer(containerImage, true); nodeAgent.doConverge(context); - verify(dockerOperations, times(1)).removeContainer(eq(context), any()); - verify(dockerOperations, times(2)).createContainer(eq(context), any(), any()); - verify(dockerOperations, times(2)).startContainer(eq(context)); + verify(containerOperations, times(1)).removeContainer(eq(context), any()); + verify(containerOperations, times(2)).createContainer(eq(context), any(), any()); + verify(containerOperations, times(2)).startContainer(eq(context)); verify(nodeAgent, times(1)).resumeNodeIfNeeded(any()); } @@ -569,7 +569,7 @@ public class NodeAgentImplTest { public void testRunningConfigServer() { final NodeSpec node = nodeBuilder(NodeState.active) .type(NodeType.config) - .wantedDockerImage(dockerImage) + .wantedDockerImage(containerImage) .wantedVespaVersion(vespaVersion) .allowedToBeDown(true) .build(); @@ -578,21 +578,21 @@ public class NodeAgentImplTest { NodeAgentImpl nodeAgent = makeNodeAgent(null, false); when(nodeRepository.getOptionalNode(hostName)).thenReturn(Optional.of(node)); - when(dockerOperations.pullImageAsyncIfNeeded(eq(dockerImage))).thenReturn(false); + when(containerOperations.pullImageAsyncIfNeeded(eq(containerImage))).thenReturn(false); nodeAgent.doConverge(context); - verify(dockerOperations, never()).removeContainer(eq(context), any()); + verify(containerOperations, never()).removeContainer(eq(context), any()); verify(orchestrator, never()).suspend(any(String.class)); - final InOrder inOrder = inOrder(dockerOperations, orchestrator, nodeRepository, aclMaintainer); - inOrder.verify(dockerOperations, times(1)).pullImageAsyncIfNeeded(eq(dockerImage)); - inOrder.verify(dockerOperations, times(1)).createContainer(eq(context), any(), any()); - inOrder.verify(dockerOperations, times(1)).startContainer(eq(context)); + final InOrder inOrder = inOrder(containerOperations, orchestrator, nodeRepository, aclMaintainer); + inOrder.verify(containerOperations, times(1)).pullImageAsyncIfNeeded(eq(containerImage)); + inOrder.verify(containerOperations, times(1)).createContainer(eq(context), any(), any()); + inOrder.verify(containerOperations, times(1)).startContainer(eq(context)); inOrder.verify(aclMaintainer, times(1)).converge(eq(context)); - inOrder.verify(dockerOperations, times(1)).resumeNode(eq(context)); + inOrder.verify(containerOperations, times(1)).resumeNode(eq(context)); inOrder.verify(nodeRepository).updateNodeAttributes( - hostName, new NodeAttributes().withDockerImage(dockerImage).withVespaVersion(dockerImage.tagAsVersion())); + hostName, new NodeAttributes().withDockerImage(containerImage).withVespaVersion(containerImage.tagAsVersion())); inOrder.verify(orchestrator).resume(hostName); } @@ -610,13 +610,13 @@ public class NodeAgentImplTest { @Test public void initial_cpu_cap_test() { NodeSpec.Builder specBuilder = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion); NodeAgentContext context = createContext(specBuilder.build()); NodeAgentImpl nodeAgent = makeNodeAgent(null, false, Duration.ofSeconds(30)); - InOrder inOrder = inOrder(orchestrator, dockerOperations); + InOrder inOrder = inOrder(orchestrator, containerOperations); ConvergenceException healthCheckException = new ConvergenceException("Not yet up"); doThrow(healthCheckException).when(healthChecker).verifyHealth(any()); @@ -639,45 +639,45 @@ public class NodeAgentImplTest { } inOrder.verify(orchestrator, never()).resume(any()); inOrder.verify(orchestrator, never()).suspend(any()); - inOrder.verify(dockerOperations, never()).updateContainer(any(), any()); + inOrder.verify(containerOperations, never()).updateContainer(any(), any()); clock.advance(Duration.ofSeconds(31)); nodeAgent.doConverge(context); inOrder.verify(orchestrator).suspend(hostName); - inOrder.verify(dockerOperations).updateContainer(eq(context), eq(ContainerResources.from(0, 2, 16))); - inOrder.verify(dockerOperations, never()).removeContainer(any(), any()); - inOrder.verify(dockerOperations, never()).startContainer(any()); + inOrder.verify(containerOperations).updateContainer(eq(context), eq(ContainerResources.from(0, 2, 16))); + inOrder.verify(containerOperations, never()).removeContainer(any(), any()); + inOrder.verify(containerOperations, never()).startContainer(any()); inOrder.verify(orchestrator).resume(any(String.class)); // No changes nodeAgent.converge(context); inOrder.verify(orchestrator, never()).suspend(any(String.class)); - inOrder.verify(dockerOperations, never()).updateContainer(eq(context), any()); - inOrder.verify(dockerOperations, never()).removeContainer(any(), any()); + inOrder.verify(containerOperations, never()).updateContainer(eq(context), any()); + inOrder.verify(containerOperations, never()).removeContainer(any(), any()); inOrder.verify(orchestrator, never()).resume(any(String.class)); } @Test public void resumes_normally_if_container_is_already_capped_on_start() { NodeSpec.Builder specBuilder = nodeBuilder(NodeState.active) - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .wantedVespaVersion(vespaVersion).currentVespaVersion(vespaVersion) .wantedRestartGeneration(1).currentRestartGeneration(1); NodeAgentContext context = createContext(specBuilder.build()); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true, Duration.ofSeconds(30)); - mockGetContainer(dockerImage, ContainerResources.from(0, 2, 16), true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true, Duration.ofSeconds(30)); + mockGetContainer(containerImage, ContainerResources.from(0, 2, 16), true); - InOrder inOrder = inOrder(orchestrator, dockerOperations); + InOrder inOrder = inOrder(orchestrator, containerOperations); nodeAgent.doConverge(context); nodeAgent.converge(context); inOrder.verify(orchestrator, never()).suspend(any(String.class)); - inOrder.verify(dockerOperations, never()).updateContainer(eq(context), any()); - inOrder.verify(dockerOperations, never()).removeContainer(any(), any()); + inOrder.verify(containerOperations, never()).updateContainer(eq(context), any()); + inOrder.verify(containerOperations, never()).removeContainer(any(), any()); inOrder.verify(orchestrator, never()).resume(any(String.class)); } @@ -687,74 +687,74 @@ public class NodeAgentImplTest { .hostname(hostName) .type(NodeType.tenant) .flavor("docker") - .wantedDockerImage(dockerImage).currentDockerImage(dockerImage) + .wantedDockerImage(containerImage).currentDockerImage(containerImage) .state(nodeState); owner.ifPresent(nodeBuilder::owner); NodeSpec node = nodeBuilder.build(); NodeAgentContext context = createContext(node); - NodeAgentImpl nodeAgent = makeNodeAgent(dockerImage, true); + NodeAgentImpl nodeAgent = makeNodeAgent(containerImage, true); when(nodeRepository.getOptionalNode(eq(hostName))).thenReturn(Optional.of(node)); nodeAgent.doConverge(context); - verify(dockerOperations, never()).removeContainer(eq(context), any()); + verify(containerOperations, never()).removeContainer(eq(context), any()); if (owner.isPresent()) { - verify(dockerOperations, never()).stopServices(eq(context)); + verify(containerOperations, never()).stopServices(eq(context)); } else { - verify(dockerOperations, times(1)).stopServices(eq(context)); + verify(containerOperations, times(1)).stopServices(eq(context)); nodeAgent.doConverge(context); // Should not be called more than once, have already been stopped - verify(dockerOperations, times(1)).stopServices(eq(context)); + verify(containerOperations, times(1)).stopServices(eq(context)); } } - private NodeAgentImpl makeNodeAgent(DockerImage dockerImage, boolean isRunning) { - return makeNodeAgent(dockerImage, isRunning, Duration.ofSeconds(-1)); + private NodeAgentImpl makeNodeAgent(ContainerImage containerImage, boolean isRunning) { + return makeNodeAgent(containerImage, isRunning, Duration.ofSeconds(-1)); } - private NodeAgentImpl makeNodeAgent(DockerImage dockerImage, boolean isRunning, Duration warmUpDuration) { - mockGetContainer(dockerImage, isRunning); + private NodeAgentImpl makeNodeAgent(ContainerImage containerImage, boolean isRunning, Duration warmUpDuration) { + mockGetContainer(containerImage, isRunning); doAnswer(invoc -> { NodeAgentContext context = invoc.getArgument(0, NodeAgentContext.class); ContainerResources resources = invoc.getArgument(2, ContainerResources.class); mockGetContainer(context.node().wantedDockerImage().get(), resources, true); return null; - }).when(dockerOperations).createContainer(any(), any(), any()); + }).when(containerOperations).createContainer(any(), any(), any()); doAnswer(invoc -> { NodeAgentContext context = invoc.getArgument(0, NodeAgentContext.class); ContainerResources resources = invoc.getArgument(1, ContainerResources.class); mockGetContainer(context.node().wantedDockerImage().get(), resources, true); return null; - }).when(dockerOperations).updateContainer(any(), any()); + }).when(containerOperations).updateContainer(any(), any()); - return new NodeAgentImpl(contextSupplier, nodeRepository, orchestrator, dockerOperations, + return new NodeAgentImpl(contextSupplier, nodeRepository, orchestrator, containerOperations, storageMaintainer, flagSource, Optional.of(credentialsMaintainer), Optional.of(aclMaintainer), Optional.of(healthChecker), clock, warmUpDuration); } - private void mockGetContainer(DockerImage dockerImage, boolean isRunning) { - mockGetContainer(dockerImage, ContainerResources.from(0, resources.vcpu(), resources.memoryGb()), isRunning); + private void mockGetContainer(ContainerImage containerImage, boolean isRunning) { + mockGetContainer(containerImage, ContainerResources.from(0, resources.vcpu(), resources.memoryGb()), isRunning); } - private void mockGetContainer(DockerImage dockerImage, ContainerResources containerResources, boolean isRunning) { + private void mockGetContainer(ContainerImage containerImage, ContainerResources containerResources, boolean isRunning) { doAnswer(invoc -> { NodeAgentContext context = invoc.getArgument(0); if (!hostName.equals(context.hostname().value())) throw new IllegalArgumentException(); - return dockerImage != null ? + return containerImage != null ? Optional.of(new Container( hostName, - dockerImage, + containerImage, containerResources, ContainerName.fromHostname(hostName), isRunning ? Container.State.RUNNING : Container.State.EXITED, isRunning ? 1 : 0)) : Optional.empty(); - }).when(dockerOperations).getContainer(any()); + }).when(containerOperations).getContainer(any()); } private NodeAgentContext createContext(NodeSpec nodeSpec) { |