summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2019-11-04 10:35:48 +0100
committerJon Marius Venstad <venstad@gmail.com>2019-11-04 11:19:47 +0100
commit88f48f2f433c9b59a783e44c9d25d66ca474459c (patch)
treeee26fa65cb723e559887b68787e630a11d0a7dd4 /controller-server
parent2180cc01b9600355602af8cd6308601c4215d39d (diff)
Use DeploymentContext instead of DeploymentTester directly
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java121
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java161
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java46
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java23
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporterTest.java63
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java41
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java79
8 files changed, 199 insertions, 337 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java
index 58d1c3e3ced..28057c3787a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java
@@ -138,6 +138,8 @@ public class DeploymentContext {
return instanceId;
}
+ public TesterId testerId() { return testerId; }
+
public DeploymentId deploymentIdIn(ZoneId zone) {
return new DeploymentId(instanceId, zone);
}
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 c9e2b2c0954..9316ea632cf 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,7 +1,6 @@
// 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;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.log.LogLevel;
@@ -14,13 +13,9 @@ import com.yahoo.vespa.hosted.controller.Instance;
import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId;
import com.yahoo.vespa.hosted.controller.api.integration.athenz.AthenzDbMock;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion;
-import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
-import com.yahoo.vespa.hosted.controller.api.integration.deployment.RunId;
-import com.yahoo.vespa.hosted.controller.api.integration.deployment.SourceRevision;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterId;
import com.yahoo.vespa.hosted.controller.api.integration.routing.RoutingGeneratorMock;
import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockTesterCloud;
-import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId;
import com.yahoo.vespa.hosted.controller.integration.ConfigServerMock;
import com.yahoo.vespa.hosted.controller.maintenance.JobControl;
@@ -36,12 +31,8 @@ import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Collections;
-import java.util.Optional;
import java.util.logging.Logger;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
/**
@@ -59,7 +50,6 @@ public class DeploymentTester {
public static final ApplicationId instanceId = appId.defaultInstance();
public static final TesterId testerId = TesterId.of(instanceId);
- private final DeploymentContext defaultContext;
private final ControllerTester tester;
private final JobController jobs;
private final RoutingGeneratorMock routing;
@@ -104,7 +94,6 @@ public class DeploymentTester {
outstandingChangeDeployer = new OutstandingChangeDeployer(tester.controller(), maintenanceInterval, jobControl);
nameServiceDispatcher = new NameServiceDispatcher(tester.controller(), maintenanceInterval, jobControl,
Integer.MAX_VALUE);
- defaultContext = newDeploymentContext(instanceId);
routing.putEndpoints(new DeploymentId(null, null), Collections.emptyList()); // Turn off default behaviour for the mock.
// Get deployment job logs to stderr.
@@ -159,29 +148,6 @@ public class DeploymentTester {
return newDeploymentContext(tenantName, applicationName, instanceName).application();
}
- /** Submits a new application, and returns the version of the new submission. */
- public ApplicationVersion newSubmission(TenantAndApplicationId id, ApplicationPackage applicationPackage, SourceRevision sourceRevision) {
- return newDeploymentContext(id.defaultInstance()).submit(applicationPackage, sourceRevision).lastSubmission().get();
- }
-
- public ApplicationVersion newSubmission(TenantAndApplicationId id, ApplicationPackage applicationPackage) {
- return newSubmission(id, applicationPackage, DeploymentContext.defaultSourceRevision);
- }
-
- /**
- * Submits a new application package, and returns the version of the new submission.
- */
- public ApplicationVersion newSubmission(ApplicationPackage applicationPackage) {
- return newSubmission(appId, applicationPackage);
- }
-
- /**
- * Submits a new application, and returns the version of the new submission.
- */
- public ApplicationVersion newSubmission() {
- return defaultContext.submit().lastSubmission().get();
- }
-
/**
* Sets a single endpoint in the routing mock; this matches that required for the tester.
*/
@@ -189,34 +155,6 @@ public class DeploymentTester {
newDeploymentContext(id).setEndpoints(zone);
}
- /** Completely deploys the given application version, assuming it is the last to be submitted. */
- public void deployNewSubmission(ApplicationVersion version) {
- deployNewSubmission(appId, version);
- }
-
- /** Completely deploys the given application version, assuming it is the last to be submitted. */
- public void deployNewSubmission(TenantAndApplicationId id, ApplicationVersion version) {
- var context = newDeploymentContext(id.defaultInstance());
- var application = context.application();
- assertFalse(application.instances().values().stream()
- .anyMatch(instance -> instance.deployments().values().stream()
- .anyMatch(deployment -> deployment.applicationVersion().equals(version))));
- assertEquals(version, application.change().application().get());
- assertFalse(application.change().platform().isPresent());
- context.completeRollout();
- assertFalse(context.application().change().hasTargets());
- }
-
- /** Completely deploys the given, new platform. */
- public void deployNewPlatform(Version version) {
- deployNewPlatform(appId, version);
- }
-
- /** Completely deploys the given, new platform. */
- public void deployNewPlatform(TenantAndApplicationId id, Version version) {
- newDeploymentContext(id.defaultInstance()).deployPlatform(version);
- }
-
/** Aborts and finishes all running jobs. */
public void abortAll() {
triggerJobs();
@@ -234,63 +172,4 @@ public class DeploymentTester {
return triggered;
}
- /** Starts a manual deployment of the given package, and then runs the whole of the given job, successfully. */
- public void runJob(ApplicationId instanceId, JobType type, ApplicationPackage applicationPackage) {
- jobs.deploy(instanceId, type, Optional.empty(), applicationPackage);
- newDeploymentContext(instanceId).runJob(type);
- }
-
- /** Pulls the ready job trigger, and then runs the whole of the given job, successfully. */
- public void runJob(JobType type) {
- defaultContext.runJob(type);
- }
-
- /** Pulls the ready job trigger, and then runs the whole of the given job, successfully. */
- public void runJob(ApplicationId instanceId, JobType type) {
- if (type.environment().isManuallyDeployed())
- throw new IllegalArgumentException("Use overload with application package for dev/perf jobs");
- newDeploymentContext(instanceId).runJob(type);
- }
-
- public void failDeployment(JobType type) {
- defaultContext.failDeployment(type);
- }
-
- public void failDeployment(ApplicationId instanceId, JobType type) {
- newDeploymentContext(instanceId).failDeployment(type);
- }
-
- public void timeOutUpgrade(JobType type) {
- defaultContext.timeOutUpgrade(type);
- }
-
- public void timeOutUpgrade(ApplicationId instanceId, JobType type) {
- newDeploymentContext(instanceId).timeOutConvergence(type);
- }
-
- public void timeOutConvergence(JobType type) {
- defaultContext.timeOutConvergence(type);
- }
-
- public void timeOutConvergence(ApplicationId instanceId, JobType type) {
- newDeploymentContext(instanceId).timeOutConvergence(type);
- }
-
- public RunId startSystemTestTests() {
- return defaultContext.startSystemTestTests();
- }
-
- /** Creates and submits a new application, and then starts the job of the given type. Use only once per test. */
- public RunId newRun(JobType type) {
- return defaultContext.newRun(type);
- }
-
- public void assertRunning(JobType type) {
- assertRunning(instanceId, type);
- }
-
- public void assertRunning(ApplicationId id, JobType type) {
- assertTrue(jobs.active().stream().anyMatch(run -> run.id().application().equals(id) && run.id().type() == type));
- }
-
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java
index e0f11a0b925..d50399c6c78 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java
@@ -53,7 +53,6 @@ import static com.yahoo.vespa.hosted.controller.api.integration.LogEntry.Type.wa
import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTester.instanceId;
import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.applicationPackage;
import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.publicCdApplicationPackage;
-import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTester.testerId;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.failed;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.succeeded;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.unfinished;
@@ -70,6 +69,7 @@ import static org.junit.Assert.fail;
public class InternalStepRunnerTest {
private DeploymentTester tester;
+ private DeploymentContext app;
@Before
public void setup() {
@@ -83,15 +83,16 @@ public class InternalStepRunnerTest {
@Test
public void canRegisterAndRunDirectly() {
- tester.deploymentContext().submit().deploy();
+ app.submit().deploy();
}
@Test
public void testerHasAthenzIdentity() {
- tester.newRun(JobType.stagingTest);
+ app.submit();
+ tester.triggerJobs();
tester.runner().run();
DeploymentSpec spec = tester.configServer()
- .application(DeploymentTester.testerId.id(), JobType.stagingTest.zone(system())).get()
+ .application(app.testerId().id(), JobType.stagingTest.zone(system())).get()
.applicationPackage().deploymentSpec();
assertEquals("domain", spec.athenzDomain().get().value());
ZoneId zone = JobType.stagingTest.zone(system());
@@ -100,21 +101,21 @@ public class InternalStepRunnerTest {
@Test
public void refeedRequirementBlocksDeployment() {
- RunId id = tester.newRun(JobType.stagingTest);
+ RunId id = app.newRun(JobType.stagingTest);
- tester.setEndpoints(testerId.id(), JobType.stagingTest.zone(system()));
+ tester.setEndpoints(app.testerId().id(), JobType.stagingTest.zone(system()));
tester.runner().run();
assertEquals(unfinished, tester.jobs().run(id).get().steps().get(Step.installInitialReal));
- tester.setEndpoints(instanceId, JobType.stagingTest.zone(system()));
- tester.configServer().convergeServices(instanceId, JobType.stagingTest.zone(system()));
+ tester.setEndpoints(app.instanceId(), JobType.stagingTest.zone(system()));
+ tester.configServer().convergeServices(app.instanceId(), JobType.stagingTest.zone(system()));
tester.configServer().setConfigChangeActions(new ConfigChangeActions(Collections.emptyList(),
- singletonList(new RefeedAction("Refeed",
- false,
- "doctype",
- "cluster",
- Collections.emptyList(),
- singletonList("Refeed it!")))));
+ singletonList(new RefeedAction("Refeed",
+ false,
+ "doctype",
+ "cluster",
+ Collections.emptyList(),
+ singletonList("Refeed it!")))));
tester.runner().run();
assertEquals(failed, tester.jobs().run(id).get().steps().get(Step.deployReal));
@@ -122,11 +123,11 @@ public class InternalStepRunnerTest {
@Test
public void restartsServicesAndWaitsForRestartAndReboot() {
- RunId id = tester.newRun(JobType.productionUsCentral1);
+ RunId id = app.newRun(JobType.productionUsCentral1);
ZoneId zone = id.type().zone(system());
HostName host = tester.configServer().hostFor(instanceId, zone);
- tester.setEndpoints(testerId.id(), JobType.productionUsCentral1.zone(system()));
+ tester.setEndpoints(app.testerId().id(), JobType.productionUsCentral1.zone(system()));
tester.runner().run();
tester.configServer().setConfigChangeActions(new ConfigChangeActions(singletonList(new RestartAction("cluster",
@@ -141,11 +142,11 @@ public class InternalStepRunnerTest {
tester.runner().run();
assertEquals(succeeded, tester.jobs().run(id).get().steps().get(Step.deployReal));
- tester.configServer().convergeServices(instanceId, zone);
+ tester.configServer().convergeServices(app.instanceId(), zone);
assertEquals(unfinished, tester.jobs().run(id).get().steps().get(Step.installReal));
- tester.configServer().nodeRepository().doRestart(new DeploymentId(instanceId, zone), Optional.of(host));
- tester.configServer().nodeRepository().requestReboot(new DeploymentId(instanceId, zone), Optional.of(host));
+ tester.configServer().nodeRepository().doRestart(app.deploymentIdIn(zone), Optional.of(host));
+ tester.configServer().nodeRepository().requestReboot(app.deploymentIdIn(zone), Optional.of(host));
tester.runner().run();
assertEquals(unfinished, tester.jobs().run(id).get().steps().get(Step.installReal));
@@ -156,85 +157,85 @@ public class InternalStepRunnerTest {
@Test
public void waitsForEndpointsAndTimesOut() {
- tester.newRun(JobType.systemTest);
+ app.newRun(JobType.systemTest);
// Tester fails to show up for staging tests, and the real deployment for system tests.
- tester.setEndpoints(testerId.id(), JobType.systemTest.zone(system()));
- tester.setEndpoints(instanceId, JobType.stagingTest.zone(system()));
+ tester.setEndpoints(app.testerId().id(), JobType.systemTest.zone(system()));
+ tester.setEndpoints(app.instanceId(), JobType.stagingTest.zone(system()));
tester.runner().run();
- tester.configServer().convergeServices(instanceId, JobType.stagingTest.zone(system()));
+ tester.configServer().convergeServices(app.instanceId(), JobType.stagingTest.zone(system()));
tester.runner().run();
- tester.configServer().convergeServices(instanceId, JobType.systemTest.zone(system()));
- tester.configServer().convergeServices(testerId.id(), JobType.systemTest.zone(system()));
- tester.configServer().convergeServices(instanceId, JobType.stagingTest.zone(system()));
- tester.configServer().convergeServices(testerId.id(), JobType.stagingTest.zone(system()));
+ tester.configServer().convergeServices(app.instanceId(), JobType.systemTest.zone(system()));
+ tester.configServer().convergeServices(app.testerId().id(), JobType.systemTest.zone(system()));
+ tester.configServer().convergeServices(app.instanceId(), JobType.stagingTest.zone(system()));
+ tester.configServer().convergeServices(app.testerId().id(), JobType.stagingTest.zone(system()));
tester.runner().run();
tester.clock().advance(InternalStepRunner.endpointTimeout.plus(Duration.ofSeconds(1)));
tester.runner().run();
- assertEquals(failed, tester.jobs().last(instanceId, JobType.systemTest).get().steps().get(Step.installReal));
- assertEquals(failed, tester.jobs().last(instanceId, JobType.stagingTest).get().steps().get(Step.installTester));
+ assertEquals(failed, tester.jobs().last(app.instanceId(), JobType.systemTest).get().steps().get(Step.installReal));
+ assertEquals(failed, tester.jobs().last(app.instanceId(), JobType.stagingTest).get().steps().get(Step.installTester));
}
@Test
public void installationFailsIfDeploymentExpires() {
- tester.newRun(JobType.systemTest);
+ app.newRun(JobType.systemTest);
tester.runner().run();
- tester.configServer().convergeServices(instanceId, JobType.systemTest.zone(system()));
- tester.setEndpoints(instanceId, JobType.systemTest.zone(system()));
+ tester.configServer().convergeServices(app.instanceId(), JobType.systemTest.zone(system()));
+ tester.setEndpoints(app.instanceId(), JobType.systemTest.zone(system()));
tester.runner().run();
- assertEquals(succeeded, tester.jobs().last(instanceId, JobType.systemTest).get().steps().get(Step.installReal));
+ assertEquals(succeeded, tester.jobs().last(app.instanceId(), JobType.systemTest).get().steps().get(Step.installReal));
- tester.applications().deactivate(instanceId, JobType.systemTest.zone(system()));
+ tester.applications().deactivate(app.instanceId(), JobType.systemTest.zone(system()));
tester.runner().run();
- assertEquals(failed, tester.jobs().last(instanceId, JobType.systemTest).get().steps().get(Step.installTester));
- assertTrue(tester.jobs().last(instanceId, JobType.systemTest).get().hasEnded());
- assertTrue(tester.jobs().last(instanceId, JobType.systemTest).get().hasFailed());
+ assertEquals(failed, tester.jobs().last(app.instanceId(), JobType.systemTest).get().steps().get(Step.installTester));
+ assertTrue(tester.jobs().last(app.instanceId(), JobType.systemTest).get().hasEnded());
+ assertTrue(tester.jobs().last(app.instanceId(), JobType.systemTest).get().hasFailed());
}
@Test
public void startTestsFailsIfDeploymentExpires() {
- tester.newRun(JobType.systemTest);
+ app.newRun(JobType.systemTest);
tester.runner().run();
- tester.configServer().convergeServices(instanceId, JobType.systemTest.zone(system()));
- tester.configServer().convergeServices(testerId.id(), JobType.systemTest.zone(system()));
+ tester.configServer().convergeServices(app.instanceId(), JobType.systemTest.zone(system()));
+ tester.configServer().convergeServices(app.testerId().id(), JobType.systemTest.zone(system()));
tester.runner().run();
- tester.applications().deactivate(instanceId, JobType.systemTest.zone(system()));
+ tester.applications().deactivate(app.instanceId(), JobType.systemTest.zone(system()));
tester.runner().run();
- assertEquals(unfinished, tester.jobs().last(instanceId, JobType.systemTest).get().steps().get(Step.startTests));
+ assertEquals(unfinished, tester.jobs().last(app.instanceId(), JobType.systemTest).get().steps().get(Step.startTests));
}
@Test
public void alternativeEndpointsAreDetected() {
- tester.newRun(JobType.systemTest);
+ app.newRun(JobType.systemTest);
tester.runner().run();;
- tester.configServer().convergeServices(instanceId, JobType.systemTest.zone(system()));
- tester.configServer().convergeServices(testerId.id(), JobType.systemTest.zone(system()));
- assertEquals(unfinished, tester.jobs().last(instanceId, JobType.systemTest).get().steps().get(Step.installReal));
- assertEquals(unfinished, tester.jobs().last(instanceId, JobType.systemTest).get().steps().get(Step.installTester));
-
- tester.controller().curator().writeRoutingPolicies(instanceId, Set.of(new RoutingPolicy(instanceId,
+ tester.configServer().convergeServices(app.instanceId(), JobType.systemTest.zone(system()));
+ tester.configServer().convergeServices(app.testerId().id(), JobType.systemTest.zone(system()));
+ assertEquals(unfinished, tester.jobs().last(app.instanceId(), JobType.systemTest).get().steps().get(Step.installReal));
+ assertEquals(unfinished, tester.jobs().last(app.instanceId(), JobType.systemTest).get().steps().get(Step.installTester));
+
+ tester.controller().curator().writeRoutingPolicies(app.instanceId(), Set.of(new RoutingPolicy(app.instanceId(),
+ ClusterSpec.Id.from("default"),
+ JobType.systemTest.zone(system()),
+ HostName.from("host"),
+ Optional.empty(),
+ emptySet())));
+ tester.controller().curator().writeRoutingPolicies(app.testerId().id(), Set.of(new RoutingPolicy(app.testerId().id(),
ClusterSpec.Id.from("default"),
JobType.systemTest.zone(system()),
HostName.from("host"),
Optional.empty(),
emptySet())));
- tester.controller().curator().writeRoutingPolicies(testerId.id(), Set.of(new RoutingPolicy(testerId.id(),
- ClusterSpec.Id.from("default"),
- JobType.systemTest.zone(system()),
- HostName.from("host"),
- Optional.empty(),
- emptySet())));
tester.runner().run();;
- assertEquals(succeeded, tester.jobs().last(instanceId, JobType.systemTest).get().steps().get(Step.installReal));
- assertEquals(succeeded, tester.jobs().last(instanceId, JobType.systemTest).get().steps().get(Step.installTester));
+ assertEquals(succeeded, tester.jobs().last(app.instanceId(), JobType.systemTest).get().steps().get(Step.installReal));
+ assertEquals(succeeded, tester.jobs().last(app.instanceId(), JobType.systemTest).get().steps().get(Step.installTester));
}
@Test
public void testsFailIfTesterRestarts() {
- RunId id = tester.startSystemTestTests();
+ RunId id = app.startSystemTestTests();
tester.cloud().set(TesterCloud.Status.NOT_STARTED);
tester.runner().run();
assertEquals(failed, tester.jobs().run(id).get().steps().get(Step.endTests));
@@ -242,7 +243,7 @@ public class InternalStepRunnerTest {
@Test
public void testsFailIfTestsFailRemotely() {
- RunId id = tester.startSystemTestTests();
+ RunId id = app.startSystemTestTests();
tester.cloud().add(new LogEntry(123, Instant.ofEpochMilli(321), error, "Failure!"));
tester.cloud().set(TesterCloud.Status.FAILURE);
@@ -256,7 +257,7 @@ public class InternalStepRunnerTest {
@Test
public void testsFailIfTestsErr() {
- RunId id = tester.startSystemTestTests();
+ RunId id = app.startSystemTestTests();
tester.cloud().add(new LogEntry(0, Instant.ofEpochMilli(123), error, "Error!"));
tester.cloud().set(TesterCloud.Status.ERROR);
@@ -270,13 +271,13 @@ public class InternalStepRunnerTest {
@Test
public void testsSucceedWhenTheyDoRemotely() {
- RunId id = tester.startSystemTestTests();
+ RunId id = app.startSystemTestTests();
tester.runner().run();
assertEquals(unfinished, tester.jobs().run(id).get().steps().get(Step.endTests));
- assertEquals(URI.create(tester.routing().endpoints(new DeploymentId(testerId.id(), JobType.systemTest.zone(system()))).get(0).endpoint()),
+ assertEquals(URI.create(tester.routing().endpoints(new DeploymentId(app.testerId().id(), JobType.systemTest.zone(system()))).get(0).endpoint()),
tester.cloud().testerUrl());
Inspector configObject = SlimeUtils.jsonToSlime(tester.cloud().config()).get();
- assertEquals(instanceId.serializedForm(), configObject.field("application").asString());
+ assertEquals(app.instanceId().serializedForm(), configObject.field("application").asString());
assertEquals(JobType.systemTest.zone(system()).value(), configObject.field("zone").asString());
assertEquals(system().value(), configObject.field("system").asString());
assertEquals(1, configObject.field("endpoints").children());
@@ -309,36 +310,36 @@ public class InternalStepRunnerTest {
@Test
public void deployToDev() {
ZoneId zone = JobType.devUsEast1.zone(system());
- tester.jobs().deploy(instanceId, JobType.devUsEast1, Optional.empty(), applicationPackage);
+ tester.jobs().deploy(app.instanceId(), JobType.devUsEast1, Optional.empty(), applicationPackage);
tester.runner().run();
- RunId id = tester.jobs().last(instanceId, JobType.devUsEast1).get().id();
+ RunId id = tester.jobs().last(app.instanceId(), JobType.devUsEast1).get().id();
assertEquals(unfinished, tester.jobs().run(id).get().steps().get(Step.installReal));
Version version = new Version("7.8.9");
Future<?> concurrentDeployment = Executors.newSingleThreadExecutor().submit(() -> {
- tester.jobs().deploy(instanceId, JobType.devUsEast1, Optional.of(version), applicationPackage);
+ tester.jobs().deploy(app.instanceId(), JobType.devUsEast1, Optional.of(version), applicationPackage);
});
while ( ! concurrentDeployment.isDone())
tester.runner().run();
- assertEquals(id.number() + 1, tester.jobs().last(instanceId, JobType.devUsEast1).get().id().number());
+ assertEquals(id.number() + 1, tester.jobs().last(app.instanceId(), JobType.devUsEast1).get().id().number());
ApplicationPackage otherPackage = new ApplicationPackageBuilder().region("us-central-1").build();
- tester.jobs().deploy(instanceId, JobType.perfUsEast3, Optional.empty(), otherPackage);
+ tester.jobs().deploy(app.instanceId(), JobType.perfUsEast3, Optional.empty(), otherPackage);
tester.runner().run(); // Job run order determined by JobType enum order per application.
- tester.configServer().convergeServices(instanceId, zone);
- tester.setEndpoints(instanceId, zone);
+ tester.configServer().convergeServices(app.instanceId(), zone);
+ tester.setEndpoints(app.instanceId(), zone);
assertEquals(unfinished, tester.jobs().run(id).get().steps().get(Step.installReal));
- assertEquals(applicationPackage.hash(), tester.configServer().application(instanceId, zone).get().applicationPackage().hash());
- assertEquals(otherPackage.hash(), tester.configServer().application(instanceId, JobType.perfUsEast3.zone(system())).get().applicationPackage().hash());
+ assertEquals(applicationPackage.hash(), tester.configServer().application(app.instanceId(), zone).get().applicationPackage().hash());
+ assertEquals(otherPackage.hash(), tester.configServer().application(app.instanceId(), JobType.perfUsEast3.zone(system())).get().applicationPackage().hash());
- tester.configServer().setVersion(instanceId, zone, version);
+ tester.configServer().setVersion(app.instanceId(), zone, version);
tester.runner().run();
assertEquals(1, tester.jobs().active().size());
- assertEquals(version, tester.instance(instanceId).deployments().get(zone).version());
+ assertEquals(version, tester.instance(app.instanceId()).deployments().get(zone).version());
try {
- tester.jobs().deploy(instanceId, JobType.productionApNortheast1, Optional.empty(), applicationPackage);
+ tester.jobs().deploy(app.instanceId(), JobType.productionApNortheast1, Optional.empty(), applicationPackage);
fail("Deployments outside dev should not be allowed.");
}
catch (IllegalArgumentException expected) { }
@@ -346,10 +347,10 @@ public class InternalStepRunnerTest {
@Test
public void notificationIsSent() {
- tester.startSystemTestTests();
+ app.startSystemTestTests();
tester.cloud().set(TesterCloud.Status.NOT_STARTED);
tester.runner().run();
- MockMailer mailer = ((MockMailer) tester.controller().serviceRegistry().mailer());
+ MockMailer mailer = tester.controllerTester().serviceRegistry().mailer();
assertEquals(1, mailer.inbox("a@b").size());
assertEquals("Vespa application tenant.application: System test failing due to system error",
mailer.inbox("a@b").get(0).subject());
@@ -360,7 +361,7 @@ public class InternalStepRunnerTest {
@Test
public void vespaLogIsCopied() {
- RunId id = tester.startSystemTestTests();
+ RunId id = app.startSystemTestTests();
tester.cloud().set(TesterCloud.Status.ERROR);
tester.configServer().setLogStream(vespaLog);
long lastId = tester.jobs().details(id).get().lastId().getAsLong();
@@ -385,11 +386,11 @@ public class InternalStepRunnerTest {
public void certificateTimeoutAbortsJob() {
tester.controllerTester().zoneRegistry().setSystemName(SystemName.PublicCd);
tester.controllerTester().zoneRegistry().setZones(ZoneApiMock.fromId("prod.aws-us-east-1c"));
- RunId id = tester.startSystemTestTests();
+ RunId id = app.startSystemTestTests();
List<X509Certificate> trusted = new ArrayList<>(publicCdApplicationPackage.trustedCertificates());
trusted.add(tester.jobs().run(id).get().testerCertificate().get());
- assertEquals(trusted, tester.configServer().application(instanceId, id.type().zone(system())).get().applicationPackage().trustedCertificates());
+ assertEquals(trusted, tester.configServer().application(app.instanceId(), id.type().zone(system())).get().applicationPackage().trustedCertificates());
tester.clock().advance(InternalStepRunner.certificateTimeout.plus(Duration.ofSeconds(1)));
tester.runner().run();
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java
index 88d1626b834..8997f34fb98 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ApplicationOwnershipConfirmerTest.java
@@ -2,15 +2,12 @@
package com.yahoo.vespa.hosted.controller.maintenance;
import com.yahoo.config.provision.InstanceName;
-import com.yahoo.vespa.hosted.controller.Application;
import com.yahoo.vespa.hosted.controller.LockedTenant;
import com.yahoo.vespa.hosted.controller.api.integration.organization.ApplicationSummary;
import com.yahoo.vespa.hosted.controller.api.integration.organization.Contact;
import com.yahoo.vespa.hosted.controller.api.integration.organization.IssueId;
import com.yahoo.vespa.hosted.controller.api.integration.organization.OwnershipIssues;
import com.yahoo.vespa.hosted.controller.api.integration.organization.User;
-import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId;
-import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext;
import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester;
import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
import com.yahoo.vespa.hosted.controller.tenant.UserTenant;
@@ -20,7 +17,6 @@ import org.junit.Test;
import java.time.Duration;
import java.util.List;
import java.util.Optional;
-import java.util.function.Supplier;
import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTester.appId;
import static org.junit.Assert.assertEquals;
@@ -46,20 +42,18 @@ public class ApplicationOwnershipConfirmerTest {
@Test
public void testConfirmation() {
Optional<Contact> contact = Optional.of(tester.controllerTester().serviceRegistry().contactRetrieverMock().contact());
+ var propertyApp = tester.newDeploymentContext();
tester.controller().tenants().lockOrThrow(appId.tenant(), LockedTenant.Athenz.class, tenant ->
tester.controller().tenants().store(tenant.with(contact.get())));
- Supplier<Application> propertyApp = tester::application;
- tester.deployNewSubmission(tester.newSubmission());
+ propertyApp.submit().deploy();
UserTenant user = UserTenant.create("by-user", contact);
tester.controller().tenants().createUser(user);
- tester.createApplication(user.name().value(), "application", "default");
- TenantAndApplicationId userAppId = TenantAndApplicationId.from("by-user", "application");
- Supplier<Application> userApp = () -> tester.controller().applications().requireApplication(userAppId);
- tester.deployNewSubmission(userAppId, tester.newSubmission(userAppId, DeploymentContext.applicationPackage));
+ var userApp = tester.newDeploymentContext("by-user", "application", "default");
+ userApp.submit().deploy();
- assertFalse("No issue is initially stored for a new application.", propertyApp.get().ownershipIssueId().isPresent());
- assertFalse("No issue is initially stored for a new application.", userApp.get().ownershipIssueId().isPresent());
+ assertFalse("No issue is initially stored for a new application.", propertyApp.application().ownershipIssueId().isPresent());
+ assertFalse("No issue is initially stored for a new application.", userApp.application().ownershipIssueId().isPresent());
assertFalse("No escalation has been attempted for a new application", issues.escalatedToContact || issues.escalatedToTerminator);
// Set response from the issue mock, which will be obtained by the maintainer on issue filing.
@@ -67,14 +61,14 @@ public class ApplicationOwnershipConfirmerTest {
issues.response = issueId;
confirmer.maintain();
- assertFalse("No issue is stored for an application newer than 3 months.", propertyApp.get().ownershipIssueId().isPresent());
- assertFalse("No issue is stored for an application newer than 3 months.", userApp.get().ownershipIssueId().isPresent());
+ assertFalse("No issue is stored for an application newer than 3 months.", propertyApp.application().ownershipIssueId().isPresent());
+ assertFalse("No issue is stored for an application newer than 3 months.", userApp.application().ownershipIssueId().isPresent());
tester.clock().advance(Duration.ofDays(91));
confirmer.maintain();
- assertEquals("Confirmation issue has been filed for property owned application.", issueId, propertyApp.get().ownershipIssueId());
- assertEquals("Confirmation issue has been filed for user owned application.", issueId, userApp.get().ownershipIssueId());
+ assertEquals("Confirmation issue has been filed for property owned application.", issueId, propertyApp.application().ownershipIssueId());
+ assertEquals("Confirmation issue has been filed for user owned application.", issueId, userApp.application().ownershipIssueId());
assertTrue(issues.escalatedToTerminator);
assertTrue("Both applications have had their responses ensured.", issues.escalatedToContact);
@@ -82,14 +76,14 @@ public class ApplicationOwnershipConfirmerTest {
issues.response = Optional.empty();
confirmer.maintain();
- assertEquals("Confirmation issue reference is not updated when no issue id is returned.", issueId, propertyApp.get().ownershipIssueId());
- assertEquals("Confirmation issue reference is not updated when no issue id is returned.", issueId, userApp.get().ownershipIssueId());
+ assertEquals("Confirmation issue reference is not updated when no issue id is returned.", issueId, propertyApp.application().ownershipIssueId());
+ assertEquals("Confirmation issue reference is not updated when no issue id is returned.", issueId, userApp.application().ownershipIssueId());
// The user deletes all production deployments — see that the issue is forgotten.
- assertEquals("Confirmation issue for user is still open.", issueId, userApp.get().ownershipIssueId());
- userApp.get().productionDeployments().values().stream().flatMap(List::stream)
- .forEach(deployment -> tester.controller().applications().deactivate(userAppId.defaultInstance(), deployment.zone()));
- assertTrue("No production deployments are listed for user.", userApp.get().require(InstanceName.defaultName()).productionDeployments().isEmpty());
+ assertEquals("Confirmation issue for user is still open.", issueId, userApp.application().ownershipIssueId());
+ userApp.application().productionDeployments().values().stream().flatMap(List::stream)
+ .forEach(deployment -> tester.controller().applications().deactivate(userApp.instanceId(), deployment.zone()));
+ assertTrue("No production deployments are listed for user.", userApp.application().require(InstanceName.defaultName()).productionDeployments().isEmpty());
confirmer.maintain();
// Time has passed, and a new confirmation issue is in order for the property which is still in production.
@@ -97,13 +91,13 @@ public class ApplicationOwnershipConfirmerTest {
issues.response = issueId2;
confirmer.maintain();
- assertEquals("A new confirmation issue id is stored when something is returned to the maintainer.", issueId2, propertyApp.get().ownershipIssueId());
- assertEquals("Confirmation issue for application without production deployments has not been filed.", issueId, userApp.get().ownershipIssueId());
+ assertEquals("A new confirmation issue id is stored when something is returned to the maintainer.", issueId2, propertyApp.application().ownershipIssueId());
+ assertEquals("Confirmation issue for application without production deployments has not been filed.", issueId, userApp.application().ownershipIssueId());
- assertFalse("No owner is stored for application", propertyApp.get().owner().isPresent());
+ assertFalse("No owner is stored for application", propertyApp.application().owner().isPresent());
issues.owner = Optional.of(User.from("username"));
confirmer.maintain();
- assertEquals("Owner has been added to application", propertyApp.get().owner().get().username(), "username");
+ assertEquals("Owner has been added to application", propertyApp.application().owner().get().username(), "username");
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java
index 4df1336ac1f..258dad3b6d6 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentExpirerTest.java
@@ -35,35 +35,32 @@ public class DeploymentExpirerTest {
);
DeploymentExpirer expirer = new DeploymentExpirer(tester.controller(), Duration.ofDays(10),
new JobControl(new MockCuratorDb()));
- Application devApp = tester.createApplication("tenant1", "app1", "default");
- Application prodApp = tester.createApplication("tenant2", "app2", "default");
+ var devApp = tester.newDeploymentContext("tenant1", "app1", "default");
+ var prodApp = tester.newDeploymentContext("tenant2", "app2", "default");
ApplicationPackage appPackage = new ApplicationPackageBuilder()
.region("us-west-1")
.build();
- Instance devInstance = tester.instance(devApp.id().defaultInstance());
- Instance prodInstance = tester.instance(prodApp.id().defaultInstance());
-
// Deploy dev
- tester.runJob(devInstance.id(), JobType.devUsEast1, appPackage);
+ devApp.runJob(JobType.devUsEast1, appPackage);
// Deploy prod
- tester.deployNewSubmission(prodApp.id(), tester.newSubmission(prodApp.id(), appPackage));
+ prodApp.submit(appPackage).deploy();
- assertEquals(1, permanentDeployments(devInstance).size());
- assertEquals(1, permanentDeployments(prodInstance).size());
+ assertEquals(1, permanentDeployments(devApp.instance()).size());
+ assertEquals(1, permanentDeployments(prodApp.instance()).size());
// Not expired at first
expirer.maintain();
- assertEquals(1, permanentDeployments(devInstance).size());
- assertEquals(1, permanentDeployments(prodInstance).size());
+ assertEquals(1, permanentDeployments(devApp.instance()).size());
+ assertEquals(1, permanentDeployments(prodApp.instance()).size());
// The dev application is removed
tester.clock().advance(Duration.ofDays(15));
expirer.maintain();
- assertEquals(0, permanentDeployments(devInstance).size());
- assertEquals(1, permanentDeployments(prodInstance).size());
+ assertEquals(0, permanentDeployments(devApp.instance()).size());
+ assertEquals(1, permanentDeployments(prodApp.instance()).size());
}
private List<Deployment> permanentDeployments(Instance instance) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporterTest.java
index 070171ad399..0afe7377d40 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporterTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentIssueReporterTest.java
@@ -13,6 +13,7 @@ import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.Change;
import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId;
import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext;
import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester;
import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
import com.yahoo.vespa.hosted.controller.versions.VespaVersion;
@@ -65,33 +66,28 @@ public class DeploymentIssueReporterTest {
tester.controllerTester().upgradeSystem(Version.fromString("6.2"));
// Create and deploy one application for each of three tenants.
- Application app1 = tester.createApplication("application1", "tenant1", "default");
- Application app2 = tester.createApplication("application2", "tenant2", "default");
- Application app3 = tester.createApplication("application3", "tenant3", "default");
+ var app1 = tester.newDeploymentContext("application1", "tenant1", "default");
+ var app2 = tester.newDeploymentContext("application2", "tenant2", "default");
+ var app3 = tester.newDeploymentContext("application3", "tenant3", "default");
Contact contact = tester.controllerTester().serviceRegistry().contactRetrieverMock().contact();
- tester.controller().tenants().lockOrThrow(app1.id().tenant(), LockedTenant.Athenz.class, tenant ->
+ tester.controller().tenants().lockOrThrow(app1.instanceId().tenant(), LockedTenant.Athenz.class, tenant ->
tester.controller().tenants().store(tenant.with(contact)));
- tester.controller().tenants().lockOrThrow(app2.id().tenant(), LockedTenant.Athenz.class, tenant ->
+ tester.controller().tenants().lockOrThrow(app2.instanceId().tenant(), LockedTenant.Athenz.class, tenant ->
tester.controller().tenants().store(tenant.with(contact)));
- tester.controller().tenants().lockOrThrow(app3.id().tenant(), LockedTenant.Athenz.class, tenant ->
+ tester.controller().tenants().lockOrThrow(app3.instanceId().tenant(), LockedTenant.Athenz.class, tenant ->
tester.controller().tenants().store(tenant.with(contact)));
// NOTE: All maintenance should be idempotent within a small enough time interval, so maintain is called twice in succession throughout.
// app 1 fails staging tests.
- tester.newSubmission(app1.id(), applicationPackage);
- tester.runJob(app1.id().defaultInstance(), systemTest);
- tester.timeOutConvergence(app1.id().defaultInstance(), stagingTest);
+ app1.submit(applicationPackage).runJob(systemTest).timeOutConvergence(stagingTest);
// app2 is successful, but will fail later.
- tester.deployNewSubmission(app2.id(), tester.newSubmission(app2.id(), applicationPackage));
+ app2.submit(applicationPackage).deploy();
// app 3 fails a production job.
- tester.newSubmission(app3.id(), applicationPackage);
- tester.runJob(app3.id().defaultInstance(), systemTest);
- tester.runJob(app3.id().defaultInstance(), stagingTest);
- tester.failDeployment(app3.id().defaultInstance(), productionUsWest1);
+ app3.submit(applicationPackage).runJob(systemTest).runJob(stagingTest).failDeployment(productionUsWest1);
reporter.maintain();
reporter.maintain();
@@ -103,53 +99,52 @@ public class DeploymentIssueReporterTest {
reporter.maintain();
reporter.maintain();
- assertTrue("One issue is produced for app1.", issues.isOpenFor(app1.id()));
- assertFalse("No issues are produced for app2.", issues.isOpenFor(app2.id()));
- assertTrue("One issue is produced for app3.", issues.isOpenFor(app3.id()));
+ assertTrue("One issue is produced for app1.", issues.isOpenFor(app1.application().id()));
+ assertFalse("No issues are produced for app2.", issues.isOpenFor(app2.application().id()));
+ assertTrue("One issue is produced for app3.", issues.isOpenFor(app3.application().id()));
// app3 closes their issue prematurely; see that it is refiled.
- issues.closeFor(app3.id());
- assertFalse("No issue is open for app3.", issues.isOpenFor(app3.id()));
+ issues.closeFor(app3.application().id());
+ assertFalse("No issue is open for app3.", issues.isOpenFor(app3.application().id()));
reporter.maintain();
reporter.maintain();
- assertTrue("Issue is re-filed for app3.", issues.isOpenFor(app3.id()));
+ assertTrue("Issue is re-filed for app3.", issues.isOpenFor(app3.application().id()));
// Some time passes; tenant1 leaves her issue unattended, while tenant3 starts work and updates the issue.
tester.clock().advance(maxInactivity.plus(maxFailureAge));
- issues.touchFor(app3.id());
+ issues.touchFor(app3.application().id());
reporter.maintain();
reporter.maintain();
- assertEquals("The issue for app1 is escalated once.", 1, issues.escalationLevelFor(app1.id()));
+ assertEquals("The issue for app1 is escalated once.", 1, issues.escalationLevelFor(app1.application().id()));
// app3 fixes their problems, but the ticket for app3 is left open; see the resolved ticket is not escalated when another escalation period has passed.
- tester.runJob(app3.id().defaultInstance(), productionUsWest1);
+ app3.runJob(productionUsWest1);
tester.clock().advance(maxInactivity.plus(Duration.ofDays(1)));
reporter.maintain();
reporter.maintain();
assertFalse("We no longer have a platform issue.", issues.platformIssue());
- assertEquals("The issue for app1 is escalated once more.", 2, issues.escalationLevelFor(app1.id()));
- assertEquals("The issue for app3 is not escalated.", 0, issues.escalationLevelFor(app3.id()));
+ assertEquals("The issue for app1 is escalated once more.", 2, issues.escalationLevelFor(app1.application().id()));
+ assertEquals("The issue for app3 is not escalated.", 0, issues.escalationLevelFor(app3.application().id()));
// app3 now has a new failure past max failure age; see that a new issue is filed.
- tester.newSubmission(app3.id(), applicationPackage);
- tester.failDeployment(app3.id().defaultInstance(), systemTest);
+ app3.submit(applicationPackage).failDeployment(systemTest);
tester.clock().advance(maxInactivity.plus(maxFailureAge));
reporter.maintain();
reporter.maintain();
- assertTrue("A new issue is filed for app3.", issues.isOpenFor(app3.id()));
+ assertTrue("A new issue is filed for app3.", issues.isOpenFor(app3.application().id()));
- // App2 is changed to be a canary
- tester.deployNewSubmission(app2.id(), tester.newSubmission(app2.id(), canaryPackage));
- assertEquals(canary, tester.applications().requireApplication(app2.id()).deploymentSpec().requireInstance("default").upgradePolicy());
- assertEquals(Change.empty(), tester.applications().requireApplication(app2.id()).change());
+ // app2 is changed to be a canary
+ app2.submit(canaryPackage).deploy();
+ assertEquals(canary, app2.application().deploymentSpec().requireInstance("default").upgradePolicy());
+ assertEquals(Change.empty(), app2.application().change());
// Bump system version to upgrade canary app2.
Version version = Version.fromString("6.3");
@@ -157,7 +152,7 @@ public class DeploymentIssueReporterTest {
tester.upgrader().maintain();
assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber());
- tester.timeOutUpgrade(app2.id().defaultInstance(), systemTest);
+ app2.timeOutUpgrade(systemTest);
tester.controllerTester().upgradeSystem(version);
assertEquals(VespaVersion.Confidence.broken, tester.controller().versionStatus().systemVersion().get().confidence());
@@ -169,7 +164,7 @@ public class DeploymentIssueReporterTest {
reporter.maintain();
reporter.maintain();
assertTrue("We get a platform issue when confidence is broken", issues.platformIssue());
- assertFalse("No deployment issue is filed for app2, which has a version upgrade failure.", issues.isOpenFor(app2.id()));
+ assertFalse("No deployment issue is filed for app2, which has a version upgrade failure.", issues.isOpenFor(app2.application().id()));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java
index 0be873f80ed..11c77304dd0 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployerTest.java
@@ -37,45 +37,40 @@ public class OutstandingChangeDeployerTest {
.region("us-west-1")
.build();
- Application app1 = tester.createApplication("tenant", "app1", "default");
- tester.deployNewSubmission(app1.id(), tester.newSubmission(app1.id(), applicationPackage));
+ var app1 = tester.newDeploymentContext("tenant", "app1", "default").submit(applicationPackage).deploy();
Version version = new Version(6, 2);
- tester.deploymentTrigger().triggerChange(app1.id(), Change.of(version));
+ tester.deploymentTrigger().triggerChange(app1.application().id(), Change.of(version));
tester.deploymentTrigger().triggerReadyJobs();
- assertEquals(Change.of(version), tester.application(app1.id()).change());
- assertFalse(tester.application(app1.id()).outstandingChange().hasTargets());
+ assertEquals(Change.of(version), app1.application().change());
+ assertFalse(app1.application().outstandingChange().hasTargets());
- assertEquals(1, tester.application(app1.id()).latestVersion().get().buildNumber().getAsLong());
- tester.newSubmission(app1.id(), applicationPackage, new SourceRevision("repository1", "master", "cafed00d"));
+ assertEquals(1, app1.application().latestVersion().get().buildNumber().getAsLong());
+ app1.submit(applicationPackage, new SourceRevision("repository1", "master", "cafed00d"));
- ApplicationId instanceId = app1.id().defaultInstance();
- assertTrue(tester.application(app1.id()).outstandingChange().hasTargets());
- assertEquals("1.0.2-cafed00d", tester.application(app1.id()).outstandingChange().application().get().id());
- tester.assertRunning(instanceId, JobType.systemTest);
- tester.assertRunning(instanceId, JobType.stagingTest);
+ assertTrue(app1.application().outstandingChange().hasTargets());
+ assertEquals("1.0.2-cafed00d", app1.application().outstandingChange().application().get().id());
+ app1.assertRunning(JobType.systemTest);
+ app1.assertRunning(JobType.stagingTest);
assertEquals(2, tester.jobs().active().size());
deployer.maintain();
- tester.deploymentTrigger().triggerReadyJobs();
+ tester.triggerJobs();
assertEquals("No effect as job is in progress", 2, tester.jobs().active().size());
- assertEquals("1.0.2-cafed00d", tester.application(app1.id()).outstandingChange().application().get().id());
+ assertEquals("1.0.2-cafed00d", app1.application().outstandingChange().application().get().id());
- tester.runJob(instanceId, JobType.systemTest);
- tester.runJob(instanceId, JobType.stagingTest);
- tester.runJob(instanceId, JobType.productionUsWest1);
- tester.runJob(instanceId, JobType.systemTest);
- tester.runJob(instanceId, JobType.stagingTest);
+ app1.runJob(JobType.systemTest).runJob(JobType.stagingTest).runJob(JobType.productionUsWest1)
+ .runJob(JobType.stagingTest).runJob(JobType.systemTest);
assertEquals("Upgrade done", 0, tester.jobs().active().size());
deployer.maintain();
- tester.deploymentTrigger().triggerReadyJobs();
- assertEquals("1.0.2-cafed00d", tester.application(app1.id()).change().application().get().id());
+ tester.triggerJobs();
+ assertEquals("1.0.2-cafed00d", app1.application().change().application().get().id());
List<Run> runs = tester.jobs().active();
assertEquals(1, runs.size());
- tester.assertRunning(instanceId, JobType.productionUsWest1);
- assertFalse(tester.application(app1.id()).outstandingChange().hasTargets());
+ app1.assertRunning(JobType.productionUsWest1);
+ assertFalse(app1.application().outstandingChange().hasTargets());
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java
index daf1a4c2ea7..8e3a3b8d727 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java
@@ -33,9 +33,7 @@ import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobTy
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.stagingTest;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.systemTest;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud.Status.FAILURE;
-import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTester.instanceId;
import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.applicationPackage;
-import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTester.testerId;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.deploymentFailed;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.installationFailed;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.running;
@@ -51,60 +49,59 @@ public class JobControllerApiHandlerHelperTest {
@Test
public void testResponses() {
DeploymentTester tester = new DeploymentTester();
+ var app = tester.newDeploymentContext();
tester.clock().setInstant(Instant.EPOCH);
// Revision 1 gets deployed everywhere.
- ApplicationVersion revision1 = tester.newSubmission();
- tester.deployNewSubmission(revision1);
+ app.submit().deploy();
+ ApplicationVersion revision1 = app.lastSubmission().get();
assertEquals(1000, tester.application().projectId().getAsLong());
tester.clock().advance(Duration.ofMillis(1000));
// Revision 2 gets deployed everywhere except in us-east-3.
- ApplicationVersion revision2 = tester.newSubmission();
- tester.runJob(systemTest);
- tester.runJob(stagingTest);
- tester.runJob(productionUsCentral1);
+ ApplicationVersion revision2 = app.submit().lastSubmission().get();
+ app.runJob(systemTest);
+ app.runJob(stagingTest);
+ app.runJob(productionUsCentral1);
tester.triggerJobs();
// us-east-3 eats the deployment failure and fails before deployment, while us-west-1 fails after.
tester.configServer().throwOnNextPrepare(new ConfigServerException(URI.create("url"), "ERROR!", INVALID_APPLICATION_PACKAGE, null));
tester.runner().run();
- assertEquals(deploymentFailed, tester.jobs().last(instanceId, productionUsEast3).get().status());
+ assertEquals(deploymentFailed, tester.jobs().last(app.instanceId(), productionUsEast3).get().status());
ZoneId usWest1 = productionUsWest1.zone(tester.controller().system());
- tester.configServer().convergeServices(instanceId, usWest1);
- tester.configServer().convergeServices(testerId.id(), usWest1);
- tester.setEndpoints(instanceId, usWest1);
- tester.setEndpoints(testerId.id(), usWest1);
+ tester.configServer().convergeServices(app.instanceId(), usWest1);
+ tester.configServer().convergeServices(app.testerId().id(), usWest1);
+ tester.setEndpoints(app.instanceId(), usWest1);
+ tester.setEndpoints(app.testerId().id(), usWest1);
tester.runner().run();
tester.cloud().set(FAILURE);
tester.runner().run();
- assertEquals(testFailure, tester.jobs().last(instanceId, productionUsWest1).get().status());
- assertEquals(revision2, tester.instance().deployments().get(productionUsCentral1.zone(tester.controller().system())).applicationVersion());
- assertEquals(revision1, tester.instance().deployments().get(productionUsEast3.zone(tester.controller().system())).applicationVersion());
- assertEquals(revision2, tester.instance().deployments().get(productionUsWest1.zone(tester.controller().system())).applicationVersion());
+ assertEquals(testFailure, tester.jobs().last(app.instanceId(), productionUsWest1).get().status());
+ assertEquals(revision2, app.deployment(productionUsCentral1.zone(tester.controller().system())).applicationVersion());
+ assertEquals(revision1, app.deployment(productionUsEast3.zone(tester.controller().system())).applicationVersion());
+ assertEquals(revision2, app.deployment(productionUsWest1.zone(tester.controller().system())).applicationVersion());
tester.clock().advance(Duration.ofMillis(1000));
// Revision 3 starts.
- tester.newSubmission();
- tester.runJob(systemTest);
- tester.runJob(stagingTest);
- tester.triggerJobs(); // Starts a run for us-central-1.
- tester.triggerJobs(); // Starts a new staging test run.
+ app.submit()
+ .runJob(systemTest).runJob(stagingTest);
+ tester.triggerJobs(); // Starts runs for us-central-1 and a new staging test run.
tester.runner().run();
- assertEquals(running, tester.jobs().last(instanceId, productionUsCentral1).get().status());
- assertEquals(running, tester.jobs().last(instanceId, stagingTest).get().status());
+ assertEquals(running, tester.jobs().last(app.instanceId(), productionUsCentral1).get().status());
+ assertEquals(running, tester.jobs().last(app.instanceId(), stagingTest).get().status());
- // Staging is expired, and the job fails and won't be retried immediately.
- tester.controller().applications().deactivate(instanceId, stagingTest.zone(tester.controller().system()));
+ // Staging deployment expires, the job fails, and won't be retried immediately.
+ tester.controller().applications().deactivate(app.instanceId(), stagingTest.zone(tester.controller().system()));
tester.runner().run();
- assertEquals(installationFailed, tester.jobs().last(instanceId, stagingTest).get().status());
+ assertEquals(installationFailed, tester.jobs().last(app.instanceId(), stagingTest).get().status());
tester.clock().advance(Duration.ofMillis(100_000)); // More than the minute within which there are immediate retries.
tester.triggerJobs();
- assertEquals(installationFailed, tester.jobs().last(instanceId, stagingTest).get().status());
+ assertEquals(installationFailed, tester.jobs().last(app.instanceId(), stagingTest).get().status());
// System upgrades to a new version, which won't yet start.
Version platform = new Version("7.1");
@@ -117,36 +114,38 @@ public class JobControllerApiHandlerHelperTest {
// Only us-east-3 is verified, on revision1.
// staging-test has 4 runs: one success without sources on revision1, one success from revision1 to revision2,
// one success from revision2 to revision3 and one failure from revision1 to revision3.
- assertResponse(JobControllerApiHandlerHelper.runResponse(tester.jobs().runs(instanceId, stagingTest), URI.create("https://some.url:43/root")), "staging-runs.json");
- assertResponse(JobControllerApiHandlerHelper.runDetailsResponse(tester.jobs(), tester.jobs().last(instanceId, productionUsEast3).get().id(), "0"), "us-east-3-log-without-first.json");
- assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.controller(), instanceId, URI.create("https://some.url:43/root/")), "overview.json");
+ assertResponse(JobControllerApiHandlerHelper.runResponse(tester.jobs().runs(app.instanceId(), stagingTest), URI.create("https://some.url:43/root")), "staging-runs.json");
+ assertResponse(JobControllerApiHandlerHelper.runDetailsResponse(tester.jobs(), tester.jobs().last(app.instanceId(), productionUsEast3).get().id(), "0"), "us-east-3-log-without-first.json");
+ assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.controller(), app.instanceId(), URI.create("https://some.url:43/root/")), "overview.json");
- tester.runJob(instanceId, JobType.devAwsUsEast2a, applicationPackage);
- assertResponse(JobControllerApiHandlerHelper.runResponse(tester.jobs().runs(instanceId, devAwsUsEast2a), URI.create("https://some.url:43/root")), "dev-aws-us-east-2a-runs.json");
+ app.runJob(devAwsUsEast2a, applicationPackage);
+ assertResponse(JobControllerApiHandlerHelper.runResponse(tester.jobs().runs(app.instanceId(), devAwsUsEast2a), URI.create("https://some.url:43/root")), "dev-aws-us-east-2a-runs.json");
}
@Test
public void testDevResponses() {
DeploymentTester tester = new DeploymentTester();
+ var app = tester.newDeploymentContext();
tester.clock().setInstant(Instant.EPOCH);
ZoneId zone = JobType.devUsEast1.zone(tester.controller().system());
- tester.jobs().deploy(instanceId, JobType.devUsEast1, Optional.empty(), applicationPackage);
+ tester.jobs().deploy(app.instanceId(), JobType.devUsEast1, Optional.empty(), applicationPackage);
tester.configServer().setLogStream("1554970337.935104\t17491290-v6-1.ostk.bm2.prod.ne1.yahoo.com\t5480\tcontainer\tstdout\tinfo\tERROR: Bundle canary-application [71] Unable to get module class path. (java.lang.NullPointerException)\n");
- assertResponse(JobControllerApiHandlerHelper.runDetailsResponse(tester.jobs(), tester.jobs().last(instanceId, devUsEast1).get().id(), null), "dev-us-east-1-log-first-part.json");
+ assertResponse(JobControllerApiHandlerHelper.runDetailsResponse(tester.jobs(), tester.jobs().last(app.instanceId(), devUsEast1).get().id(), null), "dev-us-east-1-log-first-part.json");
tester.configServer().setLogStream("Nope, this won't be logged");
- tester.configServer().convergeServices(instanceId, zone);
- tester.setEndpoints(instanceId, zone);
+ tester.configServer().convergeServices(app.instanceId(), zone);
+ tester.setEndpoints(app.instanceId(), zone);
tester.runner().run();
- assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.controller(), instanceId, URI.create("https://some.url:43/root")), "dev-overview.json");
- assertResponse(JobControllerApiHandlerHelper.runDetailsResponse(tester.jobs(), tester.jobs().last(instanceId, devUsEast1).get().id(), "9"), "dev-us-east-1-log-second-part.json");
+ assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.controller(), app.instanceId(), URI.create("https://some.url:43/root")), "dev-overview.json");
+ assertResponse(JobControllerApiHandlerHelper.runDetailsResponse(tester.jobs(), tester.jobs().last(app.instanceId(), devUsEast1).get().id(), "9"), "dev-us-east-1-log-second-part.json");
}
@Test
public void testResponsesWithDirectDeployment() {
var tester = new DeploymentTester();
+ var app = tester.newDeploymentContext();
tester.clock().setInstant(Instant.EPOCH);
var region = "us-west-1";
var applicationPackage = new ApplicationPackageBuilder().region(region).build();
@@ -155,7 +154,7 @@ public class JobControllerApiHandlerHelperTest {
Optional.of(applicationPackage),
new DeployOptions(true, Optional.empty(),
false, false));
- assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.controller(), instanceId, URI.create("https://some.url:43/root/")),
+ assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.controller(), app.instanceId(), URI.create("https://some.url:43/root/")),
"jobs-direct-deployment.json");
}