diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-04-19 10:47:52 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-04-19 15:05:00 +0200 |
commit | 5dc7c835d796f32bb2c9e0079693dd5da833635f (patch) | |
tree | 07161759a2973c43641500b2e38c8879dfcef126 /controller-server/src/test/java | |
parent | 3991eda2b969053748350b3a745b31d391f6917b (diff) |
Decide controller version across all controllers
Diffstat (limited to 'controller-server/src/test/java')
12 files changed, 108 insertions, 59 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ConfigServerClientMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ConfigServerClientMock.java index 068f7b21933..4e3783b6569 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ConfigServerClientMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ConfigServerClientMock.java @@ -1,4 +1,4 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller; import com.fasterxml.jackson.databind.JsonNode; @@ -183,8 +183,8 @@ public class ConfigServerClientMock extends AbstractComponent implements ConfigS } @Override - public Version version(URI configServerURI) { - return versions.getOrDefault(configServerURI, defaultVersion); + public Version version(URI configServerUri) { + return versions.getOrDefault(configServerUri, defaultVersion); } @Override diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java index 8e5f09346b1..ee426557596 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java @@ -1,4 +1,4 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller; import com.yahoo.component.Version; @@ -77,12 +77,6 @@ public class ControllerTest { .region("corp-us-east-1") .build(); - private static final ApplicationPackage applicationPackage2 = new ApplicationPackageBuilder() - .environment(Environment.prod) - .region("corp-us-east-1") - .region("us-west-1") - .build(); - @Test public void testDeployment() { // Setup system @@ -296,15 +290,18 @@ public class ControllerTest { "commit1", Instant.now(), true, + true, Collections.emptyList(), VespaVersion.Confidence.low ); List<VespaVersion> versions = new ArrayList<>(controller.versionStatus().versions()); for (int i = 0; i < versions.size(); i++) { VespaVersion c = versions.get(i); - if (c.isCurrentSystemVersion()) + if (c.isSystemVersion()) versions.set(i, new VespaVersion(c.statistics(), c.releaseCommit(), c.committedAt(), - false, c.configServerHostnames(), + false, + false, + c.configServerHostnames(), c.confidence())); } versions.add(newSystemVespaVersion); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java index 110455dac35..c098e49dbcb 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java @@ -1,4 +1,4 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller; import com.yahoo.config.provision.ApplicationId; @@ -89,6 +89,12 @@ public final class ControllerTester { new ArtifactRepositoryMock(), new MemoryEntityService(), new MockBuildService()); } + public ControllerTester(MockCuratorDb curatorDb) { + this(new AthenzDbMock(), new ManualClock(), new ConfigServerClientMock(), + new ZoneRegistryMock(), new GitHubMock(), curatorDb, defaultRotationsConfig(), + new MemoryNameService(), new ArtifactRepositoryMock(), new MemoryEntityService(), new MockBuildService()); + } + private ControllerTester(AthenzDbMock athenzDb, ManualClock clock, ConfigServerClientMock configServer, ZoneRegistryMock zoneRegistry, GitHubMock gitHub, CuratorDb curator, RotationsConfig rotationsConfig, @@ -270,7 +276,8 @@ public final class ControllerTester { clock, new AthenzClientFactoryMock(athensDb), artifactRepository, - buildService); + buildService, + () -> "test-controller"); controller.updateVersionStatus(VersionStatus.compute(controller)); return controller; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java index f752cfd4f7a..ac1e5e7c677 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java @@ -1,4 +1,4 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.deployment; import com.yahoo.component.Version; @@ -90,12 +90,13 @@ public class DeploymentTester { } public void updateVersionStatus() { - controller().updateVersionStatus(VersionStatus.compute(controller(), tester.controller().systemVersion())); + updateVersionStatus(tester.controller().systemVersion()); } - public void updateVersionStatus(Version currentVersion) { - configServer().setDefaultVersion(currentVersion); - controller().updateVersionStatus(VersionStatus.compute(controller(), currentVersion)); + public void updateVersionStatus(Version newVersion) { + controller().curator().writeControllerVersion(controller().hostname(), newVersion); + configServer().setDefaultVersion(newVersion); + controller().updateVersionStatus(VersionStatus.compute(controller())); } public void upgradeSystem(Version version) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VersionStatusUpdaterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VersionStatusUpdaterTest.java index a7cecda3695..33284457e78 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VersionStatusUpdaterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VersionStatusUpdaterTest.java @@ -1,4 +1,4 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.maintenance; import com.yahoo.vespa.hosted.controller.ControllerTester; @@ -17,7 +17,8 @@ import static org.junit.Assert.assertTrue; */ public class VersionStatusUpdaterTest { - /** Test that this job updates the status. Test of the content of the update is in VersionStatusTest */ + /** Test that this job updates the status. Test of the content of the update is in + * {@link com.yahoo.vespa.hosted.controller.versions.VersionStatusTest} */ @Test public void testVersionUpdating() { ControllerTester tester = new ControllerTester(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java index 05b671baea0..b0306178ae3 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java @@ -1,8 +1,9 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.HostName; import com.yahoo.vespa.hosted.controller.versions.DeploymentStatistics; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; @@ -12,6 +13,7 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; @@ -31,10 +33,10 @@ public class VersionStatusSerializerTest { Arrays.asList(ApplicationId.from("tenant1", "failing1", "default"), ApplicationId.from("tenant2", "success2", "default")) ); - vespaVersions.add(new VespaVersion(statistics, "dead", Instant.now(), false, - Arrays.asList("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); - vespaVersions.add(new VespaVersion(statistics, "cafe", Instant.now(), true, - Arrays.asList("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); + vespaVersions.add(new VespaVersion(statistics, "dead", Instant.now(), false, false, + asHostnames("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); + vespaVersions.add(new VespaVersion(statistics, "cafe", Instant.now(), true, true, + asHostnames("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); VersionStatus status = new VersionStatus(vespaVersions); VersionStatusSerializer serializer = new VersionStatusSerializer(); VersionStatus deserialized = serializer.fromSlime(serializer.toSlime(status)); @@ -45,7 +47,8 @@ public class VersionStatusSerializerTest { VespaVersion b = deserialized.versions().get(i); assertEquals(a.releaseCommit(), b.releaseCommit()); assertEquals(a.committedAt(), b.committedAt()); - assertEquals(a.isCurrentSystemVersion(), b.isCurrentSystemVersion()); + assertEquals(a.isControllerVersion(), b.isControllerVersion()); + assertEquals(a.isSystemVersion(), b.isSystemVersion()); assertEquals(a.statistics(), b.statistics()); assertEquals(a.configServerHostnames(), b.configServerHostnames()); assertEquals(a.confidence(), b.confidence()); @@ -53,4 +56,8 @@ public class VersionStatusSerializerTest { } + private static List<HostName> asHostnames(String... hostname) { + return Arrays.stream(hostname).map(HostName::from).collect(Collectors.toList()); + } + } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java index 1a876e6b246..243cf7276bd 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java @@ -1,4 +1,4 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.restapi; import com.yahoo.application.container.JDisc; @@ -10,6 +10,7 @@ import com.yahoo.container.http.filter.FilterChainRepository; import com.yahoo.io.IOUtils; import com.yahoo.jdisc.http.filter.SecurityRequestFilter; import com.yahoo.jdisc.http.filter.SecurityRequestFilterChain; +import com.yahoo.vespa.hosted.controller.ConfigServerClientMock; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import org.junit.ComparisonFailure; @@ -43,12 +44,18 @@ public class ContainerTester { return (Controller) container.components().getComponent(Controller.class.getName()); } - public void updateSystemVersion() { + public ConfigServerClientMock configServer() { + return (ConfigServerClientMock) container.components().getComponent(ConfigServerClientMock.class.getName()); + } + + public void updateVersionStatus() { controller().updateVersionStatus(VersionStatus.compute(controller())); } - public void updateSystemVersion(Version version) { - controller().updateVersionStatus(VersionStatus.compute(controller(), version)); + public void updateVersionStatus(Version version) { + controller().curator().writeControllerVersion(controller().hostname(), version); + configServer().setDefaultVersion(version); + controller().updateVersionStatus(VersionStatus.compute(controller())); } public void assertResponse(Supplier<Request> request, File responseFile) throws IOException { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index e4c4df279b8..704e9fa1a07 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -1,4 +1,4 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.restapi.application; import com.yahoo.application.container.handler.Request; @@ -106,7 +106,7 @@ public class ApplicationApiTest extends ControllerContainerTest { public void testApplicationApi() throws Exception { ContainerControllerTester controllerTester = new ContainerControllerTester(container, responseFiles); ContainerTester tester = controllerTester.containerTester(); - tester.updateSystemVersion(); + tester.updateVersionStatus(); createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); // (Necessary but not provided in this API) @@ -397,7 +397,7 @@ public class ApplicationApiTest extends ControllerContainerTest { // Setup ContainerControllerTester controllerTester = new ContainerControllerTester(container, responseFiles); ContainerTester tester = controllerTester.containerTester(); - tester.updateSystemVersion(); + tester.updateVersionStatus(); createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); // Create tenant @@ -433,7 +433,7 @@ public class ApplicationApiTest extends ControllerContainerTest { // Setup ContainerControllerTester controllerTester = new ContainerControllerTester(container, responseFiles); ContainerTester tester = controllerTester.containerTester(); - tester.updateSystemVersion(); + tester.updateVersionStatus(); UserId userId = new UserId("new_user"); createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, userId); @@ -458,7 +458,7 @@ public class ApplicationApiTest extends ControllerContainerTest { // Setup ContainerControllerTester controllerTester = new ContainerControllerTester(container, responseFiles); ContainerTester tester = controllerTester.containerTester(); - tester.updateSystemVersion(); + tester.updateVersionStatus(); createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); // Create tenant @@ -533,7 +533,7 @@ public class ApplicationApiTest extends ControllerContainerTest { @Test public void testErrorResponses() throws Exception { ContainerTester tester = new ContainerTester(container, responseFiles); - tester.updateSystemVersion(); + tester.updateVersionStatus(); createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); // PUT (update) non-existing tenant @@ -844,7 +844,7 @@ public class ApplicationApiTest extends ControllerContainerTest { public void testJobStatusReporting() throws Exception { ContainerControllerTester tester = new ContainerControllerTester(container, responseFiles); addUserToHostedOperatorRole(HostedAthenzIdentities.from(HOSTED_VESPA_OPERATOR)); - tester.containerTester().updateSystemVersion(); + tester.containerTester().updateVersionStatus(); long projectId = 1; Application app = tester.createApplication(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() @@ -892,7 +892,7 @@ public class ApplicationApiTest extends ControllerContainerTest { @Test public void testJobStatusReportingOutOfCapacity() { ContainerControllerTester tester = new ContainerControllerTester(container, responseFiles); - tester.containerTester().updateSystemVersion(); + tester.containerTester().updateVersionStatus(); long projectId = 1; Application app = tester.createApplication(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java index f52cc9e9e11..fef6fd209e8 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java @@ -1,9 +1,10 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.restapi.deployment; import com.google.common.collect.ImmutableSet; import com.yahoo.component.Version; import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.RegionName; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; @@ -22,6 +23,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * @author bratseth @@ -41,7 +43,7 @@ public class DeploymentApiTest extends ControllerContainerTest { public void testDeploymentApi() throws IOException { ContainerControllerTester tester = new ContainerControllerTester(container, responseFiles); Version version = Version.fromString("5.0"); - tester.containerTester().updateSystemVersion(version); + tester.containerTester().updateVersionStatus(version); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .environment(Environment.prod) .region("corp-us-east-1") @@ -64,7 +66,7 @@ public class DeploymentApiTest extends ControllerContainerTest { // New version released version = Version.fromString("5.1"); - tester.containerTester().updateSystemVersion(version); + tester.containerTester().updateVersionStatus(version); // Applications upgrade, 1/2 succeed tester.upgrader().maintain(); @@ -82,11 +84,14 @@ public class DeploymentApiTest extends ControllerContainerTest { List<VespaVersion> censored = new ArrayList<>(); for (VespaVersion version : versionStatus.versions()) { if ( ! version.configServerHostnames().isEmpty()) - version = new VespaVersion(version.statistics(), - version.releaseCommit(), + version = new VespaVersion(version.statistics(), + version.releaseCommit(), version.committedAt(), - version.isCurrentSystemVersion(), - ImmutableSet.of("config1.test", "config2.test"), + version.isControllerVersion(), + version.isSystemVersion(), + ImmutableSet.of("config1.test", "config2.test").stream() + .map(HostName::from) + .collect(Collectors.toSet()), VespaVersion.confidenceFrom(version.statistics(), controller) ); censored.add(version); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json index 5f7fedfd75f..772e41dda42 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json @@ -1,7 +1,7 @@ { "versions":[ { - "version": "(ignore)", + "version": "5", "confidence": "high", "commit": "(ignore)", "date": 0, @@ -23,7 +23,7 @@ "deployingApplications": [ ] }, { - "version":"(ignore)", + "version":"5.1", "confidence":"normal", "commit":"(ignore)", "date":0, @@ -82,4 +82,4 @@ "deployingApplications": [ ] } ] -}
\ No newline at end of file +} diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java index a8e4c970cf7..6e79f53cae6 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java @@ -1,9 +1,8 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.restapi.screwdriver; import com.yahoo.application.container.handler.Request; import com.yahoo.vespa.hosted.controller.Application; -import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; import com.yahoo.vespa.hosted.controller.restapi.ContainerControllerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; @@ -11,7 +10,6 @@ import org.junit.Test; import java.io.File; import java.nio.charset.StandardCharsets; -import java.util.Optional; import java.util.OptionalLong; /** @@ -37,7 +35,7 @@ public class ScrewdriverApiTest extends ControllerContainerTest { @Test public void testTriggerJobForApplication() { ContainerControllerTester tester = new ContainerControllerTester(container, responseFiles); - tester.containerTester().updateSystemVersion(); + tester.containerTester().updateVersionStatus(); Application app = tester.createApplication(); tester.controller().applications().lockOrThrow(app.id(), application -> diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java index 7f3cfe665cc..b11c826d645 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java @@ -1,10 +1,11 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.versions; import com.google.common.collect.ImmutableSet; import com.yahoo.component.Version; import com.yahoo.component.Vtag; import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.TenantName; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; @@ -12,13 +13,14 @@ import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; +import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb; import com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence; import org.junit.Test; import java.net.URI; -import java.net.URISyntaxException; -import java.time.Duration; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.productionUsEast3; import static com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.productionUsWest1; @@ -43,7 +45,7 @@ public class VersionStatusTest { } @Test - public void testSystemVersionIsControllerVersionIfConfigserversAreNewer() { + public void testSystemVersionIsControllerVersionIfConfigServersAreNewer() { ControllerTester tester = new ControllerTester(); Version largerThanCurrent = new Version(Vtag.currentVersion.getMajor() + 1); tester.configServer().setDefaultVersion(largerThanCurrent); @@ -52,15 +54,39 @@ public class VersionStatusTest { } @Test - public void testSystemVersionIsVersionOfOldestConfigServer() throws URISyntaxException { + public void testSystemVersionIsVersionOfOldestConfigServer() { ControllerTester tester = new ControllerTester(); Version oldest = new Version(5); - tester.configServer().versions().put(new URI("https://cfg.prod.corp-us-east-1.test:4443"), oldest); + tester.configServer().versions().put(URI.create("https://cfg.prod.corp-us-east-1.test:4443"), oldest); VersionStatus versionStatus = VersionStatus.compute(tester.controller()); assertEquals(oldest, versionStatus.systemVersion().get().versionNumber()); } @Test + public void testControllerVersionIsVersionOfOldestController() { + HostName controller1 = HostName.from("controller-1"); + HostName controller2 = HostName.from("controller-2"); + HostName controller3 = HostName.from("controller-3"); + MockCuratorDb db = new MockCuratorDb(Stream.of(controller1, controller2, controller3) + .map(hostName -> hostName.value() + ":2222") + .collect(Collectors.joining(","))); + ControllerTester tester = new ControllerTester(db); + + db.writeControllerVersion(controller1, Version.fromString("6.2")); + db.writeControllerVersion(controller2, Version.fromString("6.1")); + db.writeControllerVersion(controller3, Version.fromString("6.2")); + + VersionStatus versionStatus = VersionStatus.compute(tester.controller()); + assertEquals("Controller version is oldest version", Version.fromString("6.1"), + versionStatus.controllerVersion().get().versionNumber()); + + // Last controller upgrades + db.writeControllerVersion(controller2, Version.fromString("6.2")); + versionStatus = VersionStatus.compute(tester.controller()); + assertEquals(Version.fromString("6.2"), versionStatus.controllerVersion().get().versionNumber()); + } + + @Test public void testVersionStatusAfterApplicationUpdates() { DeploymentTester tester = new DeploymentTester(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() |