aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment
diff options
context:
space:
mode:
Diffstat (limited to 'controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment')
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BuildJob.java7
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java44
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java30
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java48
4 files changed, 47 insertions, 82 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BuildJob.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BuildJob.java
index d1303c4a7ed..63d84926144 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BuildJob.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BuildJob.java
@@ -17,13 +17,6 @@ import java.util.function.Consumer;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.component;
-/**
- * Create a build job for testing purposes. In most cases this should be constructed by calling
- * {@link DeploymentTester#jobCompletion(JobType)} or {@link ContainerControllerTester#jobCompletion(JobType)}.
- *
- * @author mpolden
- */
-
public class BuildJob {
public static final long defaultBuildNumber = 42;
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java
index 09d93a5f857..38c9b6e3e49 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTriggerTest.java
@@ -104,12 +104,13 @@ public class DeploymentTriggerTest {
assertEquals("Job is not triggered when no projectId is present", 0, tester.jobs().active().size());
}
+ /*
@Test
@Ignore
// TODO jonmv: Re-enable, but changed, when instances are orchestrated.
public void testIndependentInstances() {
- Application app1 = tester.tester().createApplication("instance1", "app", "tenant", 1, 1L);
- Application app2 = tester.tester().createApplication("instance2", "app", "tenant", 2, 1L);
+ var app1 = tester.tester().createApplication("instance1", "app", "tenant", 1, 1L);
+ var app2 = tester.tester().createApplication("instance2", "app", "tenant", 2, 1L);
Instance instance1 = tester.tester().instance(app1.id().instance(InstanceName.from("instance1")));
Instance instance2 = tester.tester().instance(app2.id().instance(InstanceName.from("instance2")));
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
@@ -147,6 +148,7 @@ public class DeploymentTriggerTest {
assertEquals(newVersion, instance1Version);
assertEquals(version, instance2Version);
}
+ */
@Test
public void abortsJobsOnNewApplicationChange() {
@@ -201,11 +203,11 @@ public class DeploymentTriggerTest {
// Test jobs pass
app.runJob(systemTest).runJob(stagingTest);
- tester.tester().deploymentTrigger().triggerReadyJobs();
+ tester.triggerJobs();
// No jobs have started yet, as 30 seconds have not yet passed.
assertEquals(0, tester.jobs().active().size());
- tester.tester().clock().advance(Duration.ofSeconds(30));
+ tester.clock().advance(Duration.ofSeconds(30));
tester.triggerJobs();
// 30 seconds later, the first jobs may trigger.
@@ -213,7 +215,7 @@ public class DeploymentTriggerTest {
app.assertRunning(productionUsWest1);
// 3 minutes pass, delayed trigger does nothing as us-west-1 is still in progress
- tester.tester().clock().advance(Duration.ofMinutes(3));
+ tester.clock().advance(Duration.ofMinutes(3));
tester.triggerJobs();
assertEquals(1, tester.jobs().active().size());
app.assertRunning(productionUsWest1);
@@ -226,18 +228,18 @@ public class DeploymentTriggerTest {
assertTrue("No more jobs triggered at this time", tester.jobs().active().isEmpty());
// 3 minutes pass, us-central-1 is still not triggered
- tester.tester().clock().advance(Duration.ofMinutes(3));
+ tester.clock().advance(Duration.ofMinutes(3));
tester.triggerJobs();
assertTrue("No more jobs triggered at this time", tester.jobs().active().isEmpty());
// 4 minutes pass, us-central-1 is triggered
- tester.tester().clock().advance(Duration.ofMinutes(1));
+ tester.clock().advance(Duration.ofMinutes(1));
tester.triggerJobs();
app.runJob(productionUsCentral1);
assertTrue("All jobs consumed", tester.jobs().active().isEmpty());
// Delayed trigger job runs again, with nothing to trigger
- tester.tester().clock().advance(Duration.ofMinutes(10));
+ tester.clock().advance(Duration.ofMinutes(10));
tester.triggerJobs();
assertTrue("All jobs consumed", tester.jobs().active().isEmpty());
}
@@ -423,15 +425,15 @@ public class DeploymentTriggerTest {
app.assertNotRunning(productionUsWest1);
// us-west-1 triggers when no longer paused, but does not retry when paused again.
- tester.tester().clock().advance(Duration.ofMillis(1500));
+ tester.clock().advance(Duration.ofMillis(1500));
tester.triggerJobs();
app.assertRunning(productionUsWest1);
- tester.deploymentTrigger().pauseJob(app.instanceId(), productionUsWest1, tester.tester().clock().instant().plus(Duration.ofSeconds(1)));
+ tester.deploymentTrigger().pauseJob(app.instanceId(), productionUsWest1, tester.clock().instant().plus(Duration.ofSeconds(1)));
app.failDeployment(productionUsWest1);
tester.triggerJobs();
app.assertNotRunning(productionUsWest1);
- tester.tester().clock().advance(Duration.ofMillis(1000));
+ tester.clock().advance(Duration.ofMillis(1000));
tester.triggerJobs();
app.runJob(productionUsWest1);
@@ -466,7 +468,7 @@ public class DeploymentTriggerTest {
assertEquals(Change.of(appVersion1), app.application().change());
// Now cancel the change as is done through the web API.
- tester.tester().deploymentTrigger().cancelChange(app.application().id(), ALL);
+ tester.deploymentTrigger().cancelChange(app.application().id(), ALL);
assertEquals(Change.empty(), app.application().change());
// A new version is released, which should now deploy the currently deployed application version to avoid downgrades.
@@ -681,13 +683,13 @@ public class DeploymentTriggerTest {
initialFailure, app.instance().deploymentJobs().jobStatus().get(systemTest).firstFailing().get().at());
// Failure again -- failingSince should remain the same
- tester.tester().clock().advance(Duration.ofMillis(1000));
+ tester.clock().advance(Duration.ofMillis(1000));
app.failDeployment(systemTest);
assertEquals("Failure age is right at second consecutive failure",
initialFailure, app.instance().deploymentJobs().jobStatus().get(systemTest).firstFailing().get().at());
// Success resets failingSince
- tester.tester().clock().advance(Duration.ofMillis(1000));
+ tester.clock().advance(Duration.ofMillis(1000));
app.runJob(systemTest);
assertFalse(app.instance().deploymentJobs().jobStatus().get(systemTest).firstFailing().isPresent());
@@ -696,8 +698,8 @@ public class DeploymentTriggerTest {
// Two repeated failures again.
// Initial failure
- tester.tester().clock().advance(Duration.ofMillis(1000));
- initialFailure = tester.tester().clock().instant().truncatedTo(MILLIS);
+ tester.clock().advance(Duration.ofMillis(1000));
+ initialFailure = tester.clock().instant().truncatedTo(MILLIS);
app.submit(applicationPackage);
app.failDeployment(systemTest);
@@ -705,7 +707,7 @@ public class DeploymentTriggerTest {
initialFailure, app.instance().deploymentJobs().jobStatus().get(systemTest).firstFailing().get().at());
// Failure again -- failingSince should remain the same
- tester.tester().clock().advance(Duration.ofMillis(1000));
+ tester.clock().advance(Duration.ofMillis(1000));
app.failDeployment(systemTest);
assertEquals("Failure age is right at second consecutive failure",
initialFailure, app.instance().deploymentJobs().jobStatus().get(systemTest).firstFailing().get().at());
@@ -767,10 +769,10 @@ public class DeploymentTriggerTest {
// all applications: system-test completes successfully with some time in between, to determine trigger order.
app2.runJob(systemTest);
- tester.tester().clock().advance(Duration.ofMinutes(1));
+ tester.clock().advance(Duration.ofMinutes(1));
app1.runJob(systemTest);
- tester.tester().clock().advance(Duration.ofMinutes(1));
+ tester.clock().advance(Duration.ofMinutes(1));
app3.runJob(systemTest);
@@ -879,8 +881,8 @@ public class DeploymentTriggerTest {
.build();
var app = tester.deploymentContext().submit(applicationPackage); // TODO jonmv: support instances in deployment context>
app.deploy();
- assertEquals(2, tester.tester().application(appId).instances().size());
- assertEquals(2, tester.tester().application(appId).productionDeployments().values().stream()
+ assertEquals(2, app.application().instances().size());
+ assertEquals(2, app.application().productionDeployments().values().stream()
.mapToInt(Collection::size)
.sum());
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java
index fc38d9d1f52..d257392298e 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalDeploymentTester.java
@@ -61,44 +61,46 @@ public class InternalDeploymentTester {
public static final String athenzDomain = "domain";
private final DeploymentContext defaultContext;
- private final DeploymentTester tester;
+ private final ControllerTester tester;
private final JobController jobs;
private final RoutingGeneratorMock routing;
private final MockTesterCloud cloud;
private final JobRunner runner;
+ private final Upgrader upgrader;
private final ReadyJobsTrigger readyJobsTrigger;
private final OutstandingChangeDeployer outstandingChangeDeployer;
private final NameServiceDispatcher nameServiceDispatcher;
- public DeploymentTester tester() { return tester; }
public JobController jobs() { return jobs; }
public RoutingGeneratorMock routing() { return routing; }
public MockTesterCloud cloud() { return cloud; }
public JobRunner runner() { return runner; }
public ConfigServerMock configServer() { return tester.configServer(); }
public Controller controller() { return tester.controller(); }
- public DeploymentTrigger deploymentTrigger() { return tester.deploymentTrigger(); }
- public ControllerTester controllerTester() { return tester.controllerTester(); }
- public Upgrader upgrader() { return tester.upgrader(); }
- public ApplicationController applications() { return tester.applications(); }
+ public DeploymentTrigger deploymentTrigger() { return applications().deploymentTrigger(); }
+ public ControllerTester controllerTester() { return tester; }
+ public Upgrader upgrader() { return upgrader; }
+ public ApplicationController applications() { return tester.controller().applications(); }
public ManualClock clock() { return tester.clock(); }
- public Application application() { return tester.application(appId); }
- public Application application(TenantAndApplicationId id ) { return tester.application(id); }
- public Instance instance() { return tester.instance(instanceId); }
- public Instance instance(ApplicationId id) { return tester.instance(id); }
+ public Application application() { return application(appId); }
+ public Application application(TenantAndApplicationId id ) { return applications().requireApplication(id); }
+ public Instance instance() { return instance(instanceId); }
+ public Instance instance(ApplicationId id) { return applications().requireInstance(id); }
public InternalDeploymentTester() {
this(new ControllerTester());
}
public InternalDeploymentTester(ControllerTester controllerTester) {
- tester = new DeploymentTester(controllerTester);
+ tester = controllerTester;
jobs = tester.controller().jobController();
- routing = tester.controllerTester().serviceRegistry().routingGeneratorMock();
+ routing = tester.serviceRegistry().routingGeneratorMock();
cloud = (MockTesterCloud) tester.controller().jobController().cloud();
var jobControl = new JobControl(tester.controller().curator());
runner = new JobRunner(tester.controller(), Duration.ofDays(1), jobControl,
JobRunnerTest.inThreadExecutor(), new InternalStepRunner(tester.controller()));
+ upgrader = new Upgrader(tester.controller(), maintenanceInterval, jobControl, tester.curator());
+ upgrader.setUpgradesPerMinute(1); // Anything that makes it at least one for any maintenance period is fine.
readyJobsTrigger = new ReadyJobsTrigger(tester.controller(), maintenanceInterval, jobControl);
outstandingChangeDeployer = new OutstandingChangeDeployer(tester.controller(), maintenanceInterval, jobControl);
nameServiceDispatcher = new NameServiceDispatcher(tester.controller(), maintenanceInterval, jobControl,
@@ -109,10 +111,10 @@ public class InternalDeploymentTester {
// Get deployment job logs to stderr.
Logger.getLogger("").setLevel(LogLevel.DEBUG);
Logger.getLogger(InternalStepRunner.class.getName()).setLevel(LogLevel.DEBUG);
- tester.controllerTester().configureDefaultLogHandler(handler -> handler.setLevel(LogLevel.DEBUG));
+ tester.configureDefaultLogHandler(handler -> handler.setLevel(LogLevel.DEBUG));
// Mock Athenz domain to allow launch of service
- AthenzDbMock.Domain domain = tester.controllerTester().athenzDb().getOrCreateDomain(new com.yahoo.vespa.athenz.api.AthenzDomain(ATHENZ_DOMAIN));
+ AthenzDbMock.Domain domain = tester.athenzDb().getOrCreateDomain(new com.yahoo.vespa.athenz.api.AthenzDomain(ATHENZ_DOMAIN));
domain.services.put(ATHENZ_SERVICE, new AthenzDbMock.Service(true));
}
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 fc73af6acf7..57ec2d3130d 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
@@ -78,44 +78,12 @@ public class InternalStepRunnerTest {
}
private SystemName system() {
- return tester.tester().controller().system();
+ return tester.controller().system();
}
@Test
public void canRegisterAndRunDirectly() {
- tester.deployNewSubmission(tester.newSubmission());
-
- Version version = new Version("7.1");
- tester.tester().upgradeSystem(version);
- tester.deployNewPlatform(version);
- }
-
- @Test
- public void canSwitchFromScrewdriverAndBackAgain() {
- // Deploys a default application package with default build number.
- tester.tester().deployCompletely(tester.application(), DeploymentContext.applicationPackage);
- tester.setEndpoints(instanceId, JobType.productionUsCentral1.zone(system()));
- tester.setEndpoints(instanceId, JobType.productionUsWest1.zone(system()));
- tester.setEndpoints(instanceId, JobType.productionUsEast3.zone(system()));
-
- // Let application have an ongoing upgrade when it switches (but kill the jobs, as the tester assumes they aren't running).
- tester.tester().upgradeSystem(new Version("7.1"));
- tester.tester().buildService().clear();
-
- tester.deployNewSubmission(tester.newSubmission());
- tester.deployNewSubmission(tester.newSubmission());
-
- Version version = new Version("7.2");
- tester.tester().upgradeSystem(version);
- tester.deployNewPlatform(version);
-
- tester.jobs().unregister(appId);
- try {
- tester.tester().deployCompletely(tester.application(), DeploymentContext.applicationPackage, BuildJob.defaultBuildNumber + 1);
- throw new IllegalStateException("Component job should get even again with build numbers to produce a change.");
- }
- catch (AssertionError expected) { }
- tester.tester().deployCompletely(tester.application(), DeploymentContext.applicationPackage, BuildJob.defaultBuildNumber + 2);
+ tester.deploymentContext().submit().deploy();
}
@Test
@@ -247,13 +215,13 @@ public class InternalStepRunnerTest {
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.tester().controller().curator().writeRoutingPolicies(instanceId, Set.of(new RoutingPolicy(instanceId,
+ tester.controller().curator().writeRoutingPolicies(instanceId, Set.of(new RoutingPolicy(instanceId,
ClusterSpec.Id.from("default"),
JobType.systemTest.zone(system()),
HostName.from("host"),
Optional.empty(),
emptySet())));
- tester.tester().controller().curator().writeRoutingPolicies(testerId.id(), Set.of(new RoutingPolicy(testerId.id(),
+ tester.controller().curator().writeRoutingPolicies(testerId.id(), Set.of(new RoutingPolicy(testerId.id(),
ClusterSpec.Id.from("default"),
JobType.systemTest.zone(system()),
HostName.from("host"),
@@ -367,7 +335,7 @@ public class InternalStepRunnerTest {
tester.configServer().setVersion(instanceId, zone, version);
tester.runner().run();
assertEquals(1, tester.jobs().active().size());
- assertEquals(version, tester.tester().instance(instanceId).deployments().get(zone).version());
+ assertEquals(version, tester.instance(instanceId).deployments().get(zone).version());
try {
tester.jobs().deploy(instanceId, JobType.productionApNortheast1, Optional.empty(), applicationPackage);
@@ -381,7 +349,7 @@ public class InternalStepRunnerTest {
tester.startSystemTestTests();
tester.cloud().set(TesterCloud.Status.NOT_STARTED);
tester.runner().run();
- MockMailer mailer = ((MockMailer) tester.tester().controller().serviceRegistry().mailer());
+ MockMailer mailer = ((MockMailer) tester.controller().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());
@@ -415,8 +383,8 @@ public class InternalStepRunnerTest {
@Test
public void certificateTimeoutAbortsJob() {
- tester.tester().controllerTester().zoneRegistry().setSystemName(SystemName.PublicCd);
- tester.tester().controllerTester().zoneRegistry().setZones(ZoneApiMock.fromId("prod.aws-us-east-1c"));
+ tester.controllerTester().zoneRegistry().setSystemName(SystemName.PublicCd);
+ tester.controllerTester().zoneRegistry().setZones(ZoneApiMock.fromId("prod.aws-us-east-1c"));
RunId id = tester.startSystemTestTests();
List<X509Certificate> trusted = new ArrayList<>(publicCdApplicationPackage.trustedCertificates());