diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-07-28 13:57:12 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-07-28 14:51:35 +0200 |
commit | 1ab2f1571b42a4b7a3eecbcdb568c51ca560be67 (patch) | |
tree | 43376b333982687b3bf6db73d00ef1d83b90ca8a /controller-server | |
parent | 93b96e176b33aceb5c830be0da6cf1ecbdf93fe7 (diff) |
Convert controller-server to junit5
Diffstat (limited to 'controller-server')
117 files changed, 3004 insertions, 2973 deletions
diff --git a/controller-server/pom.xml b/controller-server/pom.xml index 773d63202b6..3e889d926b1 100644 --- a/controller-server/pom.xml +++ b/controller-server/pom.xml @@ -169,12 +169,6 @@ <!-- test --> <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <scope>test</scope> - </dependency> - - <dependency> <groupId>com.yahoo.vespa</groupId> <artifactId>application</artifactId> <version>${project.version}</version> @@ -186,11 +180,25 @@ <artifactId>testutil</artifactId> <version>${project.version}</version> <scope>test</scope> + <exclusions> + <exclusion> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </exclusion> + <exclusion> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-core</artifactId> + </exclusion> + <exclusion> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-library</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>com.github.tomakehurst</groupId> - <artifactId>wiremock-standalone</artifactId> + <artifactId>wiremock-jre8-standalone</artifactId> <scope>test</scope> </dependency> @@ -199,6 +207,16 @@ <artifactId>assertj-core</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <scope>test</scope> + </dependency> <dependency> <groupId>org.mockito</groupId> 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 a8c18957773..b5177cd1d3e 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 @@ -49,7 +49,7 @@ import com.yahoo.vespa.hosted.controller.routing.context.DeploymentRoutingContex import com.yahoo.vespa.hosted.controller.routing.rotation.RotationId; import com.yahoo.vespa.hosted.controller.routing.rotation.RotationLock; import com.yahoo.vespa.hosted.rotation.config.RotationsConfig; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -69,13 +69,13 @@ import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.pro import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.productionUsWest1; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.stagingTest; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.systemTest; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author bratseth @@ -86,7 +86,7 @@ public class ControllerTest { private final DeploymentTester tester = new DeploymentTester(); @Test - public void testDeployment() { + void testDeployment() { // Setup system ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") @@ -97,14 +97,14 @@ public class ControllerTest { Version version1 = tester.configServer().initialVersion(); var context = tester.newDeploymentContext(); context.submit(applicationPackage); - assertEquals("Application version is known from completion of initial job", - ApplicationVersion.from(RevisionId.forProduction(1), DeploymentContext.defaultSourceRevision, "a@b", new Version("6.1"), Instant.ofEpochSecond(1)), - context.application().revisions().get(context.instance().change().revision().get())); + assertEquals(ApplicationVersion.from(RevisionId.forProduction(1), DeploymentContext.defaultSourceRevision, "a@b", new Version("6.1"), Instant.ofEpochSecond(1)), + context.application().revisions().get(context.instance().change().revision().get()), + "Application version is known from completion of initial job"); context.runJob(systemTest); context.runJob(stagingTest); RevisionId applicationVersion = context.instance().change().revision().get(); - assertTrue("Application version has been set during deployment", applicationVersion.isProduction()); + assertTrue(applicationVersion.isProduction(), "Application version has been set during deployment"); tester.triggerJobs(); // Causes first deployment job to be triggered @@ -171,11 +171,11 @@ public class ControllerTest { } catch (IllegalArgumentException e) { assertEquals("deployment-removal: application 'tenant.application' is deployed in us-west-1, but does not include this zone in deployment.xml. " + - ValidationOverrides.toAllowMessage(ValidationId.deploymentRemoval), - e.getMessage()); + ValidationOverrides.toAllowMessage(ValidationId.deploymentRemoval), + e.getMessage()); } - assertNotNull("Zone was not removed", - context.instance().deployments().get(productionUsWest1.zone())); + assertNotNull(context.instance().deployments().get(productionUsWest1.zone()), + "Zone was not removed"); // prod zone removal is allowed with override applicationPackage = new ApplicationPackageBuilder() @@ -184,14 +184,14 @@ public class ControllerTest { .region("us-east-3") .build(); context.submit(applicationPackage); - assertNull("Zone was removed", - context.instance().deployments().get(productionUsWest1.zone())); - assertNull("Deployment job was removed", context.instanceJobs().get(productionUsWest1)); + assertNull(context.instance().deployments().get(productionUsWest1.zone()), + "Zone was removed"); + assertNull(context.instanceJobs().get(productionUsWest1), "Deployment job was removed"); // Submission has stored application meta. assertNotNull(tester.controllerTester().serviceRegistry().applicationStore() - .getMeta(context.instanceId()) - .get(tester.clock().instant())); + .getMeta(context.instanceId()) + .get(tester.clock().instant())); // Meta data tombstone placed on delete tester.clock().advance(Duration.ofSeconds(1)); @@ -199,18 +199,18 @@ public class ControllerTest { tester.clock().advance(Duration.ofSeconds(1)); context.submit(ApplicationPackage.deploymentRemoval()); tester.applications().deleteApplication(context.application().id(), - tester.controllerTester().credentialsFor(context.instanceId().tenant())); + tester.controllerTester().credentialsFor(context.instanceId().tenant())); assertArrayEquals(new byte[0], - tester.controllerTester().serviceRegistry().applicationStore() - .getMeta(context.instanceId()) - .get(tester.clock().instant())); + tester.controllerTester().serviceRegistry().applicationStore() + .getMeta(context.instanceId()) + .get(tester.clock().instant())); assertNull(tester.controllerTester().serviceRegistry().applicationStore() - .getMeta(context.deploymentIdIn(productionUsWest1.zone()))); + .getMeta(context.deploymentIdIn(productionUsWest1.zone()))); } @Test - public void testGlobalRotationStatus() { + void testGlobalRotationStatus() { var context = tester.newDeploymentContext(); var zone1 = ZoneId.from("prod", "us-west-1"); var zone2 = ZoneId.from("prod", "us-east-3"); @@ -238,7 +238,7 @@ public class ControllerTest { } @Test - public void testDnsUpdatesForGlobalEndpoint() { + void testDnsUpdatesForGlobalEndpoint() { var betaContext = tester.newDeploymentContext("tenant1", "app1", "beta"); var defaultContext = tester.newDeploymentContext("tenant1", "app1", "default"); @@ -251,23 +251,23 @@ public class ControllerTest { .region(usCentral.region()) // Two deployments should result in each DNS alias being registered once .build(); tester.controllerTester().zoneRegistry().setRoutingMethod(List.of(ZoneApiMock.from(usWest), ZoneApiMock.from(usCentral)), - RoutingMethod.sharedLayer4); + RoutingMethod.sharedLayer4); betaContext.submit(applicationPackage).deploy(); { // Expected rotation names are passed to beta instance deployments Collection<Deployment> betaDeployments = betaContext.instance().deployments().values(); assertFalse(betaDeployments.isEmpty()); Set<ContainerEndpoint> containerEndpoints = Set.of(new ContainerEndpoint("foo", - "global", - List.of("beta.app1.tenant1.global.vespa.oath.cloud", - "rotation-id-01"), - OptionalInt.empty(), - RoutingMethod.sharedLayer4)); + "global", + List.of("beta.app1.tenant1.global.vespa.oath.cloud", + "rotation-id-01"), + OptionalInt.empty(), + RoutingMethod.sharedLayer4)); for (Deployment deployment : betaDeployments) { assertEquals(containerEndpoints, - tester.configServer().containerEndpoints() - .get(betaContext.deploymentIdIn(deployment.zone()))); + tester.configServer().containerEndpoints() + .get(betaContext.deploymentIdIn(deployment.zone()))); } betaContext.flushDnsUpdates(); } @@ -276,20 +276,20 @@ public class ControllerTest { Collection<Deployment> defaultDeployments = defaultContext.instance().deployments().values(); assertFalse(defaultDeployments.isEmpty()); Set<ContainerEndpoint> containerEndpoints = Set.of(new ContainerEndpoint("foo", - "global", - List.of("app1.tenant1.global.vespa.oath.cloud", - "rotation-id-02"), - OptionalInt.empty(), - RoutingMethod.sharedLayer4)); + "global", + List.of("app1.tenant1.global.vespa.oath.cloud", + "rotation-id-02"), + OptionalInt.empty(), + RoutingMethod.sharedLayer4)); for (Deployment deployment : defaultDeployments) { assertEquals(containerEndpoints, - tester.configServer().containerEndpoints().get(defaultContext.deploymentIdIn(deployment.zone()))); + tester.configServer().containerEndpoints().get(defaultContext.deploymentIdIn(deployment.zone()))); } defaultContext.flushDnsUpdates(); } Map<String, String> rotationCnames = Map.of("beta.app1.tenant1.global.vespa.oath.cloud", "rotation-fqdn-01.", - "app1.tenant1.global.vespa.oath.cloud", "rotation-fqdn-02."); + "app1.tenant1.global.vespa.oath.cloud", "rotation-fqdn-02."); rotationCnames.forEach((cname, data) -> { var record = tester.controllerTester().findCname(cname); assertTrue(record.isPresent()); @@ -298,20 +298,20 @@ public class ControllerTest { }); Map<ApplicationId, Set<String>> globalDnsNamesByInstance = Map.of(betaContext.instanceId(), Set.of("beta.app1.tenant1.global.vespa.oath.cloud"), - defaultContext.instanceId(), Set.of("app1.tenant1.global.vespa.oath.cloud")); + defaultContext.instanceId(), Set.of("app1.tenant1.global.vespa.oath.cloud")); globalDnsNamesByInstance.forEach((instance, dnsNames) -> { Set<String> actualDnsNames = tester.controller().routing().readDeclaredEndpointsOf(instance) - .scope(Endpoint.Scope.global) - .asList().stream() - .map(Endpoint::dnsName) - .collect(Collectors.toSet()); - assertEquals("Global DNS names for " + instance, dnsNames, actualDnsNames); + .scope(Endpoint.Scope.global) + .asList().stream() + .map(Endpoint::dnsName) + .collect(Collectors.toSet()); + assertEquals(dnsNames, actualDnsNames, "Global DNS names for " + instance); }); } @Test - public void testDnsUpdatesForGlobalEndpointLegacySyntax() { + void testDnsUpdatesForGlobalEndpointLegacySyntax() { var context = tester.newDeploymentContext("tenant1", "app1", "default"); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .globalServiceId("foo") @@ -323,10 +323,10 @@ public class ControllerTest { Collection<Deployment> deployments = context.instance().deployments().values(); assertFalse(deployments.isEmpty()); for (Deployment deployment : deployments) { - assertEquals("Rotation names are passed to config server in " + deployment.zone(), - Set.of("rotation-id-01", + assertEquals(Set.of("rotation-id-01", "app1.tenant1.global.vespa.oath.cloud"), - tester.configServer().containerEndpointNames(context.deploymentIdIn(deployment.zone()))); + tester.configServer().containerEndpointNames(context.deploymentIdIn(deployment.zone())), + "Rotation names are passed to config server in " + deployment.zone()); } context.flushDnsUpdates(); assertEquals(1, tester.controllerTester().nameService().records().size()); @@ -337,15 +337,15 @@ public class ControllerTest { assertEquals("rotation-fqdn-01.", record.get().data().asString()); List<String> globalDnsNames = tester.controller().routing().readDeclaredEndpointsOf(context.instanceId()) - .scope(Endpoint.Scope.global) - .sortedBy(Comparator.comparing(Endpoint::dnsName)) - .mapToList(Endpoint::dnsName); + .scope(Endpoint.Scope.global) + .sortedBy(Comparator.comparing(Endpoint::dnsName)) + .mapToList(Endpoint::dnsName); assertEquals(List.of("app1.tenant1.global.vespa.oath.cloud"), - globalDnsNames); + globalDnsNames); } @Test - public void testDnsUpdatesForMultipleGlobalEndpoints() { + void testDnsUpdatesForMultipleGlobalEndpoints() { var context = tester.newDeploymentContext("tenant1", "app1", "default"); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .endpoint("foobar", "qrs", "us-west-1", "us-central-1") // Rotation 01 @@ -368,9 +368,9 @@ public class ControllerTest { var west = Sets.union(notWest, Set.of("rotation-id-04", "west.app1.tenant1.global.vespa.oath.cloud")); for (Deployment deployment : deployments) { - assertEquals("Rotation names are passed to config server in " + deployment.zone(), - ZoneId.from("prod.us-west-1").equals(deployment.zone()) ? west : notWest, - tester.configServer().containerEndpointNames(context.deploymentIdIn(deployment.zone()))); + assertEquals(ZoneId.from("prod.us-west-1").equals(deployment.zone()) ? west : notWest, + tester.configServer().containerEndpointNames(context.deploymentIdIn(deployment.zone())), + "Rotation names are passed to config server in " + deployment.zone()); } context.flushDnsUpdates(); @@ -398,7 +398,7 @@ public class ControllerTest { } @Test - public void testDnsUpdatesForGlobalEndpointChanges() { + void testDnsUpdatesForGlobalEndpointChanges() { var context = tester.newDeploymentContext("tenant1", "app1", "default"); var west = ZoneId.from("prod", "us-west-1"); var central = ZoneId.from("prod", "us-central-1"); @@ -415,10 +415,10 @@ public class ControllerTest { for (var zone : List.of(west, central)) { assertEquals( - "Zone " + zone + " is a member of global endpoint", Set.of("rotation-id-01", "app1.tenant1.global.vespa.oath.cloud"), tester.configServer().containerEndpointNames(context.deploymentIdIn(zone)) - ); + , + "Zone " + zone + " is a member of global endpoint"); } // Application is deployed with an additional endpoint @@ -433,16 +433,16 @@ public class ControllerTest { for (var zone : List.of(west, central)) { assertEquals( - "Zone " + zone + " is a member of global endpoint", Set.of("rotation-id-01", "app1.tenant1.global.vespa.oath.cloud"), tester.configServer().containerEndpointNames(context.deploymentIdIn(zone)) - ); + , + "Zone " + zone + " is a member of global endpoint"); } assertEquals( - "Zone " + east + " is a member of global endpoint", Set.of("rotation-id-02", "east.app1.tenant1.global.vespa.oath.cloud"), tester.configServer().containerEndpointNames(context.deploymentIdIn(east)) - ); + , + "Zone " + east + " is a member of global endpoint"); // Application is deployed with default endpoint pointing to 3/3 zones ApplicationPackage applicationPackage3 = new ApplicationPackageBuilder() @@ -455,13 +455,13 @@ public class ControllerTest { context.submit(applicationPackage3).deploy(); for (var zone : List.of(west, central, east)) { assertEquals( - "Zone " + zone + " is a member of global endpoint", zone.equals(east) ? Set.of("rotation-id-01", "app1.tenant1.global.vespa.oath.cloud", - "rotation-id-02", "east.app1.tenant1.global.vespa.oath.cloud") + "rotation-id-02", "east.app1.tenant1.global.vespa.oath.cloud") : Set.of("rotation-id-01", "app1.tenant1.global.vespa.oath.cloud"), tester.configServer().containerEndpointNames(context.deploymentIdIn(zone)) - ); + , + "Zone " + zone + " is a member of global endpoint"); } // Region is removed from an endpoint without override @@ -477,11 +477,11 @@ public class ControllerTest { fail("Expected exception"); } catch (IllegalArgumentException e) { assertEquals("global-endpoint-change: application 'tenant1.app1' has endpoints " + - "[endpoint 'default' (cluster qrs) -> us-central-1, us-east-3, us-west-1, endpoint 'east' (cluster qrs) -> us-east-3], " + - "but does not include all of these in deployment.xml. Deploying given deployment.xml " + - "will remove [endpoint 'default' (cluster qrs) -> us-central-1, us-east-3, us-west-1] " + - "and add [endpoint 'default' (cluster qrs) -> us-central-1, us-west-1]. " + - ValidationOverrides.toAllowMessage(ValidationId.globalEndpointChange), e.getMessage()); + "[endpoint 'default' (cluster qrs) -> us-central-1, us-east-3, us-west-1, endpoint 'east' (cluster qrs) -> us-east-3], " + + "but does not include all of these in deployment.xml. Deploying given deployment.xml " + + "will remove [endpoint 'default' (cluster qrs) -> us-central-1, us-east-3, us-west-1] " + + "and add [endpoint 'default' (cluster qrs) -> us-central-1, us-west-1]. " + + ValidationOverrides.toAllowMessage(ValidationId.globalEndpointChange), e.getMessage()); } // Entire endpoint is removed without override @@ -496,10 +496,10 @@ public class ControllerTest { fail("Expected exception"); } catch (IllegalArgumentException e) { assertEquals("global-endpoint-change: application 'tenant1.app1' has endpoints " + - "[endpoint 'default' (cluster qrs) -> us-central-1, us-east-3, us-west-1, endpoint 'east' (cluster qrs) -> us-east-3], " + - "but does not include all of these in deployment.xml. Deploying given deployment.xml " + - "will remove [endpoint 'default' (cluster qrs) -> us-central-1, us-east-3, us-west-1]. " + - ValidationOverrides.toAllowMessage(ValidationId.globalEndpointChange), e.getMessage()); + "[endpoint 'default' (cluster qrs) -> us-central-1, us-east-3, us-west-1, endpoint 'east' (cluster qrs) -> us-east-3], " + + "but does not include all of these in deployment.xml. Deploying given deployment.xml " + + "will remove [endpoint 'default' (cluster qrs) -> us-central-1, us-east-3, us-west-1]. " + + ValidationOverrides.toAllowMessage(ValidationId.globalEndpointChange), e.getMessage()); } // ... override is added @@ -514,7 +514,7 @@ public class ControllerTest { } @Test - public void testUnassignRotations() { + void testUnassignRotations() { var context = tester.newDeploymentContext(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .endpoint("default", "qrs", "us-west-1", "us-central-1") @@ -540,7 +540,7 @@ public class ControllerTest { } @Test - public void testDnsUpdatesWithChangeInRotationAssignment() { + void testDnsUpdatesWithChangeInRotationAssignment() { // Application 1 is deployed and deleted String dnsName1 = "app1.tenant1.global.vespa.oath.cloud"; { @@ -567,17 +567,17 @@ public class ControllerTest { .build(); context.submit(applicationPackage); tester.applications().deleteApplication(context.application().id(), - tester.controllerTester().credentialsFor(context.application().id().tenant())); + tester.controllerTester().credentialsFor(context.application().id().tenant())); try (RotationLock lock = tester.controller().routing().rotations().lock()) { - assertTrue("Rotation is unassigned", - tester.controller().routing().rotations().availableRotations(lock) - .containsKey(new RotationId("rotation-id-01"))); + assertTrue(tester.controller().routing().rotations().availableRotations(lock) + .containsKey(new RotationId("rotation-id-01")), + "Rotation is unassigned"); } context.flushDnsUpdates(); // Record is removed Optional<Record> record = tester.controllerTester().findCname(dnsName1); - assertTrue(dnsName1 + " is removed", record.isEmpty()); + assertTrue(record.isEmpty(), dnsName1 + " is removed"); } // Application 2 is deployed and assigned same rotation as application 1 had before deletion @@ -624,7 +624,7 @@ public class ControllerTest { } @Test - public void testDnsUpdatesForApplicationEndpoint() { + void testDnsUpdatesForApplicationEndpoint() { ApplicationId beta = ApplicationId.from("tenant1", "app1", "beta"); ApplicationId main = ApplicationId.from("tenant1", "app1", "main"); var context = tester.newDeploymentContext(beta); @@ -633,14 +633,14 @@ public class ControllerTest { .region("us-west-1") .region("us-east-3") .applicationEndpoint("a", "default", "us-west-1", - Map.of(beta.instance(), 2, - main.instance(), 8)) + Map.of(beta.instance(), 2, + main.instance(), 8)) .applicationEndpoint("b", "default", "us-west-1", - Map.of(beta.instance(), 1, - main.instance(), 1)) + Map.of(beta.instance(), 1, + main.instance(), 1)) .applicationEndpoint("c", "default", "us-east-3", - Map.of(beta.instance(), 4, - main.instance(), 6)) + Map.of(beta.instance(), 4, + main.instance(), 6)) .build(); context.submit(applicationPackage).deploy(); @@ -649,63 +649,63 @@ public class ControllerTest { // Expected container endpoints are passed to each deployment Map<DeploymentId, Map<String, Integer>> deploymentEndpoints = Map.of( new DeploymentId(beta, usWest), Map.of("a.app1.tenant1.us-west-1-r.vespa.oath.cloud", 2, - "b.app1.tenant1.us-west-1-r.vespa.oath.cloud", 1), + "b.app1.tenant1.us-west-1-r.vespa.oath.cloud", 1), new DeploymentId(main, usWest), Map.of("a.app1.tenant1.us-west-1-r.vespa.oath.cloud", 8, - "b.app1.tenant1.us-west-1-r.vespa.oath.cloud", 1), + "b.app1.tenant1.us-west-1-r.vespa.oath.cloud", 1), new DeploymentId(beta, usEast), Map.of("c.app1.tenant1.us-east-3-r.vespa.oath.cloud", 4), new DeploymentId(main, usEast), Map.of("c.app1.tenant1.us-east-3-r.vespa.oath.cloud", 6) ); deploymentEndpoints.forEach((deployment, endpoints) -> { Set<ContainerEndpoint> expected = endpoints.entrySet().stream() - .map(kv -> new ContainerEndpoint("default", "application", - List.of(kv.getKey()), - OptionalInt.of(kv.getValue()), - RoutingMethod.sharedLayer4)) - .collect(Collectors.toSet()); - assertEquals("Endpoint names for " + deployment + " are passed to config server", - expected, - tester.configServer().containerEndpoints().get(deployment)); + .map(kv -> new ContainerEndpoint("default", "application", + List.of(kv.getKey()), + OptionalInt.of(kv.getValue()), + RoutingMethod.sharedLayer4)) + .collect(Collectors.toSet()); + assertEquals(expected, + tester.configServer().containerEndpoints().get(deployment), + "Endpoint names for " + deployment + " are passed to config server"); }); context.flushDnsUpdates(); // DNS records are created for each endpoint Set<Record> records = tester.controllerTester().nameService().records(); assertEquals(Set.of(new Record(Record.Type.CNAME, - RecordName.from("a.app1.tenant1.us-west-1-r.vespa.oath.cloud"), - RecordData.from("vip.prod.us-west-1.")), - new Record(Record.Type.CNAME, - RecordName.from("b.app1.tenant1.us-west-1-r.vespa.oath.cloud"), - RecordData.from("vip.prod.us-west-1.")), - new Record(Record.Type.CNAME, - RecordName.from("c.app1.tenant1.us-east-3-r.vespa.oath.cloud"), - RecordData.from("vip.prod.us-east-3."))), - records); + RecordName.from("a.app1.tenant1.us-west-1-r.vespa.oath.cloud"), + RecordData.from("vip.prod.us-west-1.")), + new Record(Record.Type.CNAME, + RecordName.from("b.app1.tenant1.us-west-1-r.vespa.oath.cloud"), + RecordData.from("vip.prod.us-west-1.")), + new Record(Record.Type.CNAME, + RecordName.from("c.app1.tenant1.us-east-3-r.vespa.oath.cloud"), + RecordData.from("vip.prod.us-east-3."))), + records); List<String> endpointDnsNames = tester.controller().routing().declaredEndpointsOf(context.application()) - .scope(Endpoint.Scope.application) - .mapToList(Endpoint::dnsName); + .scope(Endpoint.Scope.application) + .mapToList(Endpoint::dnsName); assertEquals(List.of("a.app1.tenant1.us-west-1-r.vespa.oath.cloud", - "b.app1.tenant1.us-west-1-r.vespa.oath.cloud", - "c.app1.tenant1.us-east-3-r.vespa.oath.cloud"), - endpointDnsNames); + "b.app1.tenant1.us-west-1-r.vespa.oath.cloud", + "c.app1.tenant1.us-east-3-r.vespa.oath.cloud"), + endpointDnsNames); } @Test - public void testDevDeployment() { + void testDevDeployment() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder().build(); // Create application var context = tester.newDeploymentContext(); ZoneId zone = ZoneId.from("dev", "us-east-1"); tester.controllerTester().zoneRegistry() - .setRoutingMethod(ZoneApiMock.from(zone), RoutingMethod.sharedLayer4); + .setRoutingMethod(ZoneApiMock.from(zone), RoutingMethod.sharedLayer4); // Deploy context.runJob(zone, applicationPackage); - assertTrue("Application deployed and activated", - tester.configServer().application(context.instanceId(), zone).get().activated()); - assertTrue("No job status added", - context.instanceJobs().isEmpty()); - assertEquals("DeploymentSpec is not stored", DeploymentSpec.empty, context.application().deploymentSpec()); + assertTrue(tester.configServer().application(context.instanceId(), zone).get().activated(), + "Application deployed and activated"); + assertTrue(context.instanceJobs().isEmpty(), + "No job status added"); + assertEquals(DeploymentSpec.empty, context.application().deploymentSpec(), "DeploymentSpec is not stored"); // Verify zone supports shared layer 4 and shared routing methods Set<RoutingMethod> routingMethods = tester.controller().routing().readEndpointsOf(context.deploymentIdIn(zone)) @@ -717,20 +717,20 @@ public class ControllerTest { // Deployment has stored application meta. assertNotNull(tester.controllerTester().serviceRegistry().applicationStore() - .getMeta(new DeploymentId(context.instanceId(), zone)) - .get(tester.clock().instant())); + .getMeta(new DeploymentId(context.instanceId(), zone)) + .get(tester.clock().instant())); // Meta data tombstone placed on delete tester.clock().advance(Duration.ofSeconds(1)); tester.controller().applications().deactivate(context.instanceId(), zone); assertArrayEquals(new byte[0], - tester.controllerTester().serviceRegistry().applicationStore() - .getMeta(new DeploymentId(context.instanceId(), zone)) - .get(tester.clock().instant())); + tester.controllerTester().serviceRegistry().applicationStore() + .getMeta(new DeploymentId(context.instanceId(), zone)) + .get(tester.clock().instant())); } @Test - public void testDevDeploymentWithIncompatibleVersions() { + void testDevDeploymentWithIncompatibleVersions() { Version version1 = new Version("7"); Version version2 = new Version("7.5"); Version version3 = new Version("8"); @@ -778,12 +778,12 @@ public class ControllerTest { } @Test - public void testSuspension() { + void testSuspension() { var context = tester.newDeploymentContext(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() - .region("us-west-1") - .region("us-east-3") - .build(); + .region("us-west-1") + .region("us-east-3") + .build(); context.submit(applicationPackage).deploy(); DeploymentId deployment1 = context.deploymentIdIn(ZoneId.from(Environment.prod, RegionName.from("us-west-1"))); @@ -798,7 +798,7 @@ public class ControllerTest { // Application may already have been deleted, or deployment failed without response, test that deleting a // second time will not fail @Test - public void testDeletingApplicationThatHasAlreadyBeenDeleted() { + void testDeletingApplicationThatHasAlreadyBeenDeleted() { var context = tester.newDeploymentContext(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") @@ -811,7 +811,7 @@ public class ControllerTest { } @Test - public void testDeployApplicationWithWarnings() { + void testDeployApplicationWithWarnings() { var context = tester.newDeploymentContext(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") @@ -821,11 +821,11 @@ public class ControllerTest { tester.configServer().generateWarnings(context.deploymentIdIn(zone), warnings); context.submit(applicationPackage).deploy(); assertEquals(warnings, context.deployment(zone) - .metrics().warnings().get(DeploymentMetrics.Warning.all).intValue()); + .metrics().warnings().get(DeploymentMetrics.Warning.all).intValue()); } @Test - public void testDeploySelectivelyProvisionsCertificate() { + void testDeploySelectivelyProvisionsCertificate() { Function<Instance, Optional<EndpointCertificateMetadata>> certificate = (application) -> tester.controller().curator().readEndpointCertificateMetadata(application.id()); // Create app1 @@ -835,22 +835,22 @@ public class ControllerTest { var testZone = ZoneId.from("test", "us-east-1"); tester.controllerTester().zoneRegistry().exclusiveRoutingIn(ZoneApiMock.from(prodZone)); var applicationPackage = new ApplicationPackageBuilder().athenzIdentity(AthenzDomain.from("domain"), AthenzService.from("service")) - .region(prodZone.region()) - .build(); + .region(prodZone.region()) + .build(); // Deploy app1 in production context1.submit(applicationPackage).deploy(); var cert = certificate.apply(context1.instance()); - assertTrue("Provisions certificate in " + Environment.prod, cert.isPresent()); + assertTrue(cert.isPresent(), "Provisions certificate in " + Environment.prod); assertEquals(Stream.concat(Stream.of("vznqtz7a5ygwjkbhhj7ymxvlrekgt4l6g.vespa.oath.cloud", - "app1.tenant1.global.vespa.oath.cloud", - "*.app1.tenant1.global.vespa.oath.cloud"), - Stream.of(prodZone, testZone, stagingZone) - .flatMap(zone -> Stream.of("", "*.") - .map(prefix -> prefix + "app1.tenant1." + zone.region().value() + - (zone.environment() == Environment.prod ? "" : "." + zone.environment().value()) + - ".vespa.oath.cloud"))) - .collect(Collectors.toUnmodifiableSet()), - Set.copyOf(tester.controllerTester().serviceRegistry().endpointCertificateMock().dnsNamesOf(context1.instanceId()))); + "app1.tenant1.global.vespa.oath.cloud", + "*.app1.tenant1.global.vespa.oath.cloud"), + Stream.of(prodZone, testZone, stagingZone) + .flatMap(zone -> Stream.of("", "*.") + .map(prefix -> prefix + "app1.tenant1." + zone.region().value() + + (zone.environment() == Environment.prod ? "" : "." + zone.environment().value()) + + ".vespa.oath.cloud"))) + .collect(Collectors.toUnmodifiableSet()), + Set.copyOf(tester.controllerTester().serviceRegistry().endpointCertificateMock().dnsNamesOf(context1.instanceId()))); // Next deployment reuses certificate context1.submit(applicationPackage).deploy(); @@ -862,13 +862,13 @@ public class ControllerTest { // Deploy app2 in a zone with shared routing context2.runJob(devZone, applicationPackage); - assertTrue("Application deployed and activated", - tester.configServer().application(context2.instanceId(), devZone).get().activated()); - assertTrue("Provisions certificate also in zone with routing layer", certificate.apply(context2.instance()).isPresent()); + assertTrue(tester.configServer().application(context2.instanceId(), devZone).get().activated(), + "Application deployed and activated"); + assertTrue(certificate.apply(context2.instance()).isPresent(), "Provisions certificate also in zone with routing layer"); } @Test - public void testDeployWithGlobalEndpointsInMultipleClouds() { + void testDeployWithGlobalEndpointsInMultipleClouds() { tester.controllerTester().zoneRegistry().setZones( ZoneApiMock.fromId("test.us-west-1"), ZoneApiMock.fromId("staging.us-west-1"), @@ -904,7 +904,7 @@ public class ControllerTest { } @Test - public void testDeployWithoutSourceRevision() { + void testDeployWithoutSourceRevision() { var context = tester.newDeploymentContext(); var applicationPackage = new ApplicationPackageBuilder() .upgradePolicy("default") @@ -913,12 +913,12 @@ public class ControllerTest { // Submit without source revision context.submit(applicationPackage, Optional.empty()) - .deploy(); - assertEquals("Deployed application", 1, context.instance().deployments().size()); + .deploy(); + assertEquals(1, context.instance().deployments().size(), "Deployed application"); } @Test - public void testDeployWithGlobalEndpointsAndMultipleRoutingMethods() { + void testDeployWithGlobalEndpointsAndMultipleRoutingMethods() { var context = tester.newDeploymentContext(); var zone1 = ZoneId.from("prod", "us-west-1"); var zone2 = ZoneId.from("prod", "us-east-3"); @@ -939,25 +939,25 @@ public class ControllerTest { var expectedRecords = List.of( // The weighted record for zone 2's region new Record(Record.Type.ALIAS, - RecordName.from("application.tenant.us-east-3-w.vespa.oath.cloud"), - new WeightedAliasTarget(HostName.of("lb-0--tenant.application.default--prod.us-east-3"), - "dns-zone-1", ZoneId.from("prod.us-east-3"), 1).pack()), + RecordName.from("application.tenant.us-east-3-w.vespa.oath.cloud"), + new WeightedAliasTarget(HostName.of("lb-0--tenant.application.default--prod.us-east-3"), + "dns-zone-1", ZoneId.from("prod.us-east-3"), 1).pack()), // The 'east' global endpoint, pointing to the weighted record for zone 2's region new Record(Record.Type.ALIAS, - RecordName.from("east.application.tenant.global.vespa.oath.cloud"), - new LatencyAliasTarget(HostName.of("application.tenant.us-east-3-w.vespa.oath.cloud"), - "dns-zone-1", ZoneId.from("prod.us-east-3")).pack()), + RecordName.from("east.application.tenant.global.vespa.oath.cloud"), + new LatencyAliasTarget(HostName.of("application.tenant.us-east-3-w.vespa.oath.cloud"), + "dns-zone-1", ZoneId.from("prod.us-east-3")).pack()), // The zone-scoped endpoint pointing to zone 2 with exclusive routing new Record(Record.Type.CNAME, - RecordName.from("application.tenant.us-east-3.vespa.oath.cloud"), - RecordData.from("lb-0--tenant.application.default--prod.us-east-3."))); + RecordName.from("application.tenant.us-east-3.vespa.oath.cloud"), + RecordData.from("lb-0--tenant.application.default--prod.us-east-3."))); assertEquals(expectedRecords, List.copyOf(tester.controllerTester().nameService().records())); } @Test - public void testDeploymentDirectRouting() { + void testDeploymentDirectRouting() { // Rotation-less system DeploymentTester tester = new DeploymentTester(new ControllerTester(new RotationsConfig.Builder().build(), main)); var context = tester.newDeploymentContext(); @@ -965,7 +965,7 @@ public class ControllerTest { var zone2 = ZoneId.from("prod", "us-east-3"); var zone3 = ZoneId.from("prod", "eu-west-1"); tester.controllerTester().zoneRegistry() - .exclusiveRoutingIn(ZoneApiMock.from(zone1), ZoneApiMock.from(zone2), ZoneApiMock.from(zone3)); + .exclusiveRoutingIn(ZoneApiMock.from(zone1), ZoneApiMock.from(zone2), ZoneApiMock.from(zone3)); var applicationPackageBuilder = new ApplicationPackageBuilder() .region(zone1.region()) @@ -979,20 +979,20 @@ public class ControllerTest { // Deployment passes container endpoints to config server for (var zone : List.of(zone1, zone2)) { - assertEquals("Expected container endpoints in " + zone, - Set.of("application.tenant.global.vespa.oath.cloud", - "foo.application.tenant.global.vespa.oath.cloud", - "us.application.tenant.global.vespa.oath.cloud"), - tester.configServer().containerEndpointNames(context.deploymentIdIn(zone))); + assertEquals(Set.of("application.tenant.global.vespa.oath.cloud", + "foo.application.tenant.global.vespa.oath.cloud", + "us.application.tenant.global.vespa.oath.cloud"), + tester.configServer().containerEndpointNames(context.deploymentIdIn(zone)), + "Expected container endpoints in " + zone); } - assertEquals("Expected container endpoints in " + zone3, - Set.of("application.tenant.global.vespa.oath.cloud", - "foo.application.tenant.global.vespa.oath.cloud"), - tester.configServer().containerEndpointNames(context.deploymentIdIn(zone3))); + assertEquals(Set.of("application.tenant.global.vespa.oath.cloud", + "foo.application.tenant.global.vespa.oath.cloud"), + tester.configServer().containerEndpointNames(context.deploymentIdIn(zone3)), + "Expected container endpoints in " + zone3); } @Test - public void testChangeEndpointCluster() { + void testChangeEndpointCluster() { var context = tester.newDeploymentContext(); var west = ZoneId.from("prod", "us-west-1"); var east = ZoneId.from("prod", "us-east-3"); @@ -1005,7 +1005,7 @@ public class ControllerTest { .build(); context.submit(applicationPackage).deploy(); assertEquals(ClusterSpec.Id.from("foo"), tester.applications().requireInstance(context.instanceId()) - .rotations().get(0).clusterId()); + .rotations().get(0).clusterId()); // Redeploy with endpoint cluster changed needs override applicationPackage = new ApplicationPackageBuilder() @@ -1018,12 +1018,12 @@ public class ControllerTest { fail("Expected exception"); } catch (IllegalArgumentException e) { assertEquals("global-endpoint-change: application 'tenant.application' has endpoints [endpoint " + - "'default' (cluster foo) -> us-east-3, us-west-1], but does not include all of these in " + - "deployment.xml. Deploying given deployment.xml will remove " + - "[endpoint 'default' (cluster foo) -> us-east-3, us-west-1] and add " + - "[endpoint 'default' (cluster bar) -> us-east-3, us-west-1]. To allow this add " + - "<allow until='yyyy-mm-dd'>global-endpoint-change</allow> to validation-overrides.xml, see " + - "https://docs.vespa.ai/en/reference/validation-overrides.html", e.getMessage()); + "'default' (cluster foo) -> us-east-3, us-west-1], but does not include all of these in " + + "deployment.xml. Deploying given deployment.xml will remove " + + "[endpoint 'default' (cluster foo) -> us-east-3, us-west-1] and add " + + "[endpoint 'default' (cluster bar) -> us-east-3, us-west-1]. To allow this add " + + "<allow until='yyyy-mm-dd'>global-endpoint-change</allow> to validation-overrides.xml, see " + + "https://docs.vespa.ai/en/reference/validation-overrides.html", e.getMessage()); } // Redeploy with override succeeds @@ -1035,26 +1035,26 @@ public class ControllerTest { .build(); context.submit(applicationPackage).deploy(); assertEquals(ClusterSpec.Id.from("bar"), tester.applications().requireInstance(context.instanceId()) - .rotations().get(0).clusterId()); + .rotations().get(0).clusterId()); } @Test - public void testReadableApplications() { + void testReadableApplications() { var db = new MockCuratorDb(tester.controller().system()); var tester = new DeploymentTester(new ControllerTester(db)); // Create and deploy two applications var app1 = tester.newDeploymentContext("t1", "a1", "default") - .submit() - .deploy(); + .submit() + .deploy(); var app2 = tester.newDeploymentContext("t2", "a2", "default") - .submit() - .deploy(); + .submit() + .deploy(); assertEquals(2, tester.applications().readable().size()); // Write invalid data to one application db.curator().set(Path.fromString("/controller/v1/applications/" + app2.application().id().serialized()), - new byte[]{(byte) 0xDE, (byte) 0xAD}); + new byte[]{(byte) 0xDE, (byte) 0xAD}); // Can read the remaining readable assertEquals(1, tester.applications().readable().size()); @@ -1071,57 +1071,57 @@ public class ControllerTest { } @Test - public void testClashingEndpointIdAndInstanceName() { + void testClashingEndpointIdAndInstanceName() { String deploymentXml = "<deployment version='1.0' athenz-domain='domain' athenz-service='service'>\n" + - " <instance id=\"default\">\n" + - " <prod>\n" + - " <region active=\"true\">us-west-1</region>\n" + - " </prod>\n" + - " <endpoints>\n" + - " <endpoint id=\"dev\" container-id=\"qrs\"/>\n" + - " </endpoints>\n" + - " </instance>\n" + - " <instance id=\"dev\">\n" + - " <prod>\n" + - " <region active=\"true\">us-west-1</region>\n" + - " </prod>\n" + - " <endpoints>\n" + - " <endpoint id=\"default\" container-id=\"qrs\"/>\n" + - " </endpoints>\n" + - " </instance>\n" + - "</deployment>\n"; + " <instance id=\"default\">\n" + + " <prod>\n" + + " <region active=\"true\">us-west-1</region>\n" + + " </prod>\n" + + " <endpoints>\n" + + " <endpoint id=\"dev\" container-id=\"qrs\"/>\n" + + " </endpoints>\n" + + " </instance>\n" + + " <instance id=\"dev\">\n" + + " <prod>\n" + + " <region active=\"true\">us-west-1</region>\n" + + " </prod>\n" + + " <endpoints>\n" + + " <endpoint id=\"default\" container-id=\"qrs\"/>\n" + + " </endpoints>\n" + + " </instance>\n" + + "</deployment>\n"; ApplicationPackage applicationPackage = ApplicationPackageBuilder.fromDeploymentXml(deploymentXml); try { tester.newDeploymentContext().submit(applicationPackage); fail("Expected exception"); } catch (IllegalArgumentException e) { assertEquals("Endpoint with ID 'default' in instance 'dev' clashes with endpoint 'dev' in instance 'default'", - e.getMessage()); + e.getMessage()); } } @Test - public void testTestPackageWarnings() { + void testTestPackageWarnings() { String deploymentXml = "<deployment version='1.0'>\n" + - " <prod>\n" + - " <region>us-west-1</region>\n" + - " </prod>\n" + - "</deployment>\n"; + " <prod>\n" + + " <region>us-west-1</region>\n" + + " </prod>\n" + + "</deployment>\n"; ApplicationPackage applicationPackage = ApplicationPackageBuilder.fromDeploymentXml(deploymentXml); byte[] testPackage = ApplicationPackage.filesZip(Map.of("tests/staging-test/foo.json", new byte[0])); var app = tester.newDeploymentContext(); tester.jobs().submit(app.application().id(), Submission.basic(applicationPackage, testPackage), 1); assertEquals(List.of(new Notification(tester.clock().instant(), - Type.testPackage, - Level.warning, - NotificationSource.from(app.application().id()), - List.of("test package has staging tests, so it should also include staging setup", - "see https://docs.vespa.ai/en/testing.html for details on how to write system tests for Vespa"))), - tester.controller().notificationsDb().listNotifications(NotificationSource.from(app.application().id()), true)); + Type.testPackage, + Level.warning, + NotificationSource.from(app.application().id()), + List.of("test package has staging tests, so it should also include staging setup", + "see https://docs.vespa.ai/en/testing.html for details on how to write system tests for Vespa"))), + tester.controller().notificationsDb().listNotifications(NotificationSource.from(app.application().id()), true)); } @Test - public void testCompileVersion() { + void testCompileVersion() { DeploymentContext context = tester.newDeploymentContext(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder().region("us-west-1").build(); TenantAndApplicationId application = TenantAndApplicationId.from(context.instanceId()); @@ -1186,7 +1186,7 @@ public class ControllerTest { } @Test - public void testCloudAccount() { + void testCloudAccount() { DeploymentContext context = tester.newDeploymentContext(); ZoneId zone = ZoneId.from("prod", "us-west-1"); String cloudAccount = "012345678912"; @@ -1197,7 +1197,8 @@ public class ControllerTest { try { context.submit(applicationPackage).deploy(); fail("Expected exception"); // Account invalid for tenant - } catch (IllegalArgumentException ignored) {} + } catch (IllegalArgumentException ignored) { + } tester.controllerTester().flagSource().withListFlag(PermanentFlags.CLOUD_ACCOUNTS.id(), List.of(cloudAccount), String.class); context.submit(applicationPackage).deploy(); @@ -1205,7 +1206,7 @@ public class ControllerTest { } @Test - public void testSubmitWithElementDeprecatedOnPreviousMajor() { + void testSubmitWithElementDeprecatedOnPreviousMajor() { DeploymentContext context = tester.newDeploymentContext(); var applicationPackage = new ApplicationPackageBuilder() .compileVersion(Version.fromString("8.1")) 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 a2eefd47b56..10fd57ce032 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 @@ -74,9 +74,8 @@ import java.util.logging.Handler; import java.util.logging.Logger; import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Convenience methods for controller tests. diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/DeploymentQuotaCalculatorTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/DeploymentQuotaCalculatorTest.java index 11b3ad0d45a..3163c8b6439 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/DeploymentQuotaCalculatorTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/DeploymentQuotaCalculatorTest.java @@ -17,7 +17,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.RevisionId; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.ApplicationData; import com.yahoo.vespa.hosted.controller.deployment.RevisionHistory; import com.yahoo.vespa.hosted.controller.metric.ApplicationMetrics; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.nio.file.Files; import java.nio.file.Paths; @@ -29,13 +29,13 @@ import java.util.OptionalInt; import java.util.OptionalLong; import java.util.Set; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; public class DeploymentQuotaCalculatorTest { @Test - public void quota_is_divided_among_prod_instances() { + void quota_is_divided_among_prod_instances() { Quota calculated = DeploymentQuotaCalculator.calculate(Quota.unlimited().withBudget(10), List.of(), ApplicationId.defaultId(), ZoneId.defaultId(), DeploymentSpec.fromXml( "<deployment version='1.0'>\n" + @@ -59,12 +59,12 @@ public class DeploymentQuotaCalculatorTest { } @Test - public void quota_is_divided_among_prod_and_manual_instances() { + void quota_is_divided_among_prod_and_manual_instances() { var existing_dev_deployment = new Application(TenantAndApplicationId.from(ApplicationId.defaultId()), Instant.EPOCH, DeploymentSpec.empty, ValidationOverrides.empty, Optional.empty(), - Optional.empty(), Optional.empty(), OptionalInt.empty(), new ApplicationMetrics(1, 1), Set.of(), OptionalLong.empty(), RevisionHistory.empty(), - List.of(new Instance(ApplicationId.defaultId()).withNewDeployment(ZoneId.from(Environment.dev, RegionName.defaultName()), - RevisionId.forProduction(1), Version.emptyVersion, Instant.EPOCH, Map.of(), QuotaUsage.create(0.53d)))); + Optional.empty(), Optional.empty(), OptionalInt.empty(), new ApplicationMetrics(1, 1), Set.of(), OptionalLong.empty(), RevisionHistory.empty(), + List.of(new Instance(ApplicationId.defaultId()).withNewDeployment(ZoneId.from(Environment.dev, RegionName.defaultName()), + RevisionId.forProduction(1), Version.emptyVersion, Instant.EPOCH, Map.of(), QuotaUsage.create(0.53d)))); Quota calculated = DeploymentQuotaCalculator.calculate(Quota.unlimited().withBudget(2), List.of(existing_dev_deployment), ApplicationId.defaultId(), ZoneId.defaultId(), DeploymentSpec.fromXml( @@ -84,19 +84,19 @@ public class DeploymentQuotaCalculatorTest { } @Test - public void unlimited_quota_remains_unlimited() { + void unlimited_quota_remains_unlimited() { Quota calculated = DeploymentQuotaCalculator.calculate(Quota.unlimited(), List.of(), ApplicationId.defaultId(), ZoneId.defaultId(), DeploymentSpec.empty); assertTrue(calculated.isUnlimited()); } @Test - public void zero_quota_remains_zero() { + void zero_quota_remains_zero() { Quota calculated = DeploymentQuotaCalculator.calculate(Quota.zero(), List.of(), ApplicationId.defaultId(), ZoneId.defaultId(), DeploymentSpec.empty); assertEquals(calculated.budget().orElseThrow().doubleValue(), 0, 1e-5); } @Test - public void using_highest_resource_use() throws Exception { + void using_highest_resource_use() throws Exception { var content = new String(Files.readAllBytes(Paths.get("src/test/java/com/yahoo/vespa/hosted/controller/application/response/application.json"))); var mapper = new ObjectMapper(); var application = mapper.readValue(content, ApplicationData.class).toApplication(); @@ -105,7 +105,7 @@ public class DeploymentQuotaCalculatorTest { } @Test - public void tenant_quota_in_pipeline() { + void tenant_quota_in_pipeline() { var tenantQuota = Quota.unlimited().withBudget(42); var calculated = DeploymentQuotaCalculator.calculate(tenantQuota, List.of(), ApplicationId.defaultId(), ZoneId.from("test", "apac1"), DeploymentSpec.empty); assertEquals(tenantQuota, calculated); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/EndpointTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/EndpointTest.java index 81fc610d1f6..f3324e0c1f3 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/EndpointTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/EndpointTest.java @@ -8,12 +8,12 @@ import com.yahoo.config.provision.zone.RoutingMethod; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.application.Endpoint.Port; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.List; import java.util.Map; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -26,7 +26,7 @@ public class EndpointTest { private static final TenantAndApplicationId app2 = TenantAndApplicationId.from(instance2); @Test - public void global_endpoints() { + void global_endpoints() { DeploymentId deployment1 = new DeploymentId(instance1, ZoneId.from("prod", "us-north-1")); DeploymentId deployment2 = new DeploymentId(instance2, ZoneId.from("prod", "us-north-1")); ClusterSpec.Id cluster = ClusterSpec.Id.from("default"); @@ -72,7 +72,7 @@ public class EndpointTest { } @Test - public void global_endpoints_with_endpoint_id() { + void global_endpoints_with_endpoint_id() { DeploymentId deployment1 = new DeploymentId(instance1, ZoneId.from("prod", "us-north-1")); DeploymentId deployment2 = new DeploymentId(instance2, ZoneId.from("prod", "us-north-1")); ClusterSpec.Id cluster = ClusterSpec.Id.from("default"); @@ -114,7 +114,7 @@ public class EndpointTest { } @Test - public void zone_endpoints() { + void zone_endpoints() { var cluster = ClusterSpec.Id.from("default"); // Always default for non-direct routing var prodZone = new DeploymentId(instance1, ZoneId.from("prod", "us-north-1")); var prodZone2 = new DeploymentId(instance2, ZoneId.from("prod", "us-north-1")); @@ -172,7 +172,7 @@ public class EndpointTest { } @Test - public void certificate_endpoints() { + void certificate_endpoints() { var defaultCluster = ClusterSpec.Id.from("default"); var prodZone = new DeploymentId(instance1, ZoneId.from("prod", "us-north-1")); var testZone = new DeploymentId(instance1, ZoneId.from("test", "us-north-2")); @@ -237,7 +237,7 @@ public class EndpointTest { } @Test - public void region_endpoints() { + void region_endpoints() { var cluster = ClusterSpec.Id.from("default"); var prodZone = ZoneId.from("prod", "us-north-2"); Map<String, Endpoint> tests = Map.of( @@ -268,42 +268,42 @@ public class EndpointTest { ); tests.forEach((expected, endpoint) -> assertEquals(expected, endpoint.url().toString())); - assertEquals("Availability zone is removed from region", - "aws-us-north-1", - tests.get("https://a1.t1.aws-us-north-1.w.vespa-app.cloud/").targets().get(0).deployment().zoneId().region().value()); - assertEquals("Availability zone is removed from region", - "gcp-us-south1", - tests.get("https://a1.t1.gcp-us-south1.w.vespa-app.cloud/").targets().get(0).deployment().zoneId().region().value()); + assertEquals("aws-us-north-1", + tests.get("https://a1.t1.aws-us-north-1.w.vespa-app.cloud/").targets().get(0).deployment().zoneId().region().value(), + "Availability zone is removed from region"); + assertEquals("gcp-us-south1", + tests.get("https://a1.t1.gcp-us-south1.w.vespa-app.cloud/").targets().get(0).deployment().zoneId().region().value(), + "Availability zone is removed from region"); } @Test - public void application_endpoints() { + void application_endpoints() { Map<String, Endpoint> tests = Map.of( "https://weighted.a1.t1.us-west-1.r.vespa-app.cloud/", Endpoint.of(app1) .targetApplication(EndpointId.of("weighted"), ClusterSpec.Id.from("qrs"), - Map.of(new DeploymentId(app1.instance("i1"), ZoneId.from("prod", "us-west-1")), 1)) + Map.of(new DeploymentId(app1.instance("i1"), ZoneId.from("prod", "us-west-1")), 1)) .routingMethod(RoutingMethod.exclusive) .on(Port.tls()) .in(SystemName.Public), "https://weighted.a1.t1.us-west-1.r.cd.vespa-app.cloud/", Endpoint.of(app1) .targetApplication(EndpointId.of("weighted"), ClusterSpec.Id.from("qrs"), - Map.of(new DeploymentId(app1.instance("i1"), ZoneId.from("prod", "us-west-1")), 1)) + Map.of(new DeploymentId(app1.instance("i1"), ZoneId.from("prod", "us-west-1")), 1)) .routingMethod(RoutingMethod.exclusive) .on(Port.tls()) .in(SystemName.PublicCd), "https://a2.t2.us-east-3-r.vespa.oath.cloud/", Endpoint.of(app2) .targetApplication(EndpointId.defaultId(), ClusterSpec.Id.from("qrs"), - Map.of(new DeploymentId(app2.instance("i1"), ZoneId.from("prod", "us-east-3")), 1)) + Map.of(new DeploymentId(app2.instance("i1"), ZoneId.from("prod", "us-east-3")), 1)) .routingMethod(RoutingMethod.exclusive) .on(Port.tls()) .in(SystemName.main), "https://cd.a2.t2.us-east-3-r.vespa.oath.cloud/", Endpoint.of(app2) .targetApplication(EndpointId.defaultId(), ClusterSpec.Id.from("qrs"), - Map.of(new DeploymentId(app2.instance("i1"), ZoneId.from("prod", "us-east-3")), 1)) + Map.of(new DeploymentId(app2.instance("i1"), ZoneId.from("prod", "us-east-3")), 1)) .routingMethod(RoutingMethod.exclusive) .on(Port.tls()) .in(SystemName.cd) @@ -312,7 +312,7 @@ public class EndpointTest { } @Test - public void upstream_name() { + void upstream_name() { var zone = new DeploymentId(instance1, ZoneId.from("prod", "us-north-1")); var zone2 = new DeploymentId(instance2, ZoneId.from("prod", "us-north-1")); var tests1 = Map.of( diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageDiffTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageDiffTest.java index 977304db3fb..a92c035b502 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageDiffTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageDiffTest.java @@ -1,7 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.application.pkg; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -14,7 +14,7 @@ import java.util.zip.ZipOutputStream; import static com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackageDiff.diff; import static com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackageDiff.diffAgainstEmpty; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author freva @@ -24,12 +24,12 @@ public class ApplicationPackageDiffTest { private static final ApplicationPackage app2 = applicationPackage(Map.of("file1", "updated contents\nof the\nfirst file\nafter some changes", "dir/myfile2", "Second file", "dir/binary", "øøøø")); @Test - public void no_diff() { + void no_diff() { assertEquals("No diff\n", new String(diff(app1, app1))); } @Test - public void diff_against_empty() { + void diff_against_empty() { assertEquals("--- dir/binary\n" + "Diff skipped: File is binary (new file -> 8B)\n" + "\n" + @@ -45,7 +45,7 @@ public class ApplicationPackageDiffTest { } @Test - public void full_diff() { + void full_diff() { // Even though dir/binary is binary file, we can see they are identical, so it should not print "Diff skipped" assertEquals("--- dir/myfile\n" + "@@ -1,1 +1,0 @@\n" + @@ -66,7 +66,7 @@ public class ApplicationPackageDiffTest { } @Test - public void skips_diff_for_too_large_files() { + void skips_diff_for_too_large_files() { assertEquals("--- dir/myfile\n" + "@@ -1,1 +1,0 @@\n" + "- Second file\n" + @@ -81,7 +81,7 @@ public class ApplicationPackageDiffTest { } @Test - public void skips_diff_if_file_diff_is_too_large() { + void skips_diff_if_file_diff_is_too_large() { assertEquals("--- dir/myfile\n" + "@@ -1,1 +1,0 @@\n" + "- Second file\n" + @@ -96,7 +96,7 @@ public class ApplicationPackageDiffTest { } @Test - public void skips_diff_if_total_diff_is_too_large() { + void skips_diff_if_total_diff_is_too_large() { assertEquals("--- dir/myfile\n" + "@@ -1,1 +1,0 @@\n" + "- Second file\n" + diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageTest.java index 0458f77fc00..ce7fa5784e8 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackageTest.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.controller.application.pkg; import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.application.api.ValidationId; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.nio.file.Files; import java.nio.file.Path; @@ -13,10 +13,10 @@ import java.util.Map; import java.util.stream.Collectors; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author valerijf @@ -55,7 +55,7 @@ public class ApplicationPackageTest { "</nodes>"; @Test - public void test_createEmptyForDeploymentRemoval() { + void test_createEmptyForDeploymentRemoval() { ApplicationPackage app = ApplicationPackage.deploymentRemoval(); assertEquals(DeploymentSpec.empty, app.deploymentSpec()); assertEquals(List.of(), app.trustedCertificates()); @@ -66,22 +66,22 @@ public class ApplicationPackageTest { } @Test - public void testMetaData() { + void testMetaData() { byte[] zip = ApplicationPackage.filesZip(Map.of("services.xml", servicesXml.getBytes(UTF_8), - "jdisc.xml", jdiscXml.getBytes(UTF_8), - "content/content.xml", contentXml.getBytes(UTF_8), - "content/nodes.xml", nodesXml.getBytes(UTF_8), - "gurba", "gurba".getBytes(UTF_8))); + "jdisc.xml", jdiscXml.getBytes(UTF_8), + "content/content.xml", contentXml.getBytes(UTF_8), + "content/nodes.xml", nodesXml.getBytes(UTF_8), + "gurba", "gurba".getBytes(UTF_8))); assertEquals(Map.of("services.xml", servicesXml, - "jdisc.xml", jdiscXml, - "content/content.xml", contentXml, - "content/nodes.xml", nodesXml), - unzip(new ApplicationPackage(zip, false).metaDataZip())); + "jdisc.xml", jdiscXml, + "content/content.xml", contentXml, + "content/nodes.xml", nodesXml), + unzip(new ApplicationPackage(zip, false).metaDataZip())); } @Test - public void testMetaDataWithMissingFiles() { + void testMetaDataWithMissingFiles() { byte[] zip = ApplicationPackage.filesZip(Map.of("services.xml", servicesXml.getBytes(UTF_8))); try { @@ -94,7 +94,7 @@ public class ApplicationPackageTest { } @Test - public void testAbsoluteInclude() throws Exception { + void testAbsoluteInclude() throws Exception { try { getApplicationZip("include-absolute.zip"); fail("Should fail on include file outside zip"); @@ -105,7 +105,7 @@ public class ApplicationPackageTest { } @Test - public void testParentInclude() throws Exception { + void testParentInclude() throws Exception { try { getApplicationZip("include-parent.zip"); fail("Should fail on include file outside zip"); @@ -116,7 +116,7 @@ public class ApplicationPackageTest { } @Test - public void testBundleHashesAreSameWithDifferentDeploymentXml() throws Exception { + void testBundleHashesAreSameWithDifferentDeploymentXml() throws Exception { var originalPackage = getApplicationZip("original.zip"); var changedServices = getApplicationZip("changed-services-xml.zip"); var changedDeploymentXml = getApplicationZip("changed-deployment-xml.zip"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/LinesComparatorTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/LinesComparatorTest.java index 92137094f62..8d9f88ca0ca 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/LinesComparatorTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/LinesComparatorTest.java @@ -1,12 +1,12 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.application.pkg; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.Optional; import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class LinesComparatorTest { private static final String text1 = "This part of the\n" + @@ -64,7 +64,7 @@ public class LinesComparatorTest { "to this document."; @Test - public void diff_test() { + void diff_test() { assertDiff(null, "", ""); assertDiff(null, text1, text1); assertDiff(text1.lines().map(line -> "- " + line).collect(Collectors.joining("\n", "@@ -1,24 +1,0 @@\n", "\n")), text1, ""); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackageTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackageTest.java index 8588bb9ea16..5bc1c386134 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackageTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/TestPackageTest.java @@ -5,7 +5,7 @@ import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.application.pkg.TestPackage.TestSummary; import com.yahoo.vespa.hosted.controller.config.ControllerConfig; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -22,7 +22,7 @@ import static com.yahoo.vespa.hosted.controller.api.integration.deployment.Teste import static com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud.Suite.system; import static com.yahoo.vespa.hosted.controller.application.pkg.TestPackage.validateTests; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author jonmv @@ -75,65 +75,65 @@ public class TestPackageTest { } @Test - public void testBundleValidation() throws IOException { + void testBundleValidation() throws IOException { byte[] testZip = ApplicationPackage.filesZip(Map.of("components/foo-tests.jar", testsJar("SystemTest", "StagingSetup", "ProductionTest"), - "artifacts/key", new byte[0])); + "artifacts/key", new byte[0])); TestSummary summary = validateTests(List.of(system), testZip); assertEquals(List.of(system, staging_setup, production), summary.suites()); assertEquals(List.of("test package contains 'artifacts/key'; this conflicts with credentials used to run tests in Vespa Cloud", - "test package has staging setup, so it should also include staging tests", - "test package has production tests, but no production tests are declared in deployment.xml", - "see https://docs.vespa.ai/en/testing.html for details on how to write system tests for Vespa"), - summary.problems()); + "test package has staging setup, so it should also include staging tests", + "test package has production tests, but no production tests are declared in deployment.xml", + "see https://docs.vespa.ai/en/testing.html for details on how to write system tests for Vespa"), + summary.problems()); } @Test - public void testFatTestsValidation() { + void testFatTestsValidation() { byte[] testZip = ApplicationPackage.filesZip(Map.of("artifacts/foo-tests.jar", new byte[0])); TestSummary summary = validateTests(List.of(staging, production), testZip); assertEquals(List.of(staging, production), summary.suites()); assertEquals(List.of("test package has staging tests, so it should also include staging setup", - "see https://docs.vespa.ai/en/testing.html for details on how to write system tests for Vespa"), - summary.problems()); + "see https://docs.vespa.ai/en/testing.html for details on how to write system tests for Vespa"), + summary.problems()); } @Test - public void testBasicTestsValidation() { + void testBasicTestsValidation() { byte[] testZip = ApplicationPackage.filesZip(Map.of("tests/staging-test/foo.json", new byte[0], - "tests/staging-setup/foo.json", new byte[0])); + "tests/staging-setup/foo.json", new byte[0])); TestSummary summary = validateTests(List.of(system, production), testZip); assertEquals(List.of(staging_setup, staging), summary.suites()); assertEquals(List.of("test package has no system tests, but <test /> is declared in deployment.xml", - "test package has no production tests, but production tests are declared in deployment.xml", - "see https://docs.vespa.ai/en/testing.html for details on how to write system tests for Vespa"), - summary.problems()); + "test package has no production tests, but production tests are declared in deployment.xml", + "see https://docs.vespa.ai/en/testing.html for details on how to write system tests for Vespa"), + summary.problems()); } @Test - public void generates_correct_tester_flavor() { + void generates_correct_tester_flavor() { DeploymentSpec spec = DeploymentSpec.fromXml("<deployment version='1.0' athenz-domain='domain' athenz-service='service'>\n" + - " <instance id='first'>\n" + - " <test tester-flavor=\"d-6-16-100\" />\n" + - " <prod>\n" + - " <region active=\"true\">us-west-1</region>\n" + - " <test>us-west-1</test>\n" + - " </prod>\n" + - " </instance>\n" + - " <instance id='second'>\n" + - " <test />\n" + - " <staging />\n" + - " <prod tester-flavor=\"d-6-16-100\">\n" + - " <parallel>\n" + - " <region active=\"true\">us-east-3</region>\n" + - " <region active=\"true\">us-central-1</region>\n" + - " </parallel>\n" + - " <region active=\"true\">us-west-1</region>\n" + - " <test>us-west-1</test>\n" + - " </prod>\n" + - " </instance>\n" + - "</deployment>\n"); + " <instance id='first'>\n" + + " <test tester-flavor=\"d-6-16-100\" />\n" + + " <prod>\n" + + " <region active=\"true\">us-west-1</region>\n" + + " <test>us-west-1</test>\n" + + " </prod>\n" + + " </instance>\n" + + " <instance id='second'>\n" + + " <test />\n" + + " <staging />\n" + + " <prod tester-flavor=\"d-6-16-100\">\n" + + " <parallel>\n" + + " <region active=\"true\">us-east-3</region>\n" + + " <region active=\"true\">us-central-1</region>\n" + + " </parallel>\n" + + " <region active=\"true\">us-west-1</region>\n" + + " <test>us-west-1</test>\n" + + " </prod>\n" + + " </instance>\n" + + "</deployment>\n"); NodeResources firstResources = TestPackage.testerResourcesFor(ZoneId.from("prod", "us-west-1"), spec.requireInstance("first")); assertEquals(TestPackage.DEFAULT_TESTER_RESOURCES, firstResources); @@ -145,13 +145,13 @@ public class TestPackageTest { } @Test - public void generates_correct_services_xml() throws IOException { + void generates_correct_services_xml() throws IOException { assertEquals(Files.readString(Paths.get("src/test/resources/test_runner_services.xml-cd")), - new String(TestPackage.servicesXml(true, - false, - new NodeResources(2, 12, 75, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.local), - new ControllerConfig.Steprunner.Testerapp.Builder().build()), - UTF_8)); + new String(TestPackage.servicesXml(true, + false, + new NodeResources(2, 12, 75, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.local), + new ControllerConfig.Steprunner.Testerapp.Builder().build()), + UTF_8)); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ZipEntriesTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ZipEntriesTest.java index 6908464640b..37062e1002b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ZipEntriesTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/pkg/ZipEntriesTest.java @@ -5,7 +5,7 @@ import com.yahoo.security.KeyAlgorithm; import com.yahoo.security.KeyUtils; import com.yahoo.security.SignatureAlgorithm; import com.yahoo.security.X509CertificateBuilder; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.security.auth.x500.X500Principal; import java.math.BigInteger; @@ -16,7 +16,7 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -24,22 +24,22 @@ import static org.junit.Assert.assertEquals; public class ZipEntriesTest { @Test - public void test_replacement() { + void test_replacement() { ApplicationPackage applicationPackage = new ApplicationPackage(new byte[0]); List<X509Certificate> certificates = IntStream.range(0, 3) - .mapToObj(i -> { - KeyPair keyPair = KeyUtils.generateKeypair(KeyAlgorithm.EC, 256); - X500Principal subject = new X500Principal("CN=subject" + i); - return X509CertificateBuilder.fromKeypair(keyPair, - subject, - Instant.now(), - Instant.now().plusSeconds(1), - SignatureAlgorithm.SHA512_WITH_ECDSA, - BigInteger.valueOf(1)) - .build(); - }) - .collect(Collectors.toUnmodifiableList()); - + .mapToObj(i -> { + KeyPair keyPair = KeyUtils.generateKeypair(KeyAlgorithm.EC, 256); + X500Principal subject = new X500Principal("CN=subject" + i); + return X509CertificateBuilder.fromKeypair(keyPair, + subject, + Instant.now(), + Instant.now().plusSeconds(1), + SignatureAlgorithm.SHA512_WITH_ECDSA, + BigInteger.valueOf(1)) + .build(); + }) + .collect(Collectors.toUnmodifiableList()); + assertEquals(List.of(), applicationPackage.trustedCertificates()); for (int i = 0; i < certificates.size(); i++) { applicationPackage = applicationPackage.withTrustedCertificate(certificates.get(i)); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/archive/CuratorArchiveBucketDbTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/archive/CuratorArchiveBucketDbTest.java index 4c3d76b1b17..081056e5184 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/archive/CuratorArchiveBucketDbTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/archive/CuratorArchiveBucketDbTest.java @@ -7,7 +7,7 @@ import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.integration.archive.ArchiveBucket; import org.apache.curator.shaded.com.google.common.collect.Streams; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.net.URI; import java.util.Optional; @@ -16,12 +16,12 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class CuratorArchiveBucketDbTest { @Test - public void archiveUriFor() { + void archiveUriFor() { ControllerTester tester = new ControllerTester(SystemName.Public); CuratorArchiveBucketDb bucketDb = new CuratorArchiveBucketDb(tester.controller()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLoggerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLoggerTest.java index 7a209b105b3..5c5abea0276 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLoggerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/auditlog/AuditLoggerTest.java @@ -5,7 +5,7 @@ import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.jdisc.http.HttpRequest.Method; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.auditlog.AuditLog.Entry; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; import java.net.URI; @@ -15,8 +15,8 @@ import java.time.Instant; import java.util.function.Supplier; import static java.time.temporal.ChronoUnit.MILLIS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden @@ -27,11 +27,11 @@ public class AuditLoggerTest { private final Supplier<AuditLog> log = () -> tester.controller().auditLogger().readLog(); @Test - public void test_logging() { + void test_logging() { { // GET request is ignored HttpRequest request = testRequest(Method.GET, URI.create("http://localhost:8080/os/v1/"), ""); tester.controller().auditLogger().log(request); - assertTrue("Not logged", log.get().entries().isEmpty()); + assertTrue(log.get().entries().isEmpty(), "Not logged"); } { // PATCH request is logged in audit log @@ -47,7 +47,7 @@ public class AuditLoggerTest { { // Another PATCH request is logged tester.clock().advance(Duration.ofDays(1)); HttpRequest request = testRequest(Method.PATCH, URI.create("http://localhost:8080/os/v1/"), - "{\"cloud\":\"cloud9\",\"version\":\"43.0\"}"); + "{\"cloud\":\"cloud9\",\"version\":\"43.0\"}"); tester.controller().auditLogger().log(request); assertEntry(Entry.Method.PATCH, 2, "/os/v1/"); } @@ -55,7 +55,7 @@ public class AuditLoggerTest { { // PUT is logged tester.clock().advance(Duration.ofDays(1)); HttpRequest request = testRequest(Method.PUT, URI.create("http://localhost:8080/zone/v2/prod/us-north-1/nodes/v2/state/dirty/node1/"), - ""); + ""); tester.controller().auditLogger().log(request); assertEntry(Entry.Method.PUT, 3, "/zone/v2/prod/us-north-1/nodes/v2/state/dirty/node1/"); } @@ -63,7 +63,7 @@ public class AuditLoggerTest { { // DELETE is logged tester.clock().advance(Duration.ofDays(1)); HttpRequest request = testRequest(Method.DELETE, URI.create("http://localhost:8080/zone/v2/prod/us-north-1/nodes/v2/node/node1"), - ""); + ""); tester.controller().auditLogger().log(request); assertEntry(Entry.Method.DELETE, 4, "/zone/v2/prod/us-north-1/nodes/v2/node/node1"); } @@ -71,7 +71,7 @@ public class AuditLoggerTest { { // POST is logged tester.clock().advance(Duration.ofDays(1)); HttpRequest request = testRequest(Method.POST, URI.create("http://localhost:8080/controller/v1/jobs/upgrader/confidence/6.42"), - "6.42"); + "6.42"); tester.controller().auditLogger().log(request); assertEntry(Entry.Method.POST, 5, "/controller/v1/jobs/upgrader/confidence/6.42"); } @@ -79,7 +79,7 @@ public class AuditLoggerTest { { // 15 days pass and another PATCH request is logged. Older entries are removed due to expiry tester.clock().advance(Duration.ofDays(15)); HttpRequest request = testRequest(Method.PATCH, URI.create("http://localhost:8080/os/v1/"), - "{\"cloud\":\"cloud9\",\"version\":\"44.0\"}"); + "{\"cloud\":\"cloud9\",\"version\":\"44.0\"}"); tester.controller().auditLogger().log(request); assertEntry(Entry.Method.PATCH, 1, "/os/v1/"); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/certificate/EndpointCertificatesTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/certificate/EndpointCertificatesTest.java index 4b6d802260e..9a2d9eddba7 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/certificate/EndpointCertificatesTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/certificate/EndpointCertificatesTest.java @@ -25,8 +25,8 @@ import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.integration.SecretStoreMock; import com.yahoo.vespa.hosted.controller.persistence.CuratorDb; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import javax.security.auth.x500.X500Principal; import java.security.KeyPair; @@ -39,9 +39,9 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author andreer @@ -105,7 +105,7 @@ public class EndpointCertificatesTest { private final String testCertName = "testCertName"; private ZoneId testZone; - @Before + @BeforeEach public void setUp() { tester.zoneRegistry().exclusiveRoutingIn(tester.zoneRegistry().zones().all().zones()); testZone = tester.zoneRegistry().zones().all().routingMethod(RoutingMethod.exclusive).in(Environment.prod).zones().stream().findFirst().orElseThrow().getId(); @@ -115,7 +115,7 @@ public class EndpointCertificatesTest { } @Test - public void provisions_new_certificate_in_dev() { + void provisions_new_certificate_in_dev() { ZoneId testZone = tester.zoneRegistry().zones().all().routingMethod(RoutingMethod.exclusive).in(Environment.dev).zones().stream().findFirst().orElseThrow().getId(); Optional<EndpointCertificateMetadata> endpointCertificateMetadata = endpointCertificates.getMetadata(testInstance, testZone, DeploymentSpec.empty); assertTrue(endpointCertificateMetadata.isPresent()); @@ -126,7 +126,7 @@ public class EndpointCertificatesTest { } @Test - public void provisions_new_certificate_in_prod() { + void provisions_new_certificate_in_prod() { Optional<EndpointCertificateMetadata> endpointCertificateMetadata = endpointCertificates.getMetadata(testInstance, testZone, DeploymentSpec.empty); assertTrue(endpointCertificateMetadata.isPresent()); assertTrue(endpointCertificateMetadata.get().keyName().matches("vespa.tls.default.default.*-key")); @@ -136,7 +136,7 @@ public class EndpointCertificatesTest { } @Test - public void provisions_new_certificate_in_public_prod() { + void provisions_new_certificate_in_public_prod() { ControllerTester tester = new ControllerTester(SystemName.Public); EndpointCertificateValidatorImpl endpointCertificateValidator = new EndpointCertificateValidatorImpl(secretStore, clock); EndpointCertificates endpointCertificates = new EndpointCertificates(tester.controller(), endpointCertificateMock, endpointCertificateValidator); @@ -160,7 +160,7 @@ public class EndpointCertificatesTest { } @Test - public void reuses_stored_certificate_metadata() { + void reuses_stored_certificate_metadata() { mockCuratorDb.writeEndpointCertificateMetadata(testInstance.id(), new EndpointCertificateMetadata(testKeyName, testCertName, 7, 0, "request_id", Optional.of("leaf-request-uuid"), List.of("vt2ktgkqme5zlnp4tj4ttyor7fj3v7q5o.vespa.oath.cloud", "default.default.global.vespa.oath.cloud", @@ -178,7 +178,7 @@ public class EndpointCertificatesTest { } @Test - public void reprovisions_certificate_when_necessary() { + void reprovisions_certificate_when_necessary() { mockCuratorDb.writeEndpointCertificateMetadata(testInstance.id(), new EndpointCertificateMetadata(testKeyName, testCertName, -1, 0, "root-request-uuid", Optional.of("leaf-request-uuid"), List.of(), "issuer", Optional.empty(), Optional.empty())); secretStore.setSecret("vespa.tls.default.default.default-key", KeyUtils.toPem(testKeyPair.getPrivate()), 0); secretStore.setSecret("vespa.tls.default.default.default-cert", X509CertificateUtils.toPem(testCertificate) + X509CertificateUtils.toPem(testCertificate), 0); @@ -189,7 +189,7 @@ public class EndpointCertificatesTest { } @Test - public void reprovisions_certificate_with_added_sans_when_deploying_to_new_zone() { + void reprovisions_certificate_with_added_sans_when_deploying_to_new_zone() { ZoneId testZone = tester.zoneRegistry().zones().all().routingMethod(RoutingMethod.exclusive).in(Environment.prod).zones().stream().skip(1).findFirst().orElseThrow().getId(); mockCuratorDb.writeEndpointCertificateMetadata(testInstance.id(), new EndpointCertificateMetadata(testKeyName, testCertName, -1, 0, "original-request-uuid", Optional.of("leaf-request-uuid"), expectedSans, "mockCa", Optional.empty(), Optional.empty())); @@ -209,7 +209,7 @@ public class EndpointCertificatesTest { } @Test - public void includes_zones_in_deployment_spec_when_deploying_to_staging() { + void includes_zones_in_deployment_spec_when_deploying_to_staging() { DeploymentSpec deploymentSpec = new DeploymentSpecXmlReader(true).read( """ <deployment version="1.0"> @@ -233,7 +233,7 @@ public class EndpointCertificatesTest { } @Test - public void includes_application_endpoint_when_declared() { + void includes_application_endpoint_when_declared() { Instance instance = new Instance(ApplicationId.from("t1", "a1", "default")); ZoneId zone1 = ZoneId.from(Environment.prod, RegionName.from("aws-us-east-1c")); ZoneId zone2 = ZoneId.from(Environment.prod, RegionName.from("aws-us-west-2a")); @@ -242,14 +242,14 @@ public class EndpointCertificatesTest { .region(zone1.region()) .region(zone2.region()) .applicationEndpoint("a", "qrs", zone2.region().value(), - Map.of(InstanceName.from("beta"), 2, - InstanceName.from("main"), 8)) + Map.of(InstanceName.from("beta"), 2, + InstanceName.from("main"), 8)) .applicationEndpoint("b", "qrs", zone2.region().value(), - Map.of(InstanceName.from("beta"), 1, - InstanceName.from("main"), 1)) + Map.of(InstanceName.from("beta"), 1, + InstanceName.from("main"), 1)) .applicationEndpoint("c", "qrs", zone1.region().value(), - Map.of(InstanceName.from("beta"), 4, - InstanceName.from("main"), 6)) + Map.of(InstanceName.from("beta"), 4, + InstanceName.from("main"), 6)) .build(); ControllerTester tester = new ControllerTester(SystemName.Public); EndpointCertificateValidatorImpl endpointCertificateValidator = new EndpointCertificateValidatorImpl(secretStore, clock); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/concurrent/OnceTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/concurrent/OnceTest.java index e9426e96a80..c1a8f77f2e9 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/concurrent/OnceTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/concurrent/OnceTest.java @@ -1,21 +1,23 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.concurrent; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; import java.time.Duration; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden */ public class OnceTest { - @Test(timeout = 60_000) - public void test_run() throws Exception { + @Test + @Timeout(60_000) + void test_run() throws Exception { CountDownLatch latch = new CountDownLatch(1); Once.after(Duration.ZERO, latch::countDown); 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 ad236fcd4de..934c6b07c29 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 @@ -59,11 +59,11 @@ import java.util.function.Supplier; 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; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotSame; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * A deployment context for an application. This allows fine-grained control of the deployment of an application's @@ -194,10 +194,10 @@ public class DeploymentContext { /** Completely deploy the current change */ public DeploymentContext deploy() { Application application = application(); - assertTrue("Application package submitted", application.revisions().last().isPresent()); - assertFalse("Submission is not already deployed", application.instances().values().stream() + assertTrue(application.revisions().last().isPresent(), "Application package submitted"); + assertFalse(application.instances().values().stream() .anyMatch(instance -> instance.deployments().values().stream() - .anyMatch(deployment -> deployment.revision().equals(lastSubmission)))); + .anyMatch(deployment -> deployment.revision().equals(lastSubmission))), "Submission is not already deployed"); completeRollout(application.deploymentSpec().instances().size() > 1); for (var instance : application().instances().values()) { assertFalse(instance.change().hasTargets()); @@ -249,8 +249,8 @@ public class DeploymentContext { /** Flush all pending DNS updates */ public DeploymentContext flushDnsUpdates() { flushDnsUpdates(Integer.MAX_VALUE); - assertTrue("All name service requests dispatched", - tester.controller().curator().readNameServiceQueue().requests().isEmpty()); + assertTrue(tester.controller().curator().readNameServiceQueue().requests().isEmpty(), + "All name service requests dispatched"); return this; } @@ -362,12 +362,12 @@ public class DeploymentContext { .filter(kv -> kv.getValue() == failed) .map(Entry::getKey) .findFirst(); - assertTrue("Found failing step", firstFailing.isPresent()); + assertTrue(firstFailing.isPresent(), "Found failing step"); Optional<RunLog> details = jobs.details(id); - assertTrue("Found log entries for run " + id, details.isPresent()); - assertTrue("Found log message containing '" + messagePart.get() + "'", - details.get().get(firstFailing.get()).stream() - .anyMatch(entry -> entry.message().contains(messagePart.get()))); + assertTrue(details.isPresent(), "Found log entries for run " + id); + assertTrue(details.get().get(firstFailing.get()).stream() + .anyMatch(entry -> entry.message().contains(messagePart.get())), + "Found log message containing '" + messagePart.get() + "'"); } return this; } @@ -400,7 +400,7 @@ public class DeploymentContext { triggerJobs(); } - assertFalse("Change should have no targets, but was " + instance().change(), instance().change().hasTargets()); + assertFalse(instance().change().hasTargets(), "Change should have no targets, but was " + instance().change()); return this; } @@ -545,13 +545,13 @@ public class DeploymentContext { } public void assertRunning(JobType type) { - assertTrue(jobId(type) + " should be among the active: " + jobs.active(), - jobs.active().stream().anyMatch(run -> run.id().application().equals(instanceId) && run.id().type().equals(type))); + assertTrue(jobs.active().stream().anyMatch(run -> run.id().application().equals(instanceId) && run.id().type().equals(type)), + jobId(type) + " should be among the active: " + jobs.active()); } public void assertNotRunning(JobType type) { - assertFalse(jobId(type) + " should not be among the active: " + jobs.active(), - jobs.active().stream().anyMatch(run -> run.id().application().equals(instanceId) && run.id().type().equals(type))); + assertFalse(jobs.active().stream().anyMatch(run -> run.id().application().equals(instanceId) && run.id().type().equals(type)), + jobId(type) + " should not be among the active: " + jobs.active()); } /** Deploys tester and real app, and completes tester and initial staging installation first if needed. */ @@ -604,8 +604,8 @@ public class DeploymentContext { Run run = jobs.last(job) .filter(r -> r.id().type().equals(job.type())) .orElseThrow(() -> new AssertionError(job.type() + " is not among the active: " + jobs.active())); - assertFalse(run.id() + " should not have failed yet: " + run, run.hasFailed()); - assertFalse(run.id() + " should not have ended yet: " + run, run.hasEnded()); + assertFalse(run.hasFailed(), run.id() + " should not have failed yet: " + run); + assertFalse(run.hasEnded(), run.id() + " should not have ended yet: " + run); return run; } @@ -622,7 +622,7 @@ public class DeploymentContext { assertTrue(jobs.run(id).hasEnded()); return; } - assertEquals("Status of " + id, succeeded, jobs.run(id).stepStatuses().get(Step.installReal)); + assertEquals(succeeded, jobs.run(id).stepStatuses().get(Step.installReal), "Status of " + id); } /** Installs tester and starts tests. */ 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 2b4a2baa17e..c9553ef5bf1 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 @@ -27,7 +27,7 @@ import java.time.temporal.TemporalAdjusters; import java.util.logging.Level; import java.util.logging.Logger; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author jonmv 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 08fc6df37fb..62fafa12993 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 @@ -24,8 +24,7 @@ import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.integration.ZoneRegistryMock; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -61,11 +60,11 @@ import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.tes import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger.ChangesToCancel.ALL; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger.ChangesToCancel.PLATFORM; import static java.util.Collections.emptyList; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Tests a wide variety of deployment scenarios and configurations @@ -79,7 +78,7 @@ public class DeploymentTriggerTest { private final DeploymentTester tester = new DeploymentTester(); @Test - public void testTriggerFailing() { + void testTriggerFailing() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .upgradePolicy("default") .region("us-west-1") @@ -96,7 +95,7 @@ public class DeploymentTriggerTest { // staging-test fails deployment and is retried app.failDeployment(stagingTest); tester.triggerJobs(); - assertEquals("Retried dead job", 2, tester.jobs().active().size()); + assertEquals(2, tester.jobs().active().size(), "Retried dead job"); app.assertRunning(stagingTest); app.runJob(stagingTest); @@ -107,7 +106,7 @@ public class DeploymentTriggerTest { // system-test fails and is retried app.timeOutUpgrade(systemTest); tester.triggerJobs(); - assertEquals("Job is retried on failure", 1, tester.jobs().active().size()); + assertEquals(1, tester.jobs().active().size(), "Job is retried on failure"); app.runJob(systemTest); tester.triggerJobs(); @@ -118,11 +117,11 @@ public class DeploymentTriggerTest { tester.applications().store(locked.withProjectId(OptionalLong.empty()))); app.timeOutConvergence(productionUsWest1); tester.triggerJobs(); - assertEquals("Job is not triggered when no projectId is present", 0, tester.jobs().active().size()); + assertEquals(0, tester.jobs().active().size(), "Job is not triggered when no projectId is present"); } @Test - public void revisionChangeWhenFailingMakesApplicationChangeWaitForPreviousToComplete() { + void revisionChangeWhenFailingMakesApplicationChangeWaitForPreviousToComplete() { DeploymentContext app = tester.newDeploymentContext(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .revisionChange(null) // separate by default, but we override this in test builder @@ -156,10 +155,10 @@ public class DeploymentTriggerTest { } @Test - public void leadingUpgradeAllowsApplicationChangeWhileUpgrading() { + void leadingUpgradeAllowsApplicationChangeWhileUpgrading() { var applicationPackage = new ApplicationPackageBuilder().region("us-east-3") - .upgradeRollout("leading") - .build(); + .upgradeRollout("leading") + .build(); var app = tester.newDeploymentContext(); app.submit(applicationPackage).deploy(); @@ -177,11 +176,11 @@ public class DeploymentTriggerTest { } @Test - public void abortsJobsOnNewApplicationChange() { + void abortsJobsOnNewApplicationChange() { var app = tester.newDeploymentContext(); app.submit() - .runJob(systemTest) - .runJob(stagingTest); + .runJob(systemTest) + .runJob(stagingTest); tester.triggerJobs(); RunId id = tester.jobs().last(app.instanceId(), productionUsCentral1).get().id(); @@ -221,12 +220,12 @@ public class DeploymentTriggerTest { tester.triggerJobs(); tester.runner().run(); assertEquals(Set.of(productionUsCentral1), tester.jobs().active().stream() - .map(run -> run.id().type()) - .collect(Collectors.toCollection(HashSet::new))); + .map(run -> run.id().type()) + .collect(Collectors.toCollection(HashSet::new))); } @Test - public void similarDeploymentSpecsAreNotRolledOut() { + void similarDeploymentSpecsAreNotRolledOut() { ApplicationPackage firstPackage = new ApplicationPackageBuilder() .region("us-east-3") .build(); @@ -235,8 +234,8 @@ public class DeploymentTriggerTest { var version = app.lastSubmission(); assertEquals(version, app.instance().change().revision()); app.runJob(systemTest) - .runJob(stagingTest) - .runJob(productionUsEast3); + .runJob(stagingTest) + .runJob(productionUsEast3); assertEquals(Change.empty(), app.instance().change()); // A similar application package is submitted. Since a new job is added, the original revision is again a target. @@ -266,13 +265,13 @@ public class DeploymentTriggerTest { } @Test - public void testOutstandingChangeWithNextRevisionTarget() { + void testOutstandingChangeWithNextRevisionTarget() { ApplicationPackage appPackage = new ApplicationPackageBuilder().revisionTarget("next") - .revisionChange("when-failing") - .region("us-east-3") - .build(); + .revisionChange("when-failing") + .region("us-east-3") + .build(); DeploymentContext app = tester.newDeploymentContext() - .submit(appPackage); + .submit(appPackage); Optional<RevisionId> revision1 = app.lastSubmission(); app.submit(appPackage); @@ -300,7 +299,7 @@ public class DeploymentTriggerTest { // The second revision deploys completely, and the third starts rolling out. app.runJob(systemTest).runJob(stagingTest) - .runJob(productionUsEast3); + .runJob(productionUsEast3); tester.outstandingChangeDeployer().run(); tester.outstandingChangeDeployer().run(); assertEquals(revision3, app.instance().change().revision()); @@ -315,8 +314,8 @@ public class DeploymentTriggerTest { // Tests for outstanding change are relevant when current revision completes. app.runJob(systemTest).runJob(systemTest) - .jobAborted(stagingTest).runJob(stagingTest).runJob(stagingTest) - .runJob(productionUsEast3); + .jobAborted(stagingTest).runJob(stagingTest).runJob(stagingTest) + .runJob(productionUsEast3); tester.outstandingChangeDeployer().run(); tester.outstandingChangeDeployer().run(); assertEquals(revision5, app.instance().change().revision()); @@ -325,7 +324,7 @@ public class DeploymentTriggerTest { } @Test - public void deploymentSpecWithDelays() { + void deploymentSpecWithDelays() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .systemTest() .delay(Duration.ofSeconds(30)) @@ -363,27 +362,27 @@ public class DeploymentTriggerTest { // Delayed trigger does nothing as not enough time has passed after us-west-1 completion tester.triggerJobs(); - assertTrue("No more jobs triggered at this time", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "No more jobs triggered at this time"); // 3 minutes pass, us-central-1 is still not triggered tester.clock().advance(Duration.ofMinutes(3)); tester.triggerJobs(); - assertTrue("No more jobs triggered at this time", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "No more jobs triggered at this time"); // 4 minutes pass, us-central-1 is triggered tester.clock().advance(Duration.ofMinutes(1)); tester.triggerJobs(); app.runJob(productionUsCentral1); - assertTrue("All jobs consumed", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "All jobs consumed"); // Delayed trigger job runs again, with nothing to trigger tester.clock().advance(Duration.ofMinutes(10)); tester.triggerJobs(); - assertTrue("All jobs consumed", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "All jobs consumed"); } @Test - public void deploymentSpecWithParallelDeployments() { + void deploymentSpecWithParallelDeployments() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-central-1") .parallel("us-west-1", "us-east-3") @@ -416,11 +415,11 @@ public class DeploymentTriggerTest { tester.triggerJobs(); assertEquals(1, tester.jobs().active().size()); app.runJob(productionEuWest1); - assertTrue("All jobs consumed", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "All jobs consumed"); } @Test - public void testNoOtherChangesDuringSuspension() { + void testNoOtherChangesDuringSuspension() { // Application is deployed in 3 regions: ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-central-1") @@ -433,9 +432,9 @@ public class DeploymentTriggerTest { // A new change needs to be pushed out, but should not go beyond the suspended zone: application.submit() - .runJob(systemTest) - .runJob(stagingTest) - .runJob(productionUsCentral1); + .runJob(systemTest) + .runJob(stagingTest) + .runJob(productionUsCentral1); tester.triggerJobs(); application.assertNotRunning(productionUsEast3); application.assertNotRunning(productionUsWest1); @@ -448,7 +447,7 @@ public class DeploymentTriggerTest { } @Test - public void testBlockRevisionChange() { + void testBlockRevisionChange() { // Tuesday, 17:30 tester.at(Instant.parse("2017-09-26T17:30:00.00Z")); @@ -491,7 +490,7 @@ public class DeploymentTriggerTest { } @Test - public void testCompletionOfPartOfChangeDuringBlockWindow() { + void testCompletionOfPartOfChangeDuringBlockWindow() { // Tuesday, 17:30 tester.at(Instant.parse("2017-09-26T17:30:00.00Z")); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() @@ -539,7 +538,7 @@ public class DeploymentTriggerTest { } @Test - public void testJobPause() { + void testJobPause() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") .region("us-east-3") @@ -549,9 +548,9 @@ public class DeploymentTriggerTest { tester.upgrader().maintain(); tester.deploymentTrigger().pauseJob(app.instanceId(), productionUsWest1, - tester.clock().instant().plus(Duration.ofSeconds(1))); + tester.clock().instant().plus(Duration.ofSeconds(1))); tester.deploymentTrigger().pauseJob(app.instanceId(), productionUsEast3, - tester.clock().instant().plus(Duration.ofSeconds(3))); + tester.clock().instant().plus(Duration.ofSeconds(3))); // us-west-1 does not trigger when paused. app.runJob(systemTest).runJob(stagingTest); @@ -578,11 +577,11 @@ public class DeploymentTriggerTest { app.assertRunning(productionUsEast3); assertFalse(app.instance().jobPause(productionUsEast3).isPresent()); assertEquals(app.deployment(productionUsEast3.zone()).version(), - tester.jobs().last(app.instanceId(), productionUsEast3).get().versions().targetPlatform()); + tester.jobs().last(app.instanceId(), productionUsEast3).get().versions().targetPlatform()); } @Test - public void applicationVersionIsNotDowngraded() { + void applicationVersionIsNotDowngraded() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-central-1") .region("eu-west-1") @@ -591,9 +590,9 @@ public class DeploymentTriggerTest { // productionUsCentral1 fails after deployment, causing a mismatch between deployed and successful state. app.submit(applicationPackage) - .runJob(systemTest) - .runJob(stagingTest) - .timeOutUpgrade(productionUsCentral1); + .runJob(systemTest) + .runJob(stagingTest) + .timeOutUpgrade(productionUsCentral1); RevisionId appVersion1 = app.lastSubmission().get(); assertEquals(appVersion1, app.deployment(ZoneId.from("prod.us-central-1")).revision()); @@ -629,7 +628,7 @@ public class DeploymentTriggerTest { } @Test - public void downgradingApplicationVersionWorks() { + void downgradingApplicationVersionWorks() { var app = tester.newDeploymentContext().submit().deploy(); RevisionId appVersion0 = app.lastSubmission().get(); assertEquals(appVersion0, latestDeployed(app.instance())); @@ -642,16 +641,16 @@ public class DeploymentTriggerTest { tester.deploymentTrigger().forceChange(app.instanceId(), Change.of(appVersion0)); assertEquals(Change.of(appVersion0), app.instance().change()); app.runJob(stagingTest) - .runJob(productionUsCentral1) - .runJob(productionUsEast3) - .runJob(productionUsWest1); + .runJob(productionUsCentral1) + .runJob(productionUsEast3) + .runJob(productionUsWest1); assertEquals(Change.empty(), app.instance().change()); assertEquals(appVersion0, app.instance().deployments().get(productionUsEast3.zone()).revision()); assertEquals(appVersion0, latestDeployed(app.instance())); } @Test - public void settingANoOpChangeIsANoOp() { + void settingANoOpChangeIsANoOp() { var app = tester.newDeploymentContext().submit(); app.deploy(); @@ -670,7 +669,7 @@ public class DeploymentTriggerTest { } @Test - public void stepIsCompletePreciselyWhenItShouldBe() { + void stepIsCompletePreciselyWhenItShouldBe() { var app1 = tester.newDeploymentContext("tenant1", "app1", "default"); var app2 = tester.newDeploymentContext("tenant1", "app2", "default"); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() @@ -707,11 +706,11 @@ public class DeploymentTriggerTest { tester.upgrader().overrideConfidence(version2, VespaVersion.Confidence.broken); tester.controllerTester().computeVersionStatus(); tester.upgrader().maintain(); // Cancel upgrades to broken version - assertEquals("Change becomes latest non-broken version", Change.of(version1), app1.instance().change()); + assertEquals(Change.of(version1), app1.instance().change(), "Change becomes latest non-broken version"); // version1 proceeds 'til the last job, where it fails; us-central-1 is skipped, as current change is strictly dominated by what's deployed there. app1.runJob(systemTest).runJob(stagingTest) - .failDeployment(productionEuWest1); + .failDeployment(productionEuWest1); assertEquals(triggered, app1.instanceJobs().get(productionUsCentral1).lastTriggered().get().start()); // Roll out a new application version, which gives a dual change -- this should trigger us-central-1, but only as long as it hasn't yet deployed there. @@ -719,9 +718,9 @@ public class DeploymentTriggerTest { app1.submit(applicationPackage); RevisionId revision2 = app1.lastSubmission().get(); app1.runJob(systemTest) // Tests for new revision on version2 - .runJob(stagingTest) - .runJob(systemTest) // Tests for new revision on version1 - .runJob(stagingTest); + .runJob(stagingTest) + .runJob(systemTest) // Tests for new revision on version1 + .runJob(stagingTest); assertEquals(Change.of(version1).with(revision2), app1.instance().change()); tester.triggerJobs(); app1.assertRunning(productionUsCentral1); @@ -742,14 +741,14 @@ public class DeploymentTriggerTest { // Last job has a different deployment target, so tests need to run again. app1.runJob(productionEuWest1) // Upgrade completes, and revision is the only change. - .runJob(productionUsCentral1) // With only revision change, central should run to cover a previous failure. - .runJob(productionEuWest1); // Finally, west changes revision. + .runJob(productionUsCentral1) // With only revision change, central should run to cover a previous failure. + .runJob(productionEuWest1); // Finally, west changes revision. assertEquals(Change.empty(), app1.instance().change()); assertEquals(Optional.of(RunStatus.success), app1.instanceJobs().get(productionUsCentral1).lastStatus()); } @Test - public void eachParallelDeployTargetIsTested() { + void eachParallelDeployTargetIsTested() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .parallel("eu-west-1", "us-east-3") .build(); @@ -789,14 +788,14 @@ public class DeploymentTriggerTest { // Both jobs fail again, and must be re-triggered -- this is ok, as they are both already triggered on their current targets. app.failDeployment(productionEuWest1).failDeployment(productionUsEast3) - .runJob(productionEuWest1).runJob(productionUsEast3); + .runJob(productionEuWest1).runJob(productionUsEast3); assertFalse(app.instance().change().hasTargets()); assertEquals(2, app.instanceJobs().get(productionEuWest1).lastSuccess().get().versions().targetRevision().number()); assertEquals(2, app.instanceJobs().get(productionUsEast3).lastSuccess().get().versions().targetRevision().number()); } @Test - public void retriesFailingJobs() { + void retriesFailingJobs() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-central-1") .build(); @@ -841,11 +840,11 @@ public class DeploymentTriggerTest { // Another application change is deployed and fixes system-test. Change is triggered immediately as target changes app.submit(applicationPackage).deploy(); - assertTrue("Deployment completed", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "Deployment completed"); } @Test - public void testPlatformVersionSelection() { + void testPlatformVersionSelection() { // Setup system ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") @@ -856,7 +855,7 @@ public class DeploymentTriggerTest { // First deployment: An application change app1.submit(applicationPackage).deploy(); - assertEquals("First deployment gets system version", version1, app1.application().oldestDeployedPlatform().get()); + assertEquals(version1, app1.application().oldestDeployedPlatform().get(), "First deployment gets system version"); assertEquals(version1, tester.configServer().lastPrepareVersion().get()); // Application change after a new system version, and a region added @@ -868,20 +867,19 @@ public class DeploymentTriggerTest { .region("us-east-3") .build(); app1.submit(applicationPackage).deploy(); - assertEquals("Application change preserves version, and new region gets oldest version too", - version1, app1.application().oldestDeployedPlatform().get()); + assertEquals(version1, app1.application().oldestDeployedPlatform().get(), "Application change preserves version, and new region gets oldest version too"); assertEquals(version1, tester.configServer().lastPrepareVersion().get()); - assertFalse("Change deployed", app1.instance().change().hasTargets()); + assertFalse(app1.instance().change().hasTargets(), "Change deployed"); tester.upgrader().maintain(); app1.deployPlatform(version2); - assertEquals("Version upgrade changes version", version2, app1.application().oldestDeployedPlatform().get()); + assertEquals(version2, app1.application().oldestDeployedPlatform().get(), "Version upgrade changes version"); assertEquals(version2, tester.configServer().lastPrepareVersion().get()); } @Test - public void requeueNodeAllocationFailureStagingJob() { + void requeueNodeAllocationFailureStagingJob() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-east-3") .build(); @@ -980,14 +978,14 @@ public class DeploymentTriggerTest { } @Test - public void testUserInstancesNotInDeploymentSpec() { + void testUserInstancesNotInDeploymentSpec() { var app = tester.newDeploymentContext(); tester.controller().applications().createInstance(app.application().id().instance("user")); app.submit().deploy(); } @Test - public void testMultipleInstancesWithDifferentChanges() { + void testMultipleInstancesWithDifferentChanges() { DeploymentContext i1 = tester.newDeploymentContext("t", "a", "i1"); DeploymentContext i2 = tester.newDeploymentContext("t", "a", "i2"); DeploymentContext i3 = tester.newDeploymentContext("t", "a", "i3"); @@ -1098,7 +1096,7 @@ public class DeploymentTriggerTest { } @Test - public void testMultipleInstancesWithRevisionCatchingUpToUpgrade() { + void testMultipleInstancesWithRevisionCatchingUpToUpgrade() { String spec = """ <deployment> <instance id='alpha'> @@ -1161,28 +1159,28 @@ public class DeploymentTriggerTest { beta.assertNotRunning(testUsEast3); beta.runJob(productionUsEast3) - .runJob(testUsEast3); + .runJob(testUsEast3); assertEquals(Change.empty(), beta.instance().change()); } @Test - public void testMultipleInstances() { + void testMultipleInstances() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .instances("instance1,instance2") .region("us-east-3") .build(); var app = tester.newDeploymentContext("tenant1", "application1", "instance1") - .submit(applicationPackage) - .completeRollout(); + .submit(applicationPackage) + .completeRollout(); assertEquals(2, app.application().instances().size()); assertEquals(2, app.application().productionDeployments().values().stream() - .mapToInt(Collection::size) - .sum()); + .mapToInt(Collection::size) + .sum()); } @Test - public void testDeclaredProductionTests() { + void testDeclaredProductionTests() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-east-3") .delay(Duration.ofMinutes(1)) @@ -1199,8 +1197,8 @@ public class DeploymentTriggerTest { tester.clock().advance(Duration.ofMinutes(1)); app.runJob(testUsEast3) - .runJob(productionUsWest1).runJob(productionUsCentral1) - .runJob(testUsCentral1).runJob(testUsWest1); + .runJob(productionUsWest1).runJob(productionUsCentral1) + .runJob(testUsCentral1).runJob(testUsWest1); assertEquals(Change.empty(), app.instance().change()); // Application starts upgrade, but is confidence is broken cancelled after first zone. Tests won't run. @@ -1250,7 +1248,7 @@ public class DeploymentTriggerTest { } @Test - public void testDeployComplicatedDeploymentSpec() { + void testDeployComplicatedDeploymentSpec() { String complicatedDeploymentSpec = """ <deployment version='1.0' athenz-domain='domain' athenz-service='service'> @@ -1400,14 +1398,14 @@ public class DeploymentTriggerTest { // Upgrade platform. app2.runJob(systemTest); app1.runJob(stagingTest) - .runJob(productionUsWest1) - .runJob(productionUsEast3); + .runJob(productionUsWest1) + .runJob(productionUsEast3); // Upgrade revision tester.clock().advance(Duration.ofSeconds(1)); // Ensure we see revision as rolling after upgrade. app2.runJob(systemTest); // R app1.runJob(stagingTest) // R - .runJob(productionUsWest1); // R - // productionUsEast3 won't change revision before its production test has completed for the upgrade, which is one of the last jobs! + .runJob(productionUsWest1); // R + // productionUsEast3 won't change revision before its production test has completed for the upgrade, which is one of the last jobs! tester.clock().advance(Duration.ofHours(2)); app1.runJob(productionEuWest1); tester.clock().advance(Duration.ofHours(1)); @@ -1443,13 +1441,13 @@ public class DeploymentTriggerTest { tester.upgrader().maintain(); tester.outstandingChangeDeployer().run(); tester.triggerJobs(); - assertEquals(tester.jobs().active().toString(), 1, tester.jobs().active().size()); + assertEquals(1, tester.jobs().active().size(), tester.jobs().active().toString()); assertEquals(Change.empty(), app1.instance().change()); assertEquals(Change.of(version), app2.instance().change()); assertEquals(Change.empty(), app3.instance().change()); app2.runJob(productionEuWest1) - .failDeployment(testEuWest1); + .failDeployment(testEuWest1); // Instance 2 failed the last job, and now exits block window, letting application change roll out with the upgrade. tester.clock().advance(Duration.ofDays(1)); // Leave block window for revisions. @@ -1462,7 +1460,7 @@ public class DeploymentTriggerTest { assertEquals(Change.of(version).with(app1.application().revisions().last().get().id()), app2.instance().change()); app2.runJob(productionEuWest1) - .runJob(testEuWest1); + .runJob(testEuWest1); assertEquals(Change.empty(), app2.instance().change()); assertEquals(Change.empty(), app3.instance().change()); @@ -1486,12 +1484,12 @@ public class DeploymentTriggerTest { } @Test - public void testRevisionJoinsUpgradeWithSeparateRollout() { + void testRevisionJoinsUpgradeWithSeparateRollout() { var appPackage = new ApplicationPackageBuilder().region("us-central-1") - .region("us-east-3") - .region("us-west-1") - .upgradeRollout("separate") - .build(); + .region("us-east-3") + .region("us-west-1") + .upgradeRollout("separate") + .build(); var app = tester.newDeploymentContext().submit(appPackage).deploy(); // Platform rolls through first production zone. @@ -1512,20 +1510,20 @@ public class DeploymentTriggerTest { // Upgrade got here first, so attempts to proceed alone, but the upgrade fails. app.triggerJobs(); assertEquals(new Versions(version1, revision0.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); + tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); app.timeOutConvergence(productionUsEast3); // Revision is allowed to join. app.triggerJobs(); assertEquals(new Versions(version1, revision1.get(), Optional.of(version1), revision0), - tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); + tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); app.runJob(productionUsEast3); // Platform and revision now proceed together. app.runJob(stagingTest); app.triggerJobs(); assertEquals(new Versions(version1, revision1.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); + tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); app.runJob(productionUsWest1); assertEquals(Change.empty(), app.instance().change()); @@ -1539,23 +1537,23 @@ public class DeploymentTriggerTest { app.submit(appPackage); app.runJob(systemTest).runJob(stagingTest) // Tests run with combined upgrade. - .runJob(productionUsCentral1) // Combined upgrade stays together. - .runJob(productionUsEast3).runJob(productionUsWest1); + .runJob(productionUsCentral1) // Combined upgrade stays together. + .runJob(productionUsEast3).runJob(productionUsWest1); assertEquals(Map.of(), app.deploymentStatus().jobsToRun()); assertEquals(Change.empty(), app.instance().change()); } @Test - public void testProductionTestBlockingDeploymentWithSeparateRollout() { + void testProductionTestBlockingDeploymentWithSeparateRollout() { var appPackage = new ApplicationPackageBuilder().region("us-east-3") - .region("us-west-1") - .delay(Duration.ofHours(1)) - .test("us-east-3") - .upgradeRollout("separate") - .build(); + .region("us-west-1") + .delay(Duration.ofHours(1)) + .test("us-east-3") + .upgradeRollout("separate") + .build(); var app = tester.newDeploymentContext().submit(appPackage) - .runJob(systemTest).runJob(stagingTest) - .runJob(productionUsEast3).runJob(productionUsWest1); + .runJob(systemTest).runJob(stagingTest) + .runJob(productionUsEast3).runJob(productionUsWest1); tester.clock().advance(Duration.ofHours(1)); app.runJob(testUsEast3); assertEquals(Change.empty(), app.instance().change()); @@ -1579,13 +1577,13 @@ public class DeploymentTriggerTest { // Upgrade got here first, so attempts to proceed alone, but the upgrade fails. app.triggerJobs(); assertEquals(new Versions(version1, revision0.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); + tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); app.timeOutConvergence(productionUsWest1).triggerJobs(); // Upgrade now fails between us-east-3 deployment and test, so test is abandoned, and revision unblocked. app.assertRunning(productionUsEast3); assertEquals(new Versions(version1, revision1.get(), Optional.of(version1), revision0), - tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); + tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); app.runJob(productionUsEast3).triggerJobs() .jobAborted(productionUsWest1).runJob(productionUsWest1); tester.clock().advance(Duration.ofHours(1)); @@ -1594,15 +1592,15 @@ public class DeploymentTriggerTest { } @Test - public void testProductionTestNotBlockingDeploymentWithSimultaneousRollout() { + void testProductionTestNotBlockingDeploymentWithSimultaneousRollout() { var appPackage = new ApplicationPackageBuilder().region("us-east-3") - .region("us-central-1") - .region("us-west-1") - .delay(Duration.ofHours(1)) - .test("us-east-3") - .test("us-west-1") - .upgradeRollout("simultaneous") - .build(); + .region("us-central-1") + .region("us-west-1") + .delay(Duration.ofHours(1)) + .test("us-east-3") + .test("us-west-1") + .upgradeRollout("simultaneous") + .build(); var app = tester.newDeploymentContext().submit(appPackage) .runJob(systemTest).runJob(stagingTest) .runJob(productionUsEast3).runJob(productionUsCentral1).runJob(productionUsWest1); @@ -1629,7 +1627,7 @@ public class DeploymentTriggerTest { // Revision deploys to first prod zone. app.triggerJobs(); assertEquals(new Versions(version1, revision1.get(), Optional.of(version1), revision0), - tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); + tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); tester.clock().advance(Duration.ofSeconds(1)); app.runJob(productionUsEast3); @@ -1637,12 +1635,12 @@ public class DeploymentTriggerTest { app.runJob(systemTest).runJob(stagingTest).runJob(stagingTest).triggerJobs(); app.jobAborted(productionUsCentral1).triggerJobs(); assertEquals(new Versions(version1, revision1.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsCentral1).get().versions()); + tester.jobs().last(app.instanceId(), productionUsCentral1).get().versions()); app.runJob(productionUsCentral1).triggerJobs(); // Revision proceeds alone in third prod zone, making test targets different for the two prod tests. assertEquals(new Versions(version0, revision1.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); + tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); app.runJob(productionUsWest1); app.triggerJobs(); app.assertNotRunning(testUsEast3); @@ -1656,7 +1654,7 @@ public class DeploymentTriggerTest { } @Test - public void testVeryLengthyPipelineRevisions() { + void testVeryLengthyPipelineRevisions() { String lengthyDeploymentSpec = """ <deployment version='1.0'> @@ -1697,7 +1695,7 @@ public class DeploymentTriggerTest { var revision2 = alpha.lastSubmission(); alpha.runJob(systemTest).runJob(stagingTest) - .runJob(productionUsEast3).runJob(testUsEast3); + .runJob(productionUsEast3).runJob(testUsEast3); assertEquals(Optional.empty(), alpha.instance().change().revision()); // revision3 is submitted when revision2 is half-way. @@ -1716,7 +1714,7 @@ public class DeploymentTriggerTest { // revision3 rolls to beta, then a couple of new revisions are submitted to alpha, and the latter is the new target. alpha.runJob(systemTest).runJob(stagingTest) - .runJob(productionUsEast3).runJob(testUsEast3); + .runJob(productionUsEast3).runJob(testUsEast3); tester.outstandingChangeDeployer().run(); assertEquals(Optional.empty(), alpha.instance().change().revision()); assertEquals(revision3, beta.instance().change().revision()); @@ -1725,11 +1723,11 @@ public class DeploymentTriggerTest { alpha.submit(appPackage, 3); var revision4 = alpha.lastSubmission(); alpha.runJob(systemTest).runJob(stagingTest) - .runJob(productionUsEast3); + .runJob(productionUsEast3); alpha.submit(appPackage, 2); var revision5 = alpha.lastSubmission(); alpha.runJob(systemTest).runJob(stagingTest) - .runJob(productionUsEast3).runJob(testUsEast3); + .runJob(productionUsEast3).runJob(testUsEast3); tester.outstandingChangeDeployer().run(); assertEquals(Optional.empty(), alpha.instance().change().revision()); assertEquals(revision3, beta.instance().change().revision()); @@ -1738,8 +1736,8 @@ public class DeploymentTriggerTest { alpha.submit(appPackage, 6); var revision6 = alpha.lastSubmission(); alpha.runJob(systemTest).runJob(stagingTest) - .runJob(productionUsEast3) - .runJob(testUsEast3); + .runJob(productionUsEast3) + .runJob(testUsEast3); beta.runJob(productionUsEast3).runJob(testUsEast3); tester.outstandingChangeDeployer().run(); assertEquals(Optional.empty(), alpha.instance().change().revision()); @@ -1752,7 +1750,7 @@ public class DeploymentTriggerTest { // revision 2 completes in gamma gamma.runJob(productionUsEast3) - .runJob(testUsEast3); + .runJob(testUsEast3); tester.outstandingChangeDeployer().run(); assertEquals(Optional.empty(), alpha.instance().change().revision()); assertEquals(Optional.empty(), gamma.instance().change().revision()); // no other revisions after 3 are ready, so gamma waits @@ -1770,7 +1768,7 @@ public class DeploymentTriggerTest { // revision 6 is next, once 3 is done // revision 3 completes gamma.runJob(productionUsEast3) - .runJob(testUsEast3); + .runJob(testUsEast3); tester.outstandingChangeDeployer().run(); assertEquals(revision6, gamma.instance().change().revision()); @@ -1801,7 +1799,7 @@ public class DeploymentTriggerTest { } @Test - public void testVeryLengthyPipelineUpgrade() { + void testVeryLengthyPipelineUpgrade() { String lengthyDeploymentSpec = """ <deployment version='1.0'> @@ -1844,7 +1842,7 @@ public class DeploymentTriggerTest { tester.upgrader().maintain(); alpha.runJob(systemTest).runJob(stagingTest) - .runJob(productionUsEast3).runJob(testUsEast3); + .runJob(productionUsEast3).runJob(testUsEast3); assertEquals(Change.empty(), alpha.instance().change()); tester.upgrader().maintain(); @@ -1860,12 +1858,12 @@ public class DeploymentTriggerTest { } @Test - public void testRevisionJoinsUpgradeWithLeadingRollout() { + void testRevisionJoinsUpgradeWithLeadingRollout() { var appPackage = new ApplicationPackageBuilder().region("us-central-1") - .region("us-east-3") - .region("us-west-1") - .upgradeRollout("leading") - .build(); + .region("us-east-3") + .region("us-west-1") + .upgradeRollout("leading") + .build(); var app = tester.newDeploymentContext().submit(appPackage).deploy(); // Platform rolls through first production zone. @@ -1886,7 +1884,7 @@ public class DeploymentTriggerTest { // Upgrade got here first, and has triggered, but is now obsolete. app.triggerJobs(); assertEquals(new Versions(version1, revision0.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); + tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); assertEquals(RunStatus.running, tester.jobs().last(app.instanceId(), productionUsEast3).get().status()); // Once staging tests verify the joint upgrade, the job is replaced with that. @@ -1894,23 +1892,23 @@ public class DeploymentTriggerTest { app.triggerJobs(); app.jobAborted(productionUsEast3).runJob(productionUsEast3); assertEquals(new Versions(version1, revision1.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); + tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); // Platform and revision now proceed together. app.triggerJobs(); assertEquals(new Versions(version1, revision1.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); + tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); app.runJob(productionUsWest1); assertEquals(Change.empty(), app.instance().change()); } @Test - public void testRevisionPassesUpgradeWithSimultaneousRollout() { + void testRevisionPassesUpgradeWithSimultaneousRollout() { var appPackage = new ApplicationPackageBuilder().region("us-central-1") - .region("us-east-3") - .region("us-west-1") - .upgradeRollout("simultaneous") - .build(); + .region("us-east-3") + .region("us-west-1") + .upgradeRollout("simultaneous") + .build(); var app = tester.newDeploymentContext().submit(appPackage).deploy(); // Platform rolls through first production zone. @@ -1932,7 +1930,7 @@ public class DeploymentTriggerTest { app.triggerJobs(); app.assertRunning(productionUsEast3); assertEquals(new Versions(version1, revision0.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); + tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); assertEquals(RunStatus.running, tester.jobs().last(app.instanceId(), productionUsEast3).get().status()); // Once staging tests verify the joint upgrade, the job is replaced with that. @@ -1940,27 +1938,27 @@ public class DeploymentTriggerTest { app.triggerJobs(); app.jobAborted(productionUsEast3).runJob(productionUsEast3); assertEquals(new Versions(version1, revision1.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); + tester.jobs().last(app.instanceId(), productionUsEast3).get().versions()); // Revision now proceeds alone. app.triggerJobs(); assertEquals(new Versions(version0, revision1.get(), Optional.of(version0), revision0), - tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); + tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); app.runJob(productionUsWest1); // Upgrade follows. app.triggerJobs(); assertEquals(new Versions(version1, revision1.get(), Optional.of(version0), revision1), - tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); + tester.jobs().last(app.instanceId(), productionUsWest1).get().versions()); app.runJob(productionUsWest1); assertEquals(Change.empty(), app.instance().change()); } @Test - public void mixedDirectAndPipelineJobsInProduction() { + void mixedDirectAndPipelineJobsInProduction() { ApplicationPackage cdPackage = new ApplicationPackageBuilder().region("us-east-3") - .region("aws-us-east-1a") - .build(); + .region("aws-us-east-1a") + .build(); ControllerTester wrapped = new ControllerTester(cd); wrapped.upgradeSystem(Version.fromString("6.1")); wrapped.computeVersionStatus(); @@ -1974,9 +1972,9 @@ public class DeploymentTriggerTest { // Staging test requires unknown initial version, and is broken. tester.controller().applications().deploymentTrigger().forceTrigger(app.instanceId(), productionUsEast3, "user", false, true, true); app.runJob(productionUsEast3) - .abortJob(stagingTest) // Complete failing run. - .runJob(stagingTest) // Run staging-test for production zone with no prior deployment. - .runJob(productionAwsUsEast1a); + .abortJob(stagingTest) // Complete failing run. + .runJob(stagingTest) // Run staging-test for production zone with no prior deployment. + .runJob(productionAwsUsEast1a); // Manually deploy to east again, then upgrade the system. app.runJob(productionUsEast3, cdPackage); @@ -1986,12 +1984,12 @@ public class DeploymentTriggerTest { // System and staging tests both require unknown versions, and are broken. tester.controller().applications().deploymentTrigger().forceTrigger(app.instanceId(), productionUsEast3, "user", false, true, true); app.runJob(productionUsEast3) - .triggerJobs() - .jobAborted(systemTest) - .jobAborted(stagingTest) - .runJob(systemTest) // Run test for aws zone again. - .runJob(stagingTest) // Run test for aws zone again. - .runJob(productionAwsUsEast1a); + .triggerJobs() + .jobAborted(systemTest) + .jobAborted(stagingTest) + .runJob(systemTest) // Run test for aws zone again. + .runJob(stagingTest) // Run test for aws zone again. + .runJob(productionAwsUsEast1a); // Deploy manually again, then submit new package. app.runJob(productionUsEast3, cdPackage); @@ -2000,13 +1998,13 @@ public class DeploymentTriggerTest { // Staging test requires unknown initial version, and is broken. tester.controller().applications().deploymentTrigger().forceTrigger(app.instanceId(), productionUsEast3, "user", false, true, true); app.runJob(productionUsEast3) - .jobAborted(stagingTest) - .runJob(stagingTest) - .runJob(productionAwsUsEast1a); + .jobAborted(stagingTest) + .runJob(stagingTest) + .runJob(productionAwsUsEast1a); } @Test - public void testsInSeparateInstance() { + void testsInSeparateInstance() { String deploymentSpec = """ <deployment version='1.0' athenz-domain='domain' athenz-service='service'> @@ -2029,30 +2027,30 @@ public class DeploymentTriggerTest { var conservative = tester.newDeploymentContext("t", "a", "default"); canary.runJob(systemTest) - .runJob(stagingTest); + .runJob(stagingTest); conservative.runJob(productionEuWest1) - .runJob(testEuWest1); + .runJob(testEuWest1); canary.submit(applicationPackage) - .runJob(systemTest) - .runJob(stagingTest); + .runJob(systemTest) + .runJob(stagingTest); tester.outstandingChangeDeployer().run(); conservative.runJob(productionEuWest1) - .runJob(testEuWest1); + .runJob(testEuWest1); tester.controllerTester().upgradeSystem(new Version("7.7.7")); tester.upgrader().maintain(); canary.runJob(systemTest) - .runJob(stagingTest); + .runJob(stagingTest); tester.upgrader().maintain(); conservative.runJob(productionEuWest1) - .runJob(testEuWest1); + .runJob(testEuWest1); } @Test - public void testEagerTests() { + void testEagerTests() { var app = tester.newDeploymentContext().submit().deploy(); // Start upgrade, then receive new submission. @@ -2069,24 +2067,24 @@ public class DeploymentTriggerTest { tester.triggerJobs(); app.assertRunning(stagingTest); assertEquals(version1, - app.instanceJobs().get(stagingTest).lastCompleted().get().versions().targetPlatform()); + app.instanceJobs().get(stagingTest).lastCompleted().get().versions().targetPlatform()); assertEquals(build1, - app.instanceJobs().get(stagingTest).lastCompleted().get().versions().targetRevision()); + app.instanceJobs().get(stagingTest).lastCompleted().get().versions().targetRevision()); assertEquals(version1, - app.instanceJobs().get(stagingTest).lastTriggered().get().versions().sourcePlatform().get()); + app.instanceJobs().get(stagingTest).lastTriggered().get().versions().sourcePlatform().get()); assertEquals(build1, - app.instanceJobs().get(stagingTest).lastTriggered().get().versions().sourceRevision().get()); + app.instanceJobs().get(stagingTest).lastTriggered().get().versions().sourceRevision().get()); assertEquals(version1, - app.instanceJobs().get(stagingTest).lastTriggered().get().versions().targetPlatform()); + app.instanceJobs().get(stagingTest).lastTriggered().get().versions().targetPlatform()); assertEquals(build2, - app.instanceJobs().get(stagingTest).lastTriggered().get().versions().targetRevision()); + app.instanceJobs().get(stagingTest).lastTriggered().get().versions().targetRevision()); // App completes upgrade, and outstanding change is triggered. This should let relevant, running jobs finish. app.runJob(systemTest) - .runJob(productionUsCentral1) - .runJob(productionUsEast3) - .runJob(productionUsWest1); + .runJob(productionUsCentral1) + .runJob(productionUsEast3) + .runJob(productionUsWest1); tester.outstandingChangeDeployer().run(); assertEquals(RunStatus.running, tester.jobs().last(app.instanceId(), stagingTest).get().status()); @@ -2096,12 +2094,12 @@ public class DeploymentTriggerTest { } @Test - public void testTriggeringOfIdleTestJobsWhenFirstDeploymentIsOnNewerVersionThanChange() { + void testTriggeringOfIdleTestJobsWhenFirstDeploymentIsOnNewerVersionThanChange() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder().systemTest() - .stagingTest() - .region("us-east-3") - .region("us-west-1") - .build(); + .stagingTest() + .region("us-east-3") + .region("us-west-1") + .build(); var app = tester.newDeploymentContext().submit(applicationPackage).deploy(); var appToAvoidVersionGC = tester.newDeploymentContext("g", "c", "default").submit().deploy(); @@ -2122,9 +2120,9 @@ public class DeploymentTriggerTest { assertEquals(Optional.of(version2), app.instance().change().platform()); app.runJob(systemTest) - .runJob(productionUsEast3) - .runJob(stagingTest) - .runJob(productionUsWest1); + .runJob(productionUsEast3) + .runJob(stagingTest) + .runJob(productionUsWest1); assertEquals(version3, app.instanceJobs().get(productionUsEast3).lastSuccess().get().versions().targetPlatform()); assertEquals(version2, app.instanceJobs().get(productionUsWest1).lastSuccess().get().versions().targetPlatform()); @@ -2134,7 +2132,7 @@ public class DeploymentTriggerTest { } @Test - public void testRetriggerQueue() { + void testRetriggerQueue() { var app = tester.newDeploymentContext().submit().deploy(); app.submit(); tester.triggerJobs(); @@ -2144,11 +2142,11 @@ public class DeploymentTriggerTest { tester.deploymentTrigger().reTriggerOrAddToQueue(app.deploymentIdIn(ZoneId.from("prod", "us-east-3")), null); List<RetriggerEntry> retriggerEntries = tester.controller().curator().readRetriggerEntries(); - Assert.assertEquals(1, retriggerEntries.size()); + assertEquals(1, retriggerEntries.size()); } @Test - public void testOrchestrationWithIncompatibleVersionPairs() { + void testOrchestrationWithIncompatibleVersionPairs() { Version version1 = new Version("7"); Version version2 = new Version("8"); tester.controllerTester().flagSource().withListFlag(PermanentFlags.INCOMPATIBLE_VERSIONS.id(), List.of("8"), String.class); @@ -2156,10 +2154,10 @@ public class DeploymentTriggerTest { // App deploys on version1. tester.controllerTester().upgradeSystem(version1); DeploymentContext app = tester.newDeploymentContext() - .submit(new ApplicationPackageBuilder().region("us-east-3") - .compileVersion(version1) - .build()) - .deploy(); + .submit(new ApplicationPackageBuilder().region("us-east-3") + .compileVersion(version1) + .build()) + .deploy(); // System upgrades to version2, but the app is not upgraded. tester.controllerTester().upgradeSystem(version2); @@ -2168,8 +2166,8 @@ public class DeploymentTriggerTest { // App compiles against version2, and upgrades. app.submit(new ApplicationPackageBuilder().region("us-east-3") - .compileVersion(version2) - .build()); + .compileVersion(version2) + .build()); app.deploy(); assertEquals(version2, tester.jobs().last(app.instanceId(), productionUsEast3).get().versions().targetPlatform()); assertEquals(version2, app.application().revisions().get(tester.jobs().last(app.instanceId(), productionUsEast3).get().versions().targetRevision()).compileVersion().get()); @@ -2177,9 +2175,9 @@ public class DeploymentTriggerTest { // App specifies version1 in deployment spec, compiles against version1, pins to version1, and then downgrades. app.submit(new ApplicationPackageBuilder().region("us-east-3") - .majorVersion(7) - .compileVersion(version1) - .build()); + .majorVersion(7) + .compileVersion(version1) + .build()); tester.deploymentTrigger().forceChange(app.instanceId(), app.instance().change().withPin()); app.deploy(); assertEquals(version1, tester.jobs().last(app.instanceId(), productionUsEast3).get().versions().targetPlatform()); @@ -2187,16 +2185,16 @@ public class DeploymentTriggerTest { // A new app, compiled against version1, is deployed on version1. DeploymentContext newApp = tester.newDeploymentContext("new", "app", "default") - .submit(new ApplicationPackageBuilder().region("us-east-3") - .compileVersion(version1) - .build()) - .deploy(); + .submit(new ApplicationPackageBuilder().region("us-east-3") + .compileVersion(version1) + .build()) + .deploy(); assertEquals(version1, tester.jobs().last(newApp.instanceId(), productionUsEast3).get().versions().targetPlatform()); assertEquals(version1, newApp.application().revisions().get(tester.jobs().last(newApp.instanceId(), productionUsEast3).get().versions().targetRevision()).compileVersion().get()); } @Test - public void testInstanceWithOnlySystemTestInTwoClouds() { + void testInstanceWithOnlySystemTestInTwoClouds() { String spec = """ <deployment> <instance id='tests'> @@ -2272,7 +2270,7 @@ public class DeploymentTriggerTest { Version version3 = new Version("9"); tester.controllerTester().upgradeSystem(version3); tests.runJob(systemTest) // Success in default cloud. - .failDeployment(systemTest); // Failure in centauri cloud. + .failDeployment(systemTest); // Failure in centauri cloud. tester.upgrader().run(); assertEquals(Change.of(version3), tests.instance().change()); @@ -2369,7 +2367,7 @@ public class DeploymentTriggerTest { } @Test - public void testNoTests() { + void testNoTests() { DeploymentContext app = tester.newDeploymentContext(); app.submit(new ApplicationPackageBuilder().systemTest().region("us-east-3").build()); @@ -2381,7 +2379,7 @@ public class DeploymentTriggerTest { } @Test - public void testJobNames() { + void testJobNames() { ZoneRegistryMock zones = new ZoneRegistryMock(SystemName.main); List<ZoneApi> existing = new ArrayList<>(zones.zones().all().zones()); existing.add(ZoneApiMock.newBuilder().withCloud("pink-clouds").withId("test.zone").build()); 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 d781b1f1d3f..bf488198126 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 @@ -25,8 +25,8 @@ import com.yahoo.vespa.hosted.controller.application.SystemApplication; import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.maintenance.JobRunner; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.security.cert.X509Certificate; import java.time.Duration; @@ -51,10 +51,10 @@ 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; import static java.time.temporal.ChronoUnit.SECONDS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author jonmv @@ -65,7 +65,7 @@ public class InternalStepRunnerTest { private DeploymentTester tester; private DeploymentContext app; - @Before + @BeforeEach public void setup() { tester = new DeploymentTester(); app = tester.newDeploymentContext(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/QuotaUsageTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/QuotaUsageTest.java index 772d65fa80e..44ca248614b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/QuotaUsageTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/QuotaUsageTest.java @@ -2,9 +2,9 @@ package com.yahoo.vespa.hosted.controller.deployment; import com.yahoo.config.provision.zone.ZoneId; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author ogronnesby @@ -12,7 +12,7 @@ import static org.junit.Assert.assertEquals; public class QuotaUsageTest { @Test - public void testQuotaUsageIsPersisted() { + void testQuotaUsageIsPersisted() { var tester = new DeploymentTester(); var context = tester.newDeploymentContext().submit().deploy(); assertEquals(1.304, context.deployment(ZoneId.from("prod.us-west-1")).quota().rate(), 0.01); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/TestConfigSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/TestConfigSerializerTest.java index 67583891765..6493eafcde5 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/TestConfigSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/TestConfigSerializerTest.java @@ -11,7 +11,7 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.integration.deployment.RevisionId; import com.yahoo.vespa.hosted.controller.application.Endpoint; import com.yahoo.vespa.hosted.controller.application.EndpointId; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.nio.file.Files; @@ -21,7 +21,7 @@ import java.util.List; import java.util.Map; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTester.instanceId; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author jonmv @@ -29,24 +29,24 @@ import static org.junit.Assert.assertEquals; public class TestConfigSerializerTest { @Test - public void testConfig() throws IOException { + void testConfig() throws IOException { ZoneId zone = DeploymentContext.systemTest.zone(); byte[] json = new TestConfigSerializer(SystemName.PublicCd).configJson(instanceId, - DeploymentContext.systemTest, - true, - Version.fromString("1.2.3"), - RevisionId.forProduction(321), - Instant.ofEpochMilli(222), - Map.of(zone, List.of(Endpoint.of(ApplicationId.defaultId()) - .target(EndpointId.of("ai"), ClusterSpec.Id.from("qrs"), - List.of(new DeploymentId(ApplicationId.defaultId(), - ZoneId.defaultId()))) - .on(Endpoint.Port.tls()) - .in(SystemName.main))), - Map.of(zone, List.of("facts"))); + DeploymentContext.systemTest, + true, + Version.fromString("1.2.3"), + RevisionId.forProduction(321), + Instant.ofEpochMilli(222), + Map.of(zone, List.of(Endpoint.of(ApplicationId.defaultId()) + .target(EndpointId.of("ai"), ClusterSpec.Id.from("qrs"), + List.of(new DeploymentId(ApplicationId.defaultId(), + ZoneId.defaultId()))) + .on(Endpoint.Port.tls()) + .in(SystemName.main))), + Map.of(zone, List.of("facts"))); byte[] expected = Files.readAllBytes(Paths.get("src/test/resources/testConfig.json")); assertEquals(new String(SlimeUtils.toJsonBytes(SlimeUtils.jsonToSlime(expected))), - new String(json)); + new String(json)); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ZipBuilderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ZipBuilderTest.java index f48658af7e3..8fe48f805df 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ZipBuilderTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ZipBuilderTest.java @@ -1,7 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.deployment; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -13,7 +13,7 @@ import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author freva @@ -21,7 +21,7 @@ import static org.junit.Assert.assertEquals; public class ZipBuilderTest { @Test - public void test() { + void test() { Map<String, String> expected = new HashMap<>(); expected.put("dir/myfile", "my content"); expected.put("rootfile", "this is root"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueueTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueueTest.java index b5fd3d750ef..efb04615125 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueueTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueueTest.java @@ -9,13 +9,13 @@ import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordData; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordName; import com.yahoo.vespa.hosted.controller.dns.NameServiceQueue.Priority; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden @@ -23,18 +23,18 @@ import static org.junit.Assert.assertTrue; public class NameServiceQueueTest { @Test - public void test_queue() { + void test_queue() { var nameService = new MemoryNameService(); var r1 = new Record(Record.Type.CNAME, RecordName.from("cname.vespa.oath.cloud"), RecordData.from("example.com")); var r2 = new Record(Record.Type.TXT, RecordName.from("txt.example.com"), RecordData.from("text")); var r3 = List.of(new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.of("alias1"), - "dns-zone-01", - ZoneId.from("prod", "us-north-1")).pack()), - new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.of("alias2"), - "dns-zone-02", - ZoneId.from("prod", "us-north-2")).pack())); + new LatencyAliasTarget(HostName.of("alias1"), + "dns-zone-01", + ZoneId.from("prod", "us-north-1")).pack()), + new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), + new LatencyAliasTarget(HostName.of("alias2"), + "dns-zone-02", + ZoneId.from("prod", "us-north-2")).pack())); var req1 = new CreateRecord(r1); var req2 = new CreateRecords(List.of(r2)); var req3 = new CreateRecords(r3); @@ -64,17 +64,17 @@ public class NameServiceQueueTest { // Dispatch removals queue = queue.with(req4).with(req5).dispatchTo(nameService, 2); - assertTrue("Removed " + r2, nameService.findRecords(r2.type(), r2.name()).isEmpty()); - assertTrue("Removed " + r3, nameService.findRecords(Record.Type.ALIAS, r3.get(0).name()).isEmpty()); + assertTrue(nameService.findRecords(r2.type(), r2.name()).isEmpty(), "Removed " + r2); + assertTrue(nameService.findRecords(Record.Type.ALIAS, r3.get(0).name()).isEmpty(), "Removed " + r3); // Dispatch removals by data queue = queue.with(req6).dispatchTo(nameService, 1); assertTrue(queue.requests().isEmpty()); - assertTrue("Removed " + r1, nameService.findRecords(Record.Type.CNAME, r1.name()).isEmpty()); + assertTrue(nameService.findRecords(Record.Type.CNAME, r1.name()).isEmpty(), "Removed " + r1); // Keep n last requests queue = queue.with(req1).with(req2).with(req3).with(req4).with(req6) - .last(2); + .last(2); assertEquals(List.of(req4, req6), List.copyOf(queue.requests())); assertSame(queue, queue.last(2)); assertSame(queue, queue.last(10)); @@ -82,7 +82,7 @@ public class NameServiceQueueTest { // Keep n first requests queue = NameServiceQueue.EMPTY.with(req1).with(req2).with(req3).with(req4).with(req6) - .first(3); + .first(3); assertEquals(List.of(req1, req2, req3), List.copyOf(queue.requests())); assertSame(queue, queue.first(3)); assertSame(queue, queue.first(10)); 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 1e258e8febc..b643d3e90d2 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 @@ -9,17 +9,17 @@ 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.deployment.DeploymentTester; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.List; import java.util.Optional; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTester.appId; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author jonmv @@ -30,7 +30,7 @@ public class ApplicationOwnershipConfirmerTest { private ApplicationOwnershipConfirmer confirmer; private DeploymentTester tester; - @Before + @BeforeEach public void setup() { tester = new DeploymentTester(); issues = new MockOwnershipIssues(); @@ -38,7 +38,7 @@ public class ApplicationOwnershipConfirmerTest { } @Test - public void testConfirmation() { + void testConfirmation() { Optional<Contact> contact = Optional.of(tester.controllerTester().serviceRegistry().contactRetrieverMock().contact()); var app = tester.newDeploymentContext(); tester.controller().tenants().lockOrThrow(appId.tenant(), LockedTenant.Athenz.class, tenant -> @@ -48,55 +48,55 @@ public class ApplicationOwnershipConfirmerTest { var appWithoutContact = tester.newDeploymentContext("other", "application", "default"); appWithoutContact.submit().deploy(); - assertFalse("No issue is initially stored for a new application.", app.application().ownershipIssueId().isPresent()); - assertFalse("No issue is initially stored for a new application.", appWithoutContact.application().ownershipIssueId().isPresent()); - assertFalse("No escalation has been attempted for a new application", issues.escalated); + assertFalse(app.application().ownershipIssueId().isPresent(), "No issue is initially stored for a new application."); + assertFalse(appWithoutContact.application().ownershipIssueId().isPresent(), "No issue is initially stored for a new application."); + assertFalse(issues.escalated, "No escalation has been attempted for a new application"); // Set response from the issue mock, which will be obtained by the maintainer on issue filing. Optional<IssueId> issueId = Optional.of(IssueId.from("1")); issues.response = issueId; confirmer.maintain(); - assertFalse("No issue is stored for an application newer than 3 months.", app.application().ownershipIssueId().isPresent()); - assertFalse("No issue is stored for an application newer than 3 months.", appWithoutContact.application().ownershipIssueId().isPresent()); + assertFalse(app.application().ownershipIssueId().isPresent(), "No issue is stored for an application newer than 3 months."); + assertFalse(appWithoutContact.application().ownershipIssueId().isPresent(), "No issue is stored for an application newer than 3 months."); tester.clock().advance(Duration.ofDays(91)); confirmer.maintain(); - assertEquals("Confirmation issue has been filed for application with contact.", issueId, app.application().ownershipIssueId()); - assertTrue("The confirmation issue response has been ensured.", issues.escalated); - assertEquals("No confirmation issue has been filed for application without contact.", Optional.empty(), appWithoutContact.application().ownershipIssueId()); + assertEquals(issueId, app.application().ownershipIssueId(), "Confirmation issue has been filed for application with contact."); + assertTrue(issues.escalated, "The confirmation issue response has been ensured."); + assertEquals(Optional.empty(), appWithoutContact.application().ownershipIssueId(), "No confirmation issue has been filed for application without contact."); // No new issue is created, so return empty now. issues.response = Optional.empty(); confirmer.maintain(); - assertEquals("Confirmation issue reference is not updated when no issue id is returned.", issueId, app.application().ownershipIssueId()); + assertEquals(issueId, app.application().ownershipIssueId(), "Confirmation issue reference is not updated when no issue id is returned."); // Time has passed, and a new confirmation issue is in order for the property which is still in production. Optional<IssueId> issueId2 = Optional.of(IssueId.from("2")); issues.response = issueId2; confirmer.maintain(); - assertEquals("A new confirmation issue id is stored when something is returned to the maintainer.", issueId2, app.application().ownershipIssueId()); + assertEquals(issueId2, app.application().ownershipIssueId(), "A new confirmation issue id is stored when something is returned to the maintainer."); - assertFalse("No owner is stored for application", app.application().owner().isPresent()); + assertFalse(app.application().owner().isPresent(), "No owner is stored for application"); issues.owner = Optional.of(User.from("username")); confirmer.maintain(); - assertEquals("Owner has been added to application", app.application().owner().get().username(), "username"); + assertEquals(app.application().owner().get().username(), "username", "Owner has been added to application"); // The app deletes all production deployments — see that the issue is forgotten. - assertEquals("Confirmation issue for application is still open.", issueId2, app.application().ownershipIssueId()); + assertEquals(issueId2, app.application().ownershipIssueId(), "Confirmation issue for application is still open."); app.application().productionDeployments().values().stream().flatMap(List::stream) - .forEach(deployment -> tester.controller().applications().deactivate(app.instanceId(), deployment.zone())); - assertTrue("No production deployments are listed for user.", app.application().require(InstanceName.defaultName()).productionDeployments().isEmpty()); + .forEach(deployment -> tester.controller().applications().deactivate(app.instanceId(), deployment.zone())); + assertTrue(app.application().require(InstanceName.defaultName()).productionDeployments().isEmpty(), "No production deployments are listed for user."); confirmer.maintain(); // Time has passed, and a new confirmation issue is in order for the property which is still in production. issues.response = Optional.of(IssueId.from("3")); confirmer.maintain(); - assertEquals("Confirmation issue for application without production deployments has not been filed.", issueId2, app.application().ownershipIssueId()); + assertEquals(issueId2, app.application().ownershipIssueId(), "Confirmation issue for application without production deployments has not been filed."); } private static class MockOwnershipIssues implements OwnershipIssues { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java index 3535417c586..c10b77d853a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java @@ -11,7 +11,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.archive.ArchiveBucket; import com.yahoo.vespa.hosted.controller.api.integration.archive.MockArchiveService; import com.yahoo.vespa.hosted.controller.tenant.ArchiveAccess; import com.yahoo.vespa.hosted.controller.tenant.Tenant; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.Map; @@ -19,8 +19,7 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author andreer @@ -28,7 +27,7 @@ import static org.junit.Assert.assertNull; public class ArchiveAccessMaintainerTest { @Test - public void grantsRoleAccess() { + void grantsRoleAccess() { var tester = new ControllerTester(SystemName.Public); String tenant1role = "arn:aws:iam::123456789012:role/my-role"; @@ -49,10 +48,10 @@ public class ArchiveAccessMaintainerTest { assertEquals(new ArchiveAccess().withAWSRole(tenant2role), archiveService.authorizeAccessByTenantName.get(tenant2)); var expected = Map.of("archive.bucketCount", - tester.controller().zoneRegistry().zonesIncludingSystem().all().ids().stream() - .collect(Collectors.toMap( - zone -> Map.of("zone", zone.value(), "cloud", "default"), - zone -> zone.equals(testZone) ? 1d : 0d))); + tester.controller().zoneRegistry().zonesIncludingSystem().all().ids().stream() + .collect(Collectors.toMap( + zone -> Map.of("zone", zone.value(), "cloud", "default"), + zone -> zone.equals(testZone) ? 1d : 0d))); assertEquals(expected, metric.metrics()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveUriUpdaterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveUriUpdaterTest.java index d208657c1c4..cb5a84654d0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveUriUpdaterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveUriUpdaterTest.java @@ -13,7 +13,7 @@ import com.yahoo.vespa.hosted.controller.application.SystemApplication; import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.net.URI; import java.time.Duration; @@ -21,7 +21,7 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author freva @@ -31,7 +31,7 @@ public class ArchiveUriUpdaterTest { private final DeploymentTester tester = new DeploymentTester(new ControllerTester(SystemName.Public)); @Test - public void archive_uri_test() { + void archive_uri_test() { var updater = new ArchiveUriUpdater(tester.controller(), Duration.ofDays(1)); var tenant1 = TenantName.from("tenant1"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirerTest.java index 7703266c9ba..c0f0322d192 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirerTest.java @@ -6,13 +6,13 @@ import com.yahoo.config.provision.CloudName; import com.yahoo.vespa.hosted.controller.api.integration.artifact.Artifact; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.integration.ArtifactRegistryMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -20,7 +20,7 @@ import static org.junit.Assert.assertEquals; public class ArtifactExpirerTest { @Test - public void maintain() { + void maintain() { DeploymentTester tester = new DeploymentTester(); ArtifactExpirer expirer = new ArtifactExpirer(tester.controller(), Duration.ofDays(1)); ArtifactRegistryMock registry = tester.controllerTester().serviceRegistry().artifactRegistry(CloudName.defaultName()).orElseThrow(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ChangeManagementAssessorTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ChangeManagementAssessorTest.java index add1a319384..084fd243769 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ChangeManagementAssessorTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ChangeManagementAssessorTest.java @@ -7,14 +7,14 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import com.yahoo.vespa.hosted.controller.integration.NodeRepositoryMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author smorgrav @@ -24,7 +24,7 @@ public class ChangeManagementAssessorTest { private final ChangeManagementAssessor changeManagementAssessor = new ChangeManagementAssessor(new NodeRepositoryMock()); @Test - public void empty_input_variations() { + void empty_input_variations() { ZoneId zone = ZoneId.from("prod", "eu-trd"); List<String> hostNames = new ArrayList<>(); List<Node> allNodesInZone = new ArrayList<>(); @@ -36,16 +36,16 @@ public class ChangeManagementAssessorTest { } @Test - public void one_host_one_cluster_no_groups() { + void one_host_one_cluster_no_groups() { ZoneId zone = ZoneId.from("prod", "eu-trd"); List<String> hostNames = Collections.singletonList("host1"); List<Node> allNodesInZone = new ArrayList<>(); - allNodesInZone.add(createNode("node1", "host1", "default", 0 )); - allNodesInZone.add(createNode("node2", "host1", "default", 0 )); - allNodesInZone.add(createNode("node3", "host1", "default", 0 )); + allNodesInZone.add(createNode("node1", "host1", "default", 0)); + allNodesInZone.add(createNode("node2", "host1", "default", 0)); + allNodesInZone.add(createNode("node3", "host1", "default", 0)); // Add an not impacted hosts - allNodesInZone.add(createNode("node4", "host2", "default", 0 )); + allNodesInZone.add(createNode("node4", "host2", "default", 0)); // Add tenant hosts allNodesInZone.add(createHost("host1", NodeType.host)); @@ -67,27 +67,27 @@ public class ChangeManagementAssessorTest { } @Test - public void one_of_two_groups_in_one_of_two_clusters() { + void one_of_two_groups_in_one_of_two_clusters() { ZoneId zone = ZoneId.from("prod", "eu-trd"); List<String> hostNames = List.of("host1", "host2", "host5"); List<Node> allNodesInZone = new ArrayList<>(); // Two impacted nodes on host1 - allNodesInZone.add(createNode("node1", "host1", "default", 0 )); - allNodesInZone.add(createNode("node2", "host1", "default", 0 )); + allNodesInZone.add(createNode("node1", "host1", "default", 0)); + allNodesInZone.add(createNode("node2", "host1", "default", 0)); // One impacted nodes on host2 - allNodesInZone.add(createNode("node3", "host2", "default", 0 )); + allNodesInZone.add(createNode("node3", "host2", "default", 0)); // Another group on hosts not impacted - allNodesInZone.add(createNode("node4", "host3", "default", 1 )); - allNodesInZone.add(createNode("node5", "host3", "default", 1 )); - allNodesInZone.add(createNode("node6", "host3", "default", 1 )); + allNodesInZone.add(createNode("node4", "host3", "default", 1)); + allNodesInZone.add(createNode("node5", "host3", "default", 1)); + allNodesInZone.add(createNode("node6", "host3", "default", 1)); // Another cluster on hosts not impacted - this one also with three different groups (should all be ignored here) - allNodesInZone.add(createNode("node4", "host4", "myman", 4 )); - allNodesInZone.add(createNode("node5", "host4", "myman", 5 )); - allNodesInZone.add(createNode("node6", "host4", "myman", 6 )); + allNodesInZone.add(createNode("node4", "host4", "myman", 4)); + allNodesInZone.add(createNode("node5", "host4", "myman", 5)); + allNodesInZone.add(createNode("node6", "host4", "myman", 6)); // Add tenant hosts allNodesInZone.add(createHost("host1", NodeType.host)); @@ -114,14 +114,14 @@ public class ChangeManagementAssessorTest { assertEquals(2, hostAssessments.size()); assertTrue(hostAssessments.stream().anyMatch(hostAssessment -> hostAssessment.hostName.equals("host1") && - hostAssessment.switchName.equals("switch1") && - hostAssessment.numberOfChildren == 2 && - hostAssessment.numberOfProblematicChildren == 2 + hostAssessment.switchName.equals("switch1") && + hostAssessment.numberOfChildren == 2 && + hostAssessment.numberOfProblematicChildren == 2 )); } @Test - public void two_config_nodes() { + void two_config_nodes() { var zone = ZoneId.from("prod", "eu-trd"); var hostNames = List.of("config1", "config2"); var allNodesInZone = new ArrayList<Node>(); @@ -139,7 +139,7 @@ public class ChangeManagementAssessorTest { } @Test - public void one_of_three_proxy_nodes() { + void one_of_three_proxy_nodes() { var zone = ZoneId.from("prod", "eu-trd"); var hostNames = List.of("routing1"); var allNodesInZone = new ArrayList<Node>(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ChangeRequestMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ChangeRequestMaintainerTest.java index 7607a4f602d..a20a2e26d22 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ChangeRequestMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ChangeRequestMaintainerTest.java @@ -8,13 +8,13 @@ import com.yahoo.vespa.hosted.controller.api.integration.vcmr.ChangeRequestSourc import com.yahoo.vespa.hosted.controller.api.integration.vcmr.ChangeRequestSource.Status; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.MockChangeRequestClient; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.VespaChangeRequest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.ZonedDateTime; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author olaa @@ -26,7 +26,7 @@ public class ChangeRequestMaintainerTest { private final ChangeRequestMaintainer changeRequestMaintainer = new ChangeRequestMaintainer(tester.controller(), Duration.ofMinutes(1)); @Test - public void updates_status_time_and_approval() { + void updates_status_time_and_approval() { var time = ZonedDateTime.now(); var persistedChangeRequest = persistedChangeRequest("some-id", time.minusDays(5), Status.WAITING_FOR_APPROVAL); tester.curator().writeChangeRequest(persistedChangeRequest); @@ -43,7 +43,7 @@ public class ChangeRequestMaintainerTest { } @Test - public void deletes_old_change_requests() { + void deletes_old_change_requests() { var now = ZonedDateTime.now(); var before = now.minus(Duration.ofDays(8)); var newChangeRequest = persistedChangeRequest("new", now, Status.CLOSED); @@ -60,7 +60,7 @@ public class ChangeRequestMaintainerTest { } @Test - public void approves_change_request_if_non_prod() { + void approves_change_request_if_non_prod() { var time = ZonedDateTime.now(); var prodChangeRequest = newChangeRequest("id1", ChangeRequest.Approval.REQUESTED, time, Status.WAITING_FOR_APPROVAL); var nonProdApprovalRequested = newChangeRequest("id2", "unknown-node", ChangeRequest.Approval.REQUESTED, time, Status.WAITING_FOR_APPROVAL); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java index 187b8f932cf..5ecf28ce7e6 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudTrialExpirerTest.java @@ -12,13 +12,13 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo; import com.yahoo.vespa.hosted.controller.tenant.Tenant; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author ogronnesby @@ -30,35 +30,35 @@ public class CloudTrialExpirerTest { private final CloudTrialExpirer expirer = new CloudTrialExpirer(tester.controller(), Duration.ofMinutes(5)); @Test - public void expire_inactive_tenant() { + void expire_inactive_tenant() { registerTenant("trial-tenant", "trial", Duration.ofDays(14).plusMillis(1)); expirer.maintain(); assertPlan("trial-tenant", "none"); } @Test - public void tombstone_inactive_none() { + void tombstone_inactive_none() { registerTenant("none-tenant", "none", Duration.ofDays(365).plusMillis(1)); expirer.maintain(); assertEquals(Tenant.Type.deleted, tester.controller().tenants().get(TenantName.from("none-tenant"), true).get().type()); } @Test - public void keep_inactive_nontrial_tenants() { + void keep_inactive_nontrial_tenants() { registerTenant("not-a-trial-tenant", "pay-as-you-go", Duration.ofDays(30)); expirer.maintain(); assertPlan("not-a-trial-tenant", "pay-as-you-go"); } @Test - public void keep_active_trial_tenants() { + void keep_active_trial_tenants() { registerTenant("active-trial-tenant", "trial", Duration.ofHours(14).minusMillis(1)); expirer.maintain(); assertPlan("active-trial-tenant", "trial"); } @Test - public void keep_inactive_exempt_tenants() { + void keep_inactive_exempt_tenants() { registerTenant("exempt-trial-tenant", "trial", Duration.ofDays(40)); ((InMemoryFlagSource) tester.controller().flagSource()).withListFlag(PermanentFlags.EXTENDED_TRIAL_TENANTS.id(), List.of("exempt-trial-tenant"), String.class); expirer.maintain(); @@ -66,7 +66,7 @@ public class CloudTrialExpirerTest { } @Test - public void keep_inactive_trial_tenants_with_deployments() { + void keep_inactive_trial_tenants_with_deployments() { registerTenant("with-deployments", "trial", Duration.ofDays(30)); registerDeployment("with-deployments", "my-app", "default"); expirer.maintain(); @@ -74,7 +74,7 @@ public class CloudTrialExpirerTest { } @Test - public void delete_tenants_with_applications_with_no_deployments() { + void delete_tenants_with_applications_with_no_deployments() { registerTenant("with-apps", "trial", Duration.ofDays(366)); tester.createApplication("with-apps", "app1", "instance1"); expirer.maintain(); @@ -84,7 +84,7 @@ public class CloudTrialExpirerTest { } @Test - public void keep_tenants_without_applications_that_are_idle() { + void keep_tenants_without_applications_that_are_idle() { registerTenant("active", "none", Duration.ofDays(364)); expirer.maintain(); assertPlan("active", "none"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ContactInformationMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ContactInformationMaintainerTest.java index 37b138527fe..f0c11c0ddbd 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ContactInformationMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ContactInformationMaintainerTest.java @@ -6,8 +6,8 @@ import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId; import com.yahoo.vespa.hosted.controller.api.integration.organization.Contact; import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.net.URI; import java.time.Duration; @@ -16,8 +16,8 @@ import java.util.List; import java.util.Optional; import java.util.function.Supplier; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; /** * @author mpolden @@ -27,30 +27,32 @@ public class ContactInformationMaintainerTest { private ControllerTester tester; private ContactInformationMaintainer maintainer; - @Before + @BeforeEach public void before() { tester = new ControllerTester(); maintainer = new ContactInformationMaintainer(tester.controller(), Duration.ofDays(1)); } @Test - public void updates_contact_information() { + void updates_contact_information() { PropertyId propertyId1 = new PropertyId("1"); PropertyId propertyId2 = new PropertyId("2"); TenantName name1 = tester.createTenant("tenant1", "domain1", 1L); TenantName name2 = tester.createTenant("zenant1", "domain2", 2L); Supplier<AthenzTenant> tenant1 = () -> (AthenzTenant) tester.controller().tenants().require(name1); Supplier<AthenzTenant> tenant2 = () -> (AthenzTenant) tester.controller().tenants().require(name2); - assertFalse("No contact information initially", tenant1.get().contact().isPresent()); - assertFalse("No contact information initially", tenant2.get().contact().isPresent()); + assertFalse(tenant1.get().contact().isPresent(), "No contact information initially"); + assertFalse(tenant2.get().contact().isPresent(), "No contact information initially"); Contact contact = testContact(); - tester.serviceRegistry().contactRetriever().addContact(propertyId1, () -> { throw new RuntimeException("ERROR"); }); + tester.serviceRegistry().contactRetriever().addContact(propertyId1, () -> { + throw new RuntimeException("ERROR"); + }); tester.serviceRegistry().contactRetriever().addContact(propertyId2, () -> contact); maintainer.maintain(); - assertEquals("No contact information added due to error", Optional.empty(), tenant1.get().contact()); - assertEquals("Contact information added", Optional.of(contact), tenant2.get().contact()); + assertEquals(Optional.empty(), tenant1.get().contact(), "No contact information added due to error"); + assertEquals(Optional.of(contact), tenant2.get().contact(), "Contact information added"); } private static Contact testContact() { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintainerTest.java index a452d550488..63e2c99cb6e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintainerTest.java @@ -5,14 +5,14 @@ import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.integration.MetricsMock; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.EnumSet; import java.util.concurrent.atomic.AtomicInteger; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -21,13 +21,13 @@ public class ControllerMaintainerTest { private ControllerTester tester; - @Before + @BeforeEach public void before() { tester = new ControllerTester(); } @Test - public void only_runs_in_permitted_systems() { + void only_runs_in_permitted_systems() { AtomicInteger executions = new AtomicInteger(); new TestControllerMaintainer(tester.controller(), SystemName.cd, executions).run(); new TestControllerMaintainer(tester.controller(), SystemName.main, executions).run(); @@ -35,7 +35,7 @@ public class ControllerMaintainerTest { } @Test - public void records_metric() { + void records_metric() { TestControllerMaintainer maintainer = new TestControllerMaintainer(tester.controller(), SystemName.main, new AtomicInteger()); maintainer.run(); assertEquals(1.0, successFactorMetric(), 0.0000001); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java index 294272041b6..7cfe5dee3de 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java @@ -7,13 +7,13 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.Property; import com.yahoo.vespa.hosted.controller.api.integration.resource.CostReportConsumerMock; import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceAllocation; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; import java.util.Map; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author ldalves @@ -23,7 +23,7 @@ public class CostReportMaintainerTest { private final ControllerTester tester = new ControllerTester(); @Test - public void maintain() { + void maintain() { tester.clock().setInstant(Instant.EPOCH); tester.zoneRegistry().setZones( ZoneApiMock.newBuilder().withId("prod.us-east-3").withCloud("yahoo").build(), @@ -35,9 +35,9 @@ public class CostReportMaintainerTest { CostReportConsumerMock costReportConsumer = new CostReportConsumerMock( (csv) -> assertEquals( "Date,Property,Reserved Cpu Cores,Reserved Memory GB,Reserved Disk Space GB,Usage Fraction\n" + - "1970-01-01,Property1,96.0,96.0,2000.0,0.3055555555555555\n" + - "1970-01-01,Property3,128.0,96.0,2000.0,0.3333333333333333\n" + - "1970-01-01,Property2,160.0,96.0,2000.0,0.3611111111111111", + "1970-01-01,Property1,96.0,96.0,2000.0,0.3055555555555555\n" + + "1970-01-01,Property3,128.0,96.0,2000.0,0.3333333333333333\n" + + "1970-01-01,Property2,160.0,96.0,2000.0,0.3611111111111111", csv), Map.of(new Property("Property3"), new ResourceAllocation(256, 192, 4000, NodeResources.Architecture.getDefault())) ); 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 10a8bb79c2e..0c238ea7c9d 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 @@ -12,13 +12,13 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.deployment.Run; import com.yahoo.vespa.hosted.controller.deployment.RunStatus; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.Optional; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; /** * @author bratseth @@ -28,7 +28,7 @@ public class DeploymentExpirerTest { private final DeploymentTester tester = new DeploymentTester(); @Test - public void testDeploymentExpiry() { + void testDeploymentExpiry() { ZoneId devZone = ZoneId.from(Environment.dev, RegionName.from("us-east-1")); tester.controllerTester().zoneRegistry().setDeploymentTimeToLive(devZone, Duration.ofDays(14)); DeploymentExpirer expirer = new DeploymentExpirer(tester.controller(), Duration.ofDays(1)); @@ -59,9 +59,10 @@ public class DeploymentExpirerTest { Run lastRun = tester.jobs().last(devApp.instanceId(), DeploymentContext.devUsEast1).get(); assertSame(RunStatus.error, lastRun.status()); Deployment deployment = tester.applications().requireInstance(devApp.instanceId()) - .deployments().get(devZone); - assertEquals("Time of last run is after time of deployment", Duration.ofDays(12), - Duration.between(deployment.at(), lastRun.end().get())); + .deployments().get(devZone); + assertEquals(Duration.ofDays(12), + Duration.between(deployment.at(), lastRun.end().get()), + "Time of last run is after time of deployment"); // Dev application does not expire based on time of successful deployment tester.clock().advance(Duration.ofDays(2)); 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 637a8832533..2f84b58dbae 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,8 +13,8 @@ import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.HashMap; @@ -27,9 +27,9 @@ import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.sys import static com.yahoo.vespa.hosted.controller.maintenance.DeploymentIssueReporter.maxFailureAge; import static com.yahoo.vespa.hosted.controller.maintenance.DeploymentIssueReporter.maxInactivity; import static com.yahoo.vespa.hosted.controller.maintenance.DeploymentIssueReporter.upgradeGracePeriod; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author jonmv @@ -48,7 +48,7 @@ public class DeploymentIssueReporterTest { private DeploymentIssueReporter reporter; private MockDeploymentIssues issues; - @Before + @BeforeEach public void setup() { tester = new DeploymentTester(); issues = new MockDeploymentIssues(); @@ -56,7 +56,7 @@ public class DeploymentIssueReporterTest { } @Test - public void nonProductionAppGetsNoIssues() { + void nonProductionAppGetsNoIssues() { tester.controllerTester().upgradeSystem(Version.fromString("6.2")); var app = tester.newDeploymentContext("application", "tenant", "default"); Contact contact = tester.controllerTester().serviceRegistry().contactRetrieverMock().contact(); @@ -68,11 +68,11 @@ public class DeploymentIssueReporterTest { // Advance to where deployment issues should be detected. tester.clock().advance(maxFailureAge.plus(Duration.ofDays(1))); - assertFalse("No issues are produced for app.", issues.isOpenFor(app.application().id())); + assertFalse(issues.isOpenFor(app.application().id()), "No issues are produced for app."); } @Test - public void testDeploymentFailureReporting() { + void testDeploymentFailureReporting() { tester.controllerTester().upgradeSystem(Version.fromString("6.2")); // Create and deploy one application for each of three tenants. @@ -102,7 +102,7 @@ public class DeploymentIssueReporterTest { reporter.maintain(); reporter.maintain(); - assertEquals("No deployments are detected as failing for a long time initially.", 0, issues.size()); + assertEquals(0, issues.size(), "No deployments are detected as failing for a long time initially."); // Advance to where deployment issues should be detected. @@ -110,18 +110,18 @@ public class DeploymentIssueReporterTest { reporter.maintain(); reporter.maintain(); - 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())); + assertTrue(issues.isOpenFor(app1.application().id()), "One issue is produced for app1."); + assertFalse(issues.isOpenFor(app2.application().id()), "No issues are produced for app2."); + assertTrue(issues.isOpenFor(app3.application().id()), "One issue is produced for app3."); // app3 closes their issue prematurely; see that it is refiled. issues.closeFor(app3.application().id()); - assertFalse("No issue is open for app3.", issues.isOpenFor(app3.application().id())); + assertFalse(issues.isOpenFor(app3.application().id()), "No issue is open for app3."); reporter.maintain(); reporter.maintain(); - assertTrue("Issue is re-filed for app3.", issues.isOpenFor(app3.application().id())); + assertTrue(issues.isOpenFor(app3.application().id()), "Issue is re-filed for app3."); // Some time passes; tenant1 leaves her issue unattended, while tenant3 starts work and updates the issue. tester.clock().advance(maxInactivity.plus(maxFailureAge)); @@ -129,7 +129,7 @@ public class DeploymentIssueReporterTest { reporter.maintain(); reporter.maintain(); - assertEquals("The issue for app1 is escalated once.", 1, issues.escalationLevelFor(app1.application().id())); + assertEquals(1, issues.escalationLevelFor(app1.application().id()), "The issue for app1 is escalated once."); // 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. @@ -138,9 +138,9 @@ public class DeploymentIssueReporterTest { 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.application().id())); - assertEquals("The issue for app3 is not escalated.", 0, issues.escalationLevelFor(app3.application().id())); + assertFalse(issues.platformIssue(), "We no longer have a platform issue."); + assertEquals(2, issues.escalationLevelFor(app1.application().id()), "The issue for app1 is escalated once more."); + assertEquals(0, issues.escalationLevelFor(app3.application().id()), "The issue for app3 is not escalated."); // app3 now has a new failure past max failure age; see that a new issue is filed. @@ -149,7 +149,7 @@ public class DeploymentIssueReporterTest { reporter.maintain(); reporter.maintain(); - assertTrue("A new issue is filed for app3.", issues.isOpenFor(app3.application().id())); + assertTrue(issues.isOpenFor(app3.application().id()), "A new issue is filed for app3."); // app2 is changed to be a canary @@ -167,15 +167,15 @@ public class DeploymentIssueReporterTest { tester.controllerTester().upgradeSystem(version); assertEquals(VespaVersion.Confidence.broken, tester.controller().readVersionStatus().systemVersion().get().confidence()); - assertFalse("We have no platform issues initially.", issues.platformIssue()); + assertFalse(issues.platformIssue(), "We have no platform issues initially."); reporter.maintain(); reporter.maintain(); - assertFalse("We have no platform issue before the grace period is out for the failing canary.", issues.platformIssue()); + assertFalse(issues.platformIssue(), "We have no platform issue before the grace period is out for the failing canary."); tester.clock().advance(upgradeGracePeriod.plus(upgradeGracePeriod)); 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.application().id())); + assertTrue(issues.platformIssue(), "We get a platform issue when confidence is broken"); + assertFalse(issues.isOpenFor(app2.application().id()), "No deployment issue is filed for app2, which has a version upgrade failure."); app2.runJob(systemTest); tester.controllerTester().upgradeSystem(version); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java index 112519bb717..6ac0509c0f8 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java @@ -13,7 +13,7 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics; import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -23,8 +23,8 @@ import java.util.Map; import java.util.function.Supplier; import static java.time.temporal.ChronoUnit.MILLIS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; /** * @author smorgrav @@ -35,7 +35,7 @@ public class DeploymentMetricsMaintainerTest { private final DeploymentTester tester = new DeploymentTester(); @Test - public void updates_metrics() { + void updates_metrics() { var application = tester.newDeploymentContext(); application.runJob(DeploymentContext.devUsEast1, new ApplicationPackage(new byte[0]), Version.fromString("7.1")); @@ -46,17 +46,17 @@ public class DeploymentMetricsMaintainerTest { // No metrics gathered yet assertEquals(0, app.get().metrics().queryServiceQuality(), 0); assertEquals(0, deployment.get().metrics().documentCount(), 0); - assertFalse("No timestamp set", deployment.get().metrics().instant().isPresent()); - assertFalse("Never received any queries", deployment.get().activity().lastQueried().isPresent()); - assertFalse("Never received any writes", deployment.get().activity().lastWritten().isPresent()); + assertFalse(deployment.get().metrics().instant().isPresent(), "No timestamp set"); + assertFalse(deployment.get().activity().lastQueried().isPresent(), "Never received any queries"); + assertFalse(deployment.get().activity().lastWritten().isPresent(), "Never received any writes"); // Metrics are gathered and saved to application application.runJob(DeploymentContext.devUsEast1, new ApplicationPackage(new byte[0]), Version.fromString("7.5.5")); var metrics0 = Map.of(ClusterMetrics.QUERIES_PER_SECOND, 1D, - ClusterMetrics.FEED_PER_SECOND, 2D, - ClusterMetrics.DOCUMENT_COUNT, 3D, - ClusterMetrics.QUERY_LATENCY, 4D, - ClusterMetrics.FEED_LATENCY, 5D); + ClusterMetrics.FEED_PER_SECOND, 2D, + ClusterMetrics.DOCUMENT_COUNT, 3D, + ClusterMetrics.QUERY_LATENCY, 4D, + ClusterMetrics.FEED_LATENCY, 5D); setMetrics(application.application().id().defaultInstance(), metrics0); maintainer.maintain(); Instant t1 = tester.clock().instant().truncatedTo(MILLIS); @@ -107,7 +107,7 @@ public class DeploymentMetricsMaintainerTest { } @Test - public void cluster_metric_aggregation_test() { + void cluster_metric_aggregation_test() { List<ClusterMetrics> clusterMetrics = List.of( new ClusterMetrics("niceCluster", "container", Map.of("queriesPerSecond", 23.0, "queryLatency", 1337.0), Map.of()), new ClusterMetrics("alsoNiceCluster", "container", Map.of("queriesPerSecond", 11.0, "queryLatency", 12.0), Map.of())); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgraderTest.java index 653ad2bb08a..df0afda838e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgraderTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgraderTest.java @@ -8,7 +8,7 @@ import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -17,8 +17,8 @@ import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.dev import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.productionUsWest1; import static com.yahoo.vespa.hosted.controller.maintenance.DeploymentUpgrader.mostLikelyWeeHour; import static java.time.temporal.ChronoUnit.MILLIS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author jonmv @@ -28,7 +28,7 @@ public class DeploymentUpgraderTest { private final DeploymentTester tester = new DeploymentTester(); @Test - public void testDeploymentUpgrading() { + void testDeploymentUpgrading() { ZoneId devZone = ZoneId.from(Environment.dev, RegionName.from("us-east-1")); DeploymentUpgrader upgrader = new DeploymentUpgrader(tester.controller(), Duration.ofDays(1)); var devApp = tester.newDeploymentContext("tenant1", "app1", "default"); @@ -76,11 +76,11 @@ public class DeploymentUpgraderTest { } @Test - public void testNight() { - assertEquals(16, mostLikelyWeeHour(new int[]{ 0, 1, 2, 3, 4, 5, 6 })); - assertEquals(14, mostLikelyWeeHour(new int[]{ 22, 23, 0, 1, 2, 3, 4 })); - assertEquals(18, mostLikelyWeeHour(new int[]{ 6, 5, 4, 3, 2, 1, 0 })); - assertEquals(20, mostLikelyWeeHour(new int[]{ 0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 11 })); + void testNight() { + assertEquals(16, mostLikelyWeeHour(new int[]{0, 1, 2, 3, 4, 5, 6})); + assertEquals(14, mostLikelyWeeHour(new int[]{22, 23, 0, 1, 2, 3, 4})); + assertEquals(18, mostLikelyWeeHour(new int[]{6, 5, 4, 3, 2, 1, 0})); + assertEquals(20, mostLikelyWeeHour(new int[]{0, 12, 0, 12, 0, 12, 0, 12, 0, 12, 0, 11})); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/EndpointCertificateMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/EndpointCertificateMaintainerTest.java index 6bcb4284a14..c103894b1a3 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/EndpointCertificateMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/EndpointCertificateMaintainerTest.java @@ -9,7 +9,7 @@ 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.integration.SecretStoreMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.List; @@ -18,9 +18,9 @@ import java.util.Optional; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.productionUsWest1; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.stagingTest; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.systemTest; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author andreer @@ -33,14 +33,14 @@ public class EndpointCertificateMaintainerTest { private final EndpointCertificateMetadata exampleMetadata = new EndpointCertificateMetadata("keyName", "certName", 0, 0, "root-request-uuid", Optional.of("leaf-request-uuid"), List.of(), "issuer", Optional.empty(), Optional.empty()); @Test - public void old_and_unused_cert_is_deleted() { + void old_and_unused_cert_is_deleted() { tester.curator().writeEndpointCertificateMetadata(ApplicationId.defaultId(), exampleMetadata); assertEquals(1.0, maintainer.maintain(), 0.0000001); assertTrue(tester.curator().readEndpointCertificateMetadata(ApplicationId.defaultId()).isEmpty()); } @Test - public void unused_but_recently_used_cert_is_not_deleted() { + void unused_but_recently_used_cert_is_not_deleted() { EndpointCertificateMetadata recentlyRequestedCert = exampleMetadata.withLastRequested(tester.clock().instant().minusSeconds(3600).getEpochSecond()); tester.curator().writeEndpointCertificateMetadata(ApplicationId.defaultId(), recentlyRequestedCert); assertEquals(1.0, maintainer.maintain(), 0.0000001); @@ -48,7 +48,7 @@ public class EndpointCertificateMaintainerTest { } @Test - public void refreshed_certificate_is_updated() { + void refreshed_certificate_is_updated() { EndpointCertificateMetadata recentlyRequestedCert = exampleMetadata.withLastRequested(tester.clock().instant().minusSeconds(3600).getEpochSecond()); tester.curator().writeEndpointCertificateMetadata(ApplicationId.defaultId(), recentlyRequestedCert); @@ -63,7 +63,7 @@ public class EndpointCertificateMaintainerTest { } @Test - public void certificate_in_use_is_not_deleted() { + void certificate_in_use_is_not_deleted() { var appId = ApplicationId.from("tenant", "application", "default"); DeploymentTester deploymentTester = new DeploymentTester(tester); @@ -82,7 +82,7 @@ public class EndpointCertificateMaintainerTest { } @Test - public void refreshed_certificate_is_discovered_and_after_four_days_deployed() { + void refreshed_certificate_is_discovered_and_after_four_days_deployed() { var appId = ApplicationId.from("tenant", "application", "default"); DeploymentTester deploymentTester = new DeploymentTester(tester); @@ -111,7 +111,7 @@ public class EndpointCertificateMaintainerTest { deploymentContext.assertNotRunning(productionUsWest1); var updatedMetadata = tester.curator().readEndpointCertificateMetadata(appId).orElseThrow(); assertNotEquals(originalMetadata.leafRequestId().orElseThrow(), updatedMetadata.leafRequestId().orElseThrow()); - assertEquals(updatedMetadata.version(), originalMetadata.version()+1); + assertEquals(updatedMetadata.version(), originalMetadata.version() + 1); // after another 4 days, we should force trigger deployment if it hasn't already happened tester.clock().advance(Duration.ofDays(4).plusSeconds(1)); @@ -121,7 +121,7 @@ public class EndpointCertificateMaintainerTest { } @Test - public void unmaintained_cert_is_deleted() { + void unmaintained_cert_is_deleted() { EndpointCertificateMock endpointCertificateProvider = (EndpointCertificateMock) tester.controller().serviceRegistry().endpointCertificateProvider(); ApplicationId unknown = ApplicationId.fromSerializedForm("applicationid:is:unknown"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdaterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdaterTest.java index 890f0b41098..1ef32b8e347 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdaterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdaterTest.java @@ -8,15 +8,15 @@ import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import com.yahoo.vespa.hosted.controller.api.integration.configserver.NodeFilter; import com.yahoo.vespa.hosted.controller.api.integration.entity.NodeEntity; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.ArrayList; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden @@ -25,7 +25,7 @@ import static org.junit.Assert.assertTrue; public class HostInfoUpdaterTest { @Test - public void maintain() { + void maintain() { ControllerTester tester = new ControllerTester(); tester.serviceRegistry().configServer().nodeRepository().allowPatching(true); addNodeEntities(tester); @@ -36,8 +36,8 @@ public class HostInfoUpdaterTest { List<Node> nodes = allNodes(tester); assertFalse(nodes.isEmpty()); for (var node : nodes) { - assertEquals("Node " + node.hostname().value() + (node.type().isHost() ? " has" : " does not have") - + " switch hostname", node.type().isHost(), node.switchHostname().isPresent()); + assertEquals(node.type().isHost(), node.switchHostname().isPresent(), "Node " + node.hostname().value() + (node.type().isHost() ? " has" : " does not have") + + " switch hostname"); if (node.type().isHost()) { assertEquals("tor-" + node.hostname().value(), node.switchHostname().get()); } @@ -85,18 +85,18 @@ public class HostInfoUpdaterTest { ZoneId zone = tester.zoneRegistry().zones().controllerUpgraded().all().ids().get(0); String hostnameSuffix = ".prod." + zone.value(); Node configNode = Node.builder().hostname(HostName.of("cfg3" + hostnameSuffix)) - .type(NodeType.config) - .build(); + .type(NodeType.config) + .build(); Node configHost = Node.builder().hostname(HostName.of("cfghost3" + hostnameSuffix)) - .type(NodeType.confighost) - .build(); + .type(NodeType.confighost) + .build(); tester.serviceRegistry().configServer().nodeRepository().putNodes(zone, List.of(configNode, configHost)); String switchHostname = switchHostname(configHost); NodeEntity configNodeEntity = new NodeEntity("cfg3" + hostnameSuffix, "RD350G", "Lenovo", switchHostname); tester.serviceRegistry().entityService().addNodeEntity(configNodeEntity); maintainer.maintain(); assertEquals(switchHostname, getNode(configHost.hostname(), tester).switchHostname().get()); - assertTrue("Switch hostname is not set for non-host", getNode(configNode.hostname(), tester).switchHostname().isEmpty()); + assertTrue(getNode(configNode.hostname(), tester).switchHostname().isEmpty(), "Switch hostname is not set for non-host"); } private static Node getNode(HostName hostname, ControllerTester tester) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java index b9ced334e5a..e7e542d2b82 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java @@ -21,7 +21,7 @@ import com.yahoo.vespa.hosted.controller.deployment.StepRunner; import com.yahoo.vespa.hosted.controller.deployment.Submission; import com.yahoo.vespa.hosted.controller.deployment.Versions; import com.yahoo.vespa.hosted.controller.integration.MetricsMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.Collections; @@ -63,12 +63,12 @@ import static com.yahoo.vespa.hosted.controller.deployment.Step.installReal; import static com.yahoo.vespa.hosted.controller.deployment.Step.installTester; import static com.yahoo.vespa.hosted.controller.deployment.Step.report; import static com.yahoo.vespa.hosted.controller.deployment.Step.startTests; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotSame; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author jonmv @@ -82,10 +82,10 @@ public class JobRunnerTest { Optional.empty()); @Test - public void multiThreadedExecutionFinishes() { + void multiThreadedExecutionFinishes() { DeploymentTester tester = new DeploymentTester(); JobController jobs = tester.controller().jobController(); - StepRunner stepRunner = (step, id) -> id.type().equals(stagingTest) && step.get() == startTests? Optional.of(error) : Optional.of(running); + StepRunner stepRunner = (step, id) -> id.type().equals(stagingTest) && step.get() == startTests ? Optional.of(error) : Optional.of(running); Phaser phaser = new Phaser(1); JobRunner runner = new JobRunner(tester.controller(), Duration.ofDays(1), phasedExecutor(phaser), stepRunner); @@ -98,7 +98,8 @@ public class JobRunnerTest { start(jobs, id, systemTest); fail("Job is already running, so this should not be allowed!"); } - catch (IllegalArgumentException ignored) { } + catch (IllegalArgumentException ignored) { + } start(jobs, id, stagingTest); assertTrue(jobs.last(id, systemTest).get().stepStatuses().values().stream().allMatch(unfinished::equals)); @@ -118,7 +119,7 @@ public class JobRunnerTest { } @Test - public void stepLogic() { + void stepLogic() { DeploymentTester tester = new DeploymentTester(); JobController jobs = tester.controller().jobController(); Map<Step, RunStatus> outcomes = new EnumMap<>(Step.class); @@ -225,7 +226,7 @@ public class JobRunnerTest { } @Test - public void locksAndGarbage() throws InterruptedException, BrokenBarrierException { + void locksAndGarbage() throws InterruptedException, BrokenBarrierException { DeploymentTester tester = new DeploymentTester(); JobController jobs = tester.controller().jobController(); // Hang during tester deployment, until notified. @@ -242,10 +243,12 @@ public class JobRunnerTest { runner.maintain(); barrier.await(); try { - jobs.locked(id, systemTest, deactivateTester, step -> { }); + jobs.locked(id, systemTest, deactivateTester, step -> { + }); fail("deployTester step should still be locked!"); } - catch (TimeoutException ignored) { } + catch (TimeoutException ignored) { + } // Thread is still trying to deploy tester -- delete application, and see all data is garbage collected. assertEquals(Collections.singletonList(runId), jobs.active().stream().map(run -> run.id()).collect(Collectors.toList())); @@ -264,7 +267,7 @@ public class JobRunnerTest { } @Test - public void historyPruning() { + void historyPruning() { DeploymentTester tester = new DeploymentTester(); JobController jobs = tester.controller().jobController(); JobRunner runner = new JobRunner(tester.controller(), Duration.ofDays(1), inThreadExecutor(), (id, step) -> Optional.of(running)); @@ -341,7 +344,7 @@ public class JobRunnerTest { } @Test - public void onlySuccessfulRunExpiresThenAnotherFails() { + void onlySuccessfulRunExpiresThenAnotherFails() { DeploymentTester tester = new DeploymentTester(); JobController jobs = tester.controller().jobController(); var app = tester.newDeploymentContext().submit(); @@ -360,7 +363,7 @@ public class JobRunnerTest { } @Test - public void timeout() { + void timeout() { DeploymentTester tester = new DeploymentTester(); JobController jobs = tester.controller().jobController(); Map<Step, RunStatus> outcomes = new EnumMap<>(Step.class); @@ -378,7 +381,7 @@ public class JobRunnerTest { } @Test - public void jobMetrics() throws TimeoutException { + void jobMetrics() throws TimeoutException { DeploymentTester tester = new DeploymentTester(); JobController jobs = tester.controller().jobController(); Map<Step, RunStatus> outcomes = new EnumMap<>(Step.class); @@ -401,10 +404,10 @@ public class JobRunnerTest { } Map<String, String> context = Map.of("applicationId", "tenant.real.default", - "tenantName", "tenant", - "app", "real.default", - "test", "true", - "zone", "test.us-east-1"); + "tenantName", "tenant", + "app", "real.default", + "test", "true", + "zone", "test.us-east-1"); MetricsMock metric = ((MetricsMock) tester.controller().metric()); assertEquals(RunStatus.values().length - 2, metric.getMetric(context::equals, JobMetrics.start).get().intValue()); assertEquals(1, metric.getMetric(context::equals, JobMetrics.abort).get().intValue()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MeteringMonitorMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MeteringMonitorMaintainerTest.java index 225b7cb1d5e..65dab67663e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MeteringMonitorMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MeteringMonitorMaintainerTest.java @@ -8,15 +8,15 @@ import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanRegistryMoc import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceDatabaseClientMock; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.integration.MetricsMock; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; import java.util.Map; import java.util.Set; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author olaa @@ -31,7 +31,7 @@ public class MeteringMonitorMaintainerTest { private final ApplicationId applicationId = ApplicationId.from("foo", "bar", "default"); private final ZoneId zone = ZoneId.from("prod.aws-us-east-1c"); - @Before + @BeforeEach public void setup() { tester = new ControllerTester(SystemName.Public); deploymentTester = new DeploymentTester(tester); @@ -39,8 +39,9 @@ public class MeteringMonitorMaintainerTest { database = new ResourceDatabaseClientMock(new PlanRegistryMock()); maintainer = new MeteringMonitorMaintainer(tester.controller(), Duration.ofMinutes(5), database, metrics); } + @Test - public void finds_stale_data() { + void finds_stale_data() { deploymentTester.newDeploymentContext(applicationId).submit().deploy(); maintainer.maintain(); var now = tester.clock().instant().getEpochSecond(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java index 215c03030a9..b41c17fcd33 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java @@ -28,7 +28,7 @@ import com.yahoo.vespa.hosted.controller.integration.MetricsMock; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.tenant.Tenant; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -43,9 +43,9 @@ import java.util.stream.Stream; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.productionUsWest1; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.stagingTest; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.systemTest; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mortent @@ -56,7 +56,7 @@ public class MetricsReporterTest { private final ZmsClientMock zmsClient = new ZmsClientMock(new AthenzDbMock(), AthenzIdentities.from("mock.identity")); @Test - public void audit_log_metric() { + void audit_log_metric() { var tester = new ControllerTester(); MetricsReporter metricsReporter = createReporter(tester.controller()); @@ -114,7 +114,7 @@ public class MetricsReporterTest { } @Test - public void deployment_fail_ratio() { + void deployment_fail_ratio() { var tester = new DeploymentTester(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") @@ -147,7 +147,7 @@ public class MetricsReporterTest { } @Test - public void deployment_average_duration() { + void deployment_average_duration() { var tester = new DeploymentTester(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") @@ -156,8 +156,8 @@ public class MetricsReporterTest { MetricsReporter reporter = createReporter(tester.controller()); var context = tester.newDeploymentContext() - .submit(applicationPackage) - .deploy(); + .submit(applicationPackage) + .deploy(); reporter.maintain(); assertEquals(Duration.ZERO, getAverageDeploymentDuration(context.instanceId())); // An exceptionally fast deployment :-) @@ -180,19 +180,19 @@ public class MetricsReporterTest { // Another deployment starts and stalls for 12 hours context.submit(applicationPackage) - .triggerJobs(); + .triggerJobs(); tester.clock().advance(Duration.ofHours(12)); reporter.maintain(); assertEquals(Duration.ofHours(12) // hanging system-test - .plus(Duration.ofHours(12)) // hanging staging-test - .plus(Duration.ofMinutes(90)) // previous production job - .dividedBy(3), // Total number of orchestrated jobs - getAverageDeploymentDuration(context.instanceId())); + .plus(Duration.ofHours(12)) // hanging staging-test + .plus(Duration.ofMinutes(90)) // previous production job + .dividedBy(3), // Total number of orchestrated jobs + getAverageDeploymentDuration(context.instanceId())); } @Test - public void deployments_failing_upgrade() { + void deployments_failing_upgrade() { var tester = new DeploymentTester(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") @@ -208,40 +208,40 @@ public class MetricsReporterTest { // Failing application change is not counted context.submit(applicationPackage) - .triggerJobs() - .failDeployment(systemTest); + .triggerJobs() + .failDeployment(systemTest); reporter.maintain(); assertEquals(0, getDeploymentsFailingUpgrade(context.instanceId())); // Application change completes context.deploy(); - assertFalse("Change deployed", context.instance().change().hasTargets()); + assertFalse(context.instance().change().hasTargets(), "Change deployed"); // New versions is released and upgrade fails in test environments Version version = Version.fromString("7.1"); tester.controllerTester().upgradeSystem(version); tester.upgrader().maintain(); context.failDeployment(systemTest) - .failDeployment(stagingTest); + .failDeployment(stagingTest); reporter.maintain(); assertEquals(2, getDeploymentsFailingUpgrade(context.instanceId())); // Test and staging pass and upgrade fails in production context.runJob(systemTest) - .runJob(stagingTest) - .failDeployment(productionUsWest1); + .runJob(stagingTest) + .failDeployment(productionUsWest1); reporter.maintain(); assertEquals(1, getDeploymentsFailingUpgrade(context.instanceId())); // Upgrade eventually succeeds context.runJob(productionUsWest1); - assertFalse("Upgrade deployed", context.instance().change().hasTargets()); + assertFalse(context.instance().change().hasTargets(), "Upgrade deployed"); reporter.maintain(); assertEquals(0, getDeploymentsFailingUpgrade(context.instanceId())); } @Test - public void deployment_warnings_metric() { + void deployment_warnings_metric() { var tester = new DeploymentTester(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") @@ -257,22 +257,22 @@ public class MetricsReporterTest { } @Test - public void build_time_reporting() { + void build_time_reporting() { var tester = new DeploymentTester(); var applicationPackage = new ApplicationPackageBuilder().region("us-west-1").build(); var context = tester.newDeploymentContext() - .submit(applicationPackage) - .deploy(); + .submit(applicationPackage) + .deploy(); assertEquals(1000, context.application().revisions().get(context.lastSubmission().get()).buildTime().get().toEpochMilli()); MetricsReporter reporter = createReporter(tester.controller()); reporter.maintain(); assertEquals(tester.clock().instant().getEpochSecond() - 1, - getMetric(MetricsReporter.DEPLOYMENT_BUILD_AGE_SECONDS, context.instanceId())); + getMetric(MetricsReporter.DEPLOYMENT_BUILD_AGE_SECONDS, context.instanceId())); } @Test - public void name_service_queue_size_metric() { + void name_service_queue_size_metric() { var tester = new DeploymentTester(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .globalServiceId("default") @@ -281,21 +281,21 @@ public class MetricsReporterTest { .build(); MetricsReporter reporter = createReporter(tester.controller()); var context = tester.newDeploymentContext() - .deferDnsUpdates(); + .deferDnsUpdates(); reporter.maintain(); - assertEquals("Queue is empty initially", 0, metrics.getMetric(MetricsReporter.NAME_SERVICE_REQUESTS_QUEUED).intValue()); + assertEquals(0, metrics.getMetric(MetricsReporter.NAME_SERVICE_REQUESTS_QUEUED).intValue(), "Queue is empty initially"); context.submit(applicationPackage).deploy(); reporter.maintain(); - assertEquals("Deployment queues name services requests", 2, metrics.getMetric(MetricsReporter.NAME_SERVICE_REQUESTS_QUEUED).intValue()); + assertEquals(2, metrics.getMetric(MetricsReporter.NAME_SERVICE_REQUESTS_QUEUED).intValue(), "Deployment queues name services requests"); context.flushDnsUpdates(); reporter.maintain(); - assertEquals("Queue consumed", 0, metrics.getMetric(MetricsReporter.NAME_SERVICE_REQUESTS_QUEUED).intValue()); + assertEquals(0, metrics.getMetric(MetricsReporter.NAME_SERVICE_REQUESTS_QUEUED).intValue(), "Queue consumed"); } @Test - public void platform_change_duration() { + void platform_change_duration() { var tester = new ControllerTester(); var reporter = createReporter(tester.controller()); var zone = ZoneId.from("prod.eu-west-1"); @@ -326,11 +326,12 @@ public class MetricsReporterTest { assertPlatformChangeDuration(Duration.ZERO, hosts); // 1/3 nodes upgrade within timeout - assertEquals("Wanted version is raised for all nodes", version, - getNodes(zone, hosts, tester).stream() - .map(Node::wantedVersion) - .min(Comparator.naturalOrder()) - .get()); + assertEquals(version, + getNodes(zone, hosts, tester).stream() + .map(Node::wantedVersion) + .min(Comparator.naturalOrder()) + .get(), + "Wanted version is raised for all nodes"); suspend(hosts, zone, tester); var firstHost = hosts.get(0); upgradeTo(version, List.of(firstHost), zone, tester); @@ -351,7 +352,7 @@ public class MetricsReporterTest { } @Test - public void os_change_duration() { + void os_change_duration() { var tester = new ControllerTester(); var reporter = createReporter(tester.controller()); var zone = ZoneId.from("prod.eu-west-1"); @@ -389,12 +390,13 @@ public class MetricsReporterTest { assertOsChangeDuration(Duration.ZERO, hosts); // Nodes are told to upgrade, but do not suspend yet - assertEquals("Wanted OS version is raised for all nodes", nextVersion, - tester.configServer().nodeRepository().list(zone, NodeFilter.all().applications(SystemApplication.tenantHost.id())).stream() - .map(Node::wantedOsVersion).min(Comparator.naturalOrder()).get()); - assertTrue("No nodes are suspended", tester.controller().serviceRegistry().configServer() - .nodeRepository().list(zone, NodeFilter.all()).stream() - .noneMatch(node -> node.serviceState() == Node.ServiceState.allowedDown)); + assertEquals(nextVersion, + tester.configServer().nodeRepository().list(zone, NodeFilter.all().applications(SystemApplication.tenantHost.id())).stream() + .map(Node::wantedOsVersion).min(Comparator.naturalOrder()).get(), + "Wanted OS version is raised for all nodes"); + assertTrue(tester.controller().serviceRegistry().configServer() + .nodeRepository().list(zone, NodeFilter.all()).stream() + .noneMatch(node -> node.serviceState() == Node.ServiceState.allowedDown), "No nodes are suspended"); // Another 30 minutes pass tester.clock().advance(Duration.ofMinutes(30)); @@ -440,19 +442,19 @@ public class MetricsReporterTest { // Dimensions used for node count metric are only known OS versions Set<Version> versionDimensions = metrics.getMetrics((dimensions) -> true) - .entrySet() - .stream() - .filter(kv -> kv.getValue().containsKey(MetricsReporter.OS_NODE_COUNT)) - .map(kv -> kv.getKey().getDimensions()) - .map(dimensions -> dimensions.get("currentVersion")) - .map(Version::fromString) - .collect(Collectors.toSet()); - assertTrue("Reports only OS versions", allVersions.containsAll(versionDimensions)); + .entrySet() + .stream() + .filter(kv -> kv.getValue().containsKey(MetricsReporter.OS_NODE_COUNT)) + .map(kv -> kv.getKey().getDimensions()) + .map(dimensions -> dimensions.get("currentVersion")) + .map(Version::fromString) + .collect(Collectors.toSet()); + assertTrue(allVersions.containsAll(versionDimensions), "Reports only OS versions"); } } @Test - public void broken_system_version() { + void broken_system_version() { var tester = new DeploymentTester().atMondayMorning(); var ctx = tester.newDeploymentContext(); var applicationPackage = new ApplicationPackageBuilder().upgradePolicy("canary").region("us-west-1").build(); @@ -485,7 +487,7 @@ public class MetricsReporterTest { } @Test - public void tenant_counter() { + void tenant_counter() { var tester = new ControllerTester(SystemName.Public); tester.createTenant("foo", Tenant.Type.cloud); tester.createTenant("bar", Tenant.Type.cloud); @@ -501,17 +503,17 @@ public class MetricsReporterTest { } @Test - public void overdue_upgrade_metric() { + void overdue_upgrade_metric() { ApplicationPackage pkg = new ApplicationPackageBuilder().region("us-west-1") - // window 1 - .blockChange(false, true, "mon-tue", "2-9", "CET") - // window 2 - .blockChange(false, true, "mon-tue", "1-8,11-12", "CET") - // window 3 - .blockChange(false, true, "wed-thu", "0-23", "CET") - // window 4 (does not apply to upgrade) - .blockChange(true, false, "mon-sun", "0-7", "CET") - .build(); + // window 1 + .blockChange(false, true, "mon-tue", "2-9", "CET") + // window 2 + .blockChange(false, true, "mon-tue", "1-8,11-12", "CET") + // window 3 + .blockChange(false, true, "wed-thu", "0-23", "CET") + // window 4 (does not apply to upgrade) + .blockChange(true, false, "mon-sun", "0-7", "CET") + .build(); Instant mondayNight = Instant.parse("2021-12-13T23:30:00.00Z"); DeploymentTester tester = new DeploymentTester().at(mondayNight); @@ -519,8 +521,8 @@ public class MetricsReporterTest { DeploymentContext context = tester.newDeploymentContext(); Supplier<Duration> metric = () -> { reporter.maintain(); - return Duration.ofSeconds(metrics.getMetric(context.instanceId(),MetricsReporter.DEPLOYMENT_OVERDUE_UPGRADE) - .get().longValue()); + return Duration.ofSeconds(metrics.getMetric(context.instanceId(), MetricsReporter.DEPLOYMENT_OVERDUE_UPGRADE) + .get().longValue()); }; // Deploy completely once @@ -532,33 +534,33 @@ public class MetricsReporterTest { // Start production job for upgrade, without completing it context.runJob(systemTest) - .runJob(stagingTest) - .triggerJobs() - .assertRunning(productionUsWest1); - assertEquals("Upgrade is not overdue yet", Duration.ZERO, metric.get()); + .runJob(stagingTest) + .triggerJobs() + .assertRunning(productionUsWest1); + assertEquals(Duration.ZERO, metric.get(), "Upgrade is not overdue yet"); // Upgrade continues into block window tester.clock().advance(Duration.ofHours(1)); // Tuesday at 00:30 (01:30 CET) - assertEquals("Upgrade is overdue measured relative to window 2", Duration.ofHours(0).plusMinutes(30), metric.get()); + assertEquals(Duration.ofHours(0).plusMinutes(30), metric.get(), "Upgrade is overdue measured relative to window 2"); tester.clock().advance(Duration.ofHours(1)); // Tuesday at 01:30 (02:30 CET) - assertEquals("Upgrade is overdue measured relative to window 2", Duration.ofHours(1).plusMinutes(30), metric.get()); + assertEquals(Duration.ofHours(1).plusMinutes(30), metric.get(), "Upgrade is overdue measured relative to window 2"); tester.clock().advance(Duration.ofHours(1)); // Tuesday at 02:30 (03:30 CET) - assertEquals("Upgrade is overdue measured relative to window 2", Duration.ofHours(2).plusMinutes(30), metric.get()); + assertEquals(Duration.ofHours(2).plusMinutes(30), metric.get(), "Upgrade is overdue measured relative to window 2"); tester.clock().advance(Duration.ofHours(6)); // Tuesday at 08:30 (09:30 CET) - assertEquals("Upgrade is overdue measured relative to window 1", Duration.ofHours(8).plusMinutes(30), metric.get()); + assertEquals(Duration.ofHours(8).plusMinutes(30), metric.get(), "Upgrade is overdue measured relative to window 1"); tester.clock().advance(Duration.ofHours(1)); // Tuesday at 09:30 (10:30 CET) - assertEquals("Upgrade is no longer overdue", Duration.ZERO, metric.get()); + assertEquals(Duration.ZERO, metric.get(), "Upgrade is no longer overdue"); tester.clock().advance(Duration.ofDays(2)); // Thursday at 10:30 (11:30 CET) - assertEquals("Upgrade is overdue measure relative to window 3", Duration.ofHours(34).plusMinutes(30), metric.get()); + assertEquals(Duration.ofHours(34).plusMinutes(30), metric.get(), "Upgrade is overdue measure relative to window 3"); } @Test - public void zms_quota_metrics() { + void zms_quota_metrics() { var tester = new ControllerTester(); var reporter = createReporter(tester.controller()); reporter.maintain(); @@ -576,7 +578,7 @@ public class MetricsReporterTest { .map(Number::longValue) .findFirst() .orElseThrow(() -> new IllegalArgumentException("Expected to find metric for version " + version)); - assertEquals("Expected number of nodes are on " + version.toFullString(), n, nodeCount); + assertEquals(n, nodeCount, "Expected number of nodes are on " + version.toFullString()); } private void assertPlatformNodeCount(int n, Version version) { @@ -647,15 +649,13 @@ public class MetricsReporterTest { private void assertPlatformChangeDuration(Duration duration, List<Node> nodes) { for (var node : nodes) { - assertEquals("Platform change duration of " + node.hostname(), - duration, getChangeDuration(MetricsReporter.PLATFORM_CHANGE_DURATION, node.hostname())); + assertEquals(duration, getChangeDuration(MetricsReporter.PLATFORM_CHANGE_DURATION, node.hostname()), "Platform change duration of " + node.hostname()); } } private void assertOsChangeDuration(Duration duration, List<Node> nodes) { for (var node : nodes) { - assertEquals("OS change duration of " + node.hostname(), - duration, getChangeDuration(MetricsReporter.OS_CHANGE_DURATION, node.hostname())); + assertEquals(duration, getChangeDuration(MetricsReporter.OS_CHANGE_DURATION, node.hostname()), "OS change duration of " + node.hostname()); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java index 621e847c0d3..9268ea5ca1c 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java @@ -9,7 +9,7 @@ import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.integration.deployment.OsRelease; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.versions.OsVersionTarget; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -18,8 +18,8 @@ import java.time.ZoneOffset; import java.util.List; import java.util.Map; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden @@ -27,7 +27,7 @@ import static org.junit.Assert.assertTrue; public class OsUpgradeSchedulerTest { @Test - public void schedule_calendar_versioned_release() { + void schedule_calendar_versioned_release() { ControllerTester tester = new ControllerTester(); OsUpgradeScheduler scheduler = new OsUpgradeScheduler(tester.controller(), Duration.ofDays(1)); Instant t0 = Instant.parse("2022-01-16T00:00:00.00Z"); // Outside trigger period @@ -39,7 +39,7 @@ public class OsUpgradeSchedulerTest { // Initial run does nothing as the cloud does not have a target scheduler.maintain(); - assertTrue("No target set", tester.controller().osVersionTarget(cloud).isEmpty()); + assertTrue(tester.controller().osVersionTarget(cloud).isEmpty(), "No target set"); // Target is set manually Version version0 = Version.fromString("7.0.0.20220101"); @@ -56,12 +56,14 @@ public class OsUpgradeSchedulerTest { Version version1 = Version.fromString("7.0.0.20220228"); tester.clock().advance(Duration.ofDays(30)); scheduler.maintain(); - assertEquals("Target is unchanged because we're outside trigger period", version0, - tester.controller().osVersionTarget(cloud).get().osVersion().version()); + assertEquals(version0, + tester.controller().osVersionTarget(cloud).get().osVersion().version(), + "Target is unchanged because we're outside trigger period"); tester.clock().advance(Duration.ofHours(7)); // Put us inside the trigger period scheduler.maintain(); - assertEquals("New target set", version1, - tester.controller().osVersionTarget(cloud).get().osVersion().version()); + assertEquals(version1, + tester.controller().osVersionTarget(cloud).get().osVersion().version(), + "New target set"); // A few more days pass and target remains unchanged tester.clock().advance(Duration.ofDays(2)); @@ -70,7 +72,7 @@ public class OsUpgradeSchedulerTest { } @Test - public void schedule_stable_release() { + void schedule_stable_release() { ControllerTester tester = new ControllerTester(); Instant t0 = Instant.parse("2021-06-21T07:00:00.00Z"); // Inside trigger period tester.clock().setInstant(t0); @@ -83,7 +85,7 @@ public class OsUpgradeSchedulerTest { // Stable release is scheduled immediately Version version1 = Version.fromString("8.1"); tester.serviceRegistry().artifactRepository().addRelease(new OsRelease(version1, OsRelease.Tag.stable, - tester.clock().instant())); + tester.clock().instant())); scheduleUpgradeAfter(Duration.ZERO, version1, tester); // A newer version is triggered manually @@ -95,7 +97,7 @@ public class OsUpgradeSchedulerTest { } @Test - public void schedule_latest_release_in_cd() { + void schedule_latest_release_in_cd() { ControllerTester tester = new ControllerTester(SystemName.cd); Instant t0 = Instant.parse("2021-06-21T07:00:00.00Z"); // Inside trigger period tester.clock().setInstant(t0); @@ -108,7 +110,7 @@ public class OsUpgradeSchedulerTest { // Latest release is not scheduled immediately Version version1 = Version.fromString("8.1"); tester.serviceRegistry().artifactRepository().addRelease(new OsRelease(version1, OsRelease.Tag.latest, - tester.clock().instant())); + tester.clock().instant())); scheduleUpgradeAfter(Duration.ZERO, version0, tester); // Cooldown period passes and latest release is scheduled @@ -116,20 +118,20 @@ public class OsUpgradeSchedulerTest { } @Test - public void schedule_of_calender_versioned_releases() { + void schedule_of_calender_versioned_releases() { Map<String, String> tests = Map.of("2022-01-01", "2021-12-27", - "2022-03-01", "2021-12-27", - "2022-03-02", "2022-02-28", - "2022-04-30", "2022-02-28", - "2022-05-01", "2022-04-25", - "2022-06-29", "2022-04-25", - "2022-07-01", "2022-06-27", - "2022-08-28", "2022-06-27", - "2022-08-29", "2022-08-29"); + "2022-03-01", "2021-12-27", + "2022-03-02", "2022-02-28", + "2022-04-30", "2022-02-28", + "2022-05-01", "2022-04-25", + "2022-06-29", "2022-04-25", + "2022-07-01", "2022-06-27", + "2022-08-28", "2022-06-27", + "2022-08-29", "2022-08-29"); tests.forEach((now, expectedVersion) -> { Instant instant = LocalDate.parse(now).atStartOfDay().toInstant(ZoneOffset.UTC); LocalDate dateOfWantedVersion = OsUpgradeScheduler.CalendarVersionedRelease.dateOfWantedVersion(instant); - assertEquals("scheduled wanted version at " + now, LocalDate.parse(expectedVersion), dateOfWantedVersion); + assertEquals(LocalDate.parse(expectedVersion), dateOfWantedVersion, "scheduled wanted version at " + now); }); } @@ -139,8 +141,7 @@ public class OsUpgradeSchedulerTest { CloudName cloud = tester.controller().clouds().iterator().next(); OsVersionTarget target = tester.controller().osVersionTarget(cloud).get(); assertEquals(version, target.osVersion().version()); - assertEquals("No budget when scheduling a tagged release", - Duration.ZERO, target.upgradeBudget()); + assertEquals(Duration.ZERO, target.upgradeBudget(), "No budget when scheduling a tagged release"); } private static ZoneApi zone(String id, CloudName cloud) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java index 0b987bff6ce..a128bfb897d 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java @@ -13,7 +13,7 @@ import com.yahoo.vespa.hosted.controller.application.SystemApplication; import com.yahoo.vespa.hosted.controller.integration.NodeRepositoryMock; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.Collection; @@ -23,8 +23,8 @@ import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden @@ -35,7 +35,7 @@ public class OsUpgraderTest { private final OsVersionStatusUpdater statusUpdater = new OsVersionStatusUpdater(tester.controller(), Duration.ofDays(1)); @Test - public void upgrade_os() { + void upgrade_os() { CloudName cloud1 = CloudName.from("c1"); CloudName cloud2 = CloudName.from("c2"); ZoneApi zone0 = zone("prod.us-north-42", "prod.controller", cloud1); @@ -45,18 +45,18 @@ public class OsUpgraderTest { ZoneApi zone4 = zone("prod.us-east-3", cloud1); ZoneApi zone5 = zone("prod.us-north-1", cloud2); UpgradePolicy upgradePolicy = UpgradePolicy.builder() - .upgrade(zone0) - .upgrade(zone1) - .upgradeInParallel(zone2, zone3) - .upgrade(zone5) // Belongs to a different cloud and is ignored by this upgrader - .upgrade(zone4) - .build(); + .upgrade(zone0) + .upgrade(zone1) + .upgradeInParallel(zone2, zone3) + .upgrade(zone5) // Belongs to a different cloud and is ignored by this upgrader + .upgrade(zone4) + .build(); OsUpgrader osUpgrader = osUpgrader(upgradePolicy, cloud1, false); // Bootstrap system List<ZoneId> nonControllerZones = Stream.of(zone1, zone2, zone3, zone4, zone5) - .map(ZoneApi::getVirtualId) - .collect(Collectors.toList()); + .map(ZoneApi::getVirtualId) + .collect(Collectors.toList()); tester.configServer().bootstrap(nonControllerZones, List.of(SystemApplication.tenantHost)); tester.configServer().addNodes(List.of(zone0.getVirtualId()), List.of(SystemApplication.controllerHost)); @@ -105,10 +105,11 @@ public class OsUpgraderTest { // zone 2 and 3: completes upgrade completeUpgrade(version1, SystemApplication.tenantHost, zone2, zone3); - assertEquals("Current version is unchanged for node deferring OS upgrade", Version.emptyVersion, - nodeRepository().list(zone2.getVirtualId(), NodeFilter.all().hostnames(nodeDeferringOsUpgrade.hostname())) - .get(0) - .currentOsVersion()); + assertEquals(Version.emptyVersion, + nodeRepository().list(zone2.getVirtualId(), NodeFilter.all().hostnames(nodeDeferringOsUpgrade.hostname())) + .get(0) + .currentOsVersion(), + "Current version is unchanged for node deferring OS upgrade"); // zone 4: begins upgrading osUpgrader.maintain(); @@ -121,14 +122,14 @@ public class OsUpgraderTest { osUpgrader.maintain(); assertWanted(version1, SystemApplication.tenantHost, zone1, zone2, zone3, zone4); statusUpdater.maintain(); - assertTrue("All non-deferring nodes are on target version", - tester.controller().osVersionStatus().nodesIn(cloud1).stream() - .filter(node -> !node.hostname().equals(nodeDeferringOsUpgrade.hostname())) - .allMatch(node -> node.currentVersion().equals(version1))); + assertTrue(tester.controller().osVersionStatus().nodesIn(cloud1).stream() + .filter(node -> !node.hostname().equals(nodeDeferringOsUpgrade.hostname())) + .allMatch(node -> node.currentVersion().equals(version1)), + "All non-deferring nodes are on target version"); } @Test - public void upgrade_os_with_budget() { + void upgrade_os_with_budget() { CloudName cloud = CloudName.from("cloud"); ZoneApi zone0 = zone("prod.us-north-42", "prod.controller", cloud); ZoneApi zone1 = zone("dev.us-east-1", cloud); @@ -136,17 +137,17 @@ public class OsUpgraderTest { ZoneApi zone3 = zone("prod.us-central-1", cloud); ZoneApi zone4 = zone("prod.eu-west-1", cloud); UpgradePolicy upgradePolicy = UpgradePolicy.builder() - .upgrade(zone0) - .upgrade(zone1) - .upgradeInParallel(zone2, zone3) - .upgrade(zone4) - .build(); + .upgrade(zone0) + .upgrade(zone1) + .upgradeInParallel(zone2, zone3) + .upgrade(zone4) + .build(); OsUpgrader osUpgrader = osUpgrader(upgradePolicy, cloud, true); // Bootstrap system List<SystemApplication> nodeTypes = List.of(SystemApplication.configServerHost, SystemApplication.tenantHost); tester.configServer().bootstrap(List.of(zone1.getId(), zone2.getId(), zone3.getId(), zone4.getId()), - nodeTypes); + nodeTypes); tester.configServer().addNodes(List.of(zone0.getVirtualId()), List.of(SystemApplication.controllerHost)); // Upgrade with budget @@ -159,7 +160,7 @@ public class OsUpgraderTest { // Controllers upgrade first osUpgrader.maintain(); assertWanted(version, SystemApplication.controllerHost, zone0); - assertEquals("Controller zone gets a zero budget", Duration.ZERO, upgradeBudget(zone0, SystemApplication.controllerHost, version)); + assertEquals(Duration.ZERO, upgradeBudget(zone0, SystemApplication.controllerHost, version), "Controller zone gets a zero budget"); completeUpgrade(version, SystemApplication.controllerHost, zone0); statusUpdater.maintain(); assertEquals(3, nodesOn(version).size()); @@ -175,8 +176,9 @@ public class OsUpgraderTest { osUpgrader.maintain(); for (var zone : List.of(zone1, zone2, zone3)) { for (var nodeType : nodeTypes) { - assertEquals("Parallel prod zones share the budget of a single zone", Duration.ofHours(4), - upgradeBudget(zone, nodeType, version)); + assertEquals(Duration.ofHours(4), + upgradeBudget(zone, nodeType, version), + "Parallel prod zones share the budget of a single zone"); completeUpgrade(version, nodeType, zone); } } @@ -184,31 +186,32 @@ public class OsUpgraderTest { // Last zone upgrades osUpgrader.maintain(); for (var nodeType : nodeTypes) { - assertEquals(nodeType + " in last prod zone gets the budget of a single zone", Duration.ofHours(4), - upgradeBudget(zone4, nodeType, version)); + assertEquals(Duration.ofHours(4), + upgradeBudget(zone4, nodeType, version), + nodeType + " in last prod zone gets the budget of a single zone"); completeUpgrade(version, nodeType, zone4); } // All host applications upgraded statusUpdater.maintain(); - assertTrue("All nodes on target version", tester.controller().osVersionStatus().nodesIn(cloud).stream() - .allMatch(node -> node.currentVersion().equals(version))); + assertTrue(tester.controller().osVersionStatus().nodesIn(cloud).stream() + .allMatch(node -> node.currentVersion().equals(version)), "All nodes on target version"); } @Test - public void upgrade_os_nodes_choose_newer_version() { + void upgrade_os_nodes_choose_newer_version() { CloudName cloud = CloudName.from("cloud"); ZoneApi zone1 = zone("dev.us-east-1", cloud); ZoneApi zone2 = zone("prod.us-west-1", cloud); UpgradePolicy upgradePolicy = UpgradePolicy.builder() - .upgrade(zone1) - .upgrade(zone2) - .build(); + .upgrade(zone1) + .upgrade(zone2) + .build(); OsUpgrader osUpgrader = osUpgrader(upgradePolicy, cloud, false); // Bootstrap system tester.configServer().bootstrap(List.of(zone1.getId(), zone2.getId()), - List.of(SystemApplication.tenantHost)); + List.of(SystemApplication.tenantHost)); // New OS version released Version version = Version.fromString("7.1"); @@ -234,14 +237,14 @@ public class OsUpgraderTest { // No more upgrades osUpgrader.maintain(); assertWanted(version, SystemApplication.tenantHost, zone1, zone2); - assertTrue("All nodes on target version or newer", tester.controller().osVersionStatus().nodesIn(cloud).stream() - .noneMatch(node -> node.currentVersion().isBefore(version))); + assertTrue(tester.controller().osVersionStatus().nodesIn(cloud).stream() + .noneMatch(node -> node.currentVersion().isBefore(version)), "All nodes on target version or newer"); } private Duration upgradeBudget(ZoneApi zone, SystemApplication application, Version version) { var upgradeBudget = tester.configServer().nodeRepository().osUpgradeBudget(zone.getVirtualId(), application.nodeType(), version); - assertTrue("Expected budget for upgrade to " + version + " of " + application.id() + " in " + zone.getVirtualId(), - upgradeBudget.isPresent()); + assertTrue(upgradeBudget.isPresent(), + "Expected budget for upgrade to " + version + " of " + application.id() + " in " + zone.getVirtualId()); return upgradeBudget.get(); } @@ -258,9 +261,10 @@ public class OsUpgraderTest { private void assertWanted(Version version, SystemApplication application, ZoneApi... zones) { for (var zone : zones) { - assertEquals("Target version set for " + application + " in " + zone.getVirtualId(), version, + assertEquals(version, nodeRepository().targetVersionsOf(zone.getVirtualId()).osVersion(application.nodeType()) - .orElse(Version.emptyVersion)); + .orElse(Version.emptyVersion), + "Target version set for " + application + " in " + zone.getVirtualId()); } } @@ -268,7 +272,7 @@ public class OsUpgraderTest { ZoneApi... zones) { for (ZoneApi zone : zones) { for (Node node : nodesRequiredToUpgrade(zone, application)) { - assertEquals(application + " version in " + zone, version, versionField.apply(node)); + assertEquals(version, versionField.apply(node), application + " version in " + zone); } } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java index f2d738bd2e1..0bd3810e9a4 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java @@ -8,14 +8,14 @@ import com.yahoo.config.provision.zone.ZoneApi; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.versions.OsVersion; import com.yahoo.vespa.hosted.controller.versions.OsVersionStatus; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden @@ -23,7 +23,7 @@ import static org.junit.Assert.assertTrue; public class OsVersionStatusUpdaterTest { @Test - public void test_update() { + void test_update() { ControllerTester tester = new ControllerTester(); OsVersionStatusUpdater statusUpdater = new OsVersionStatusUpdater(tester.controller(), Duration.ofDays(1) ); @@ -45,8 +45,8 @@ public class OsVersionStatusUpdaterTest { var osVersions = tester.controller().osVersionStatus().versions(); assertEquals(2, osVersions.size()); - assertFalse("All nodes on unknown version", osVersions.get(new OsVersion(Version.emptyVersion, cloud)).isEmpty()); - assertTrue("No nodes on current target", osVersions.get(new OsVersion(version1, cloud)).isEmpty()); + assertFalse(osVersions.get(new OsVersion(Version.emptyVersion, cloud)).isEmpty(), "All nodes on unknown version"); + assertTrue(osVersions.get(new OsVersion(version1, cloud)).isEmpty(), "No nodes on current target"); } } 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 e989486c595..9b2a1607e76 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 @@ -8,13 +8,13 @@ import com.yahoo.vespa.hosted.controller.application.Change; import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.Optional; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author bratseth @@ -22,7 +22,7 @@ import static org.junit.Assert.assertTrue; public class OutstandingChangeDeployerTest { @Test - public void testChangeDeployer() { + void testChangeDeployer() { DeploymentTester tester = new DeploymentTester(); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-west-1") diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ReindexingTriggererTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ReindexingTriggererTest.java index 53e7dd7ca58..b0601dcd880 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ReindexingTriggererTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ReindexingTriggererTest.java @@ -6,7 +6,7 @@ import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ApplicationReindexing; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ApplicationReindexing.Cluster; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ApplicationReindexing.Status; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -22,13 +22,13 @@ import static java.time.DayOfWeek.MONDAY; import static java.time.DayOfWeek.THURSDAY; import static java.time.DayOfWeek.TUESDAY; import static java.time.DayOfWeek.WEDNESDAY; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; public class ReindexingTriggererTest { @Test - public void testWindowOfOpportunity() { + void testWindowOfOpportunity() { Duration interval = Duration.ofHours(1); Instant now = Instant.now(); Instant doom = now.plus(ReindexingTriggerer.reindexingPeriod); @@ -43,42 +43,42 @@ public class ReindexingTriggererTest { now = now.plus(interval); } // Summer/winter time :'( - assertTrue("Should be in window of opportunity three to five times each period", 3 <= triggered && triggered <= 5); + assertTrue(3 <= triggered && triggered <= 5, "Should be in window of opportunity three to five times each period"); } @Test - public void testReindexingIsReady() { + void testReindexingIsReady() { Instant then = Instant.now(); ApplicationReindexing reindexing = new ApplicationReindexing(true, - Map.of("c", new Cluster(Map.of(), Map.of("d", new Status(then))))); + Map.of("c", new Cluster(Map.of(), Map.of("d", new Status(then))))); Instant now = then; - assertFalse("Should not be ready less than one half-period after last triggering", - reindexingIsReady(reindexing, now)); + assertFalse(reindexingIsReady(reindexing, now), + "Should not be ready less than one half-period after last triggering"); now = now.plus(reindexingPeriod.dividedBy(2)); - assertFalse("Should not be ready one half-period after last triggering", - reindexingIsReady(reindexing, now)); + assertFalse(reindexingIsReady(reindexing, now), + "Should not be ready one half-period after last triggering"); now = now.plusMillis(1); - assertTrue("Should be ready more than one half-period after last triggering", - reindexingIsReady(reindexing, now)); + assertTrue(reindexingIsReady(reindexing, now), + "Should be ready more than one half-period after last triggering"); reindexing = new ApplicationReindexing(true, - Map.of("cluster", - new Cluster(Map.of(), - Map.of("type", - new Status(then, then, null, null, null, null, 1.0))))); - assertFalse("Should not be ready when reindexing is already running", - reindexingIsReady(reindexing, now)); + Map.of("cluster", + new Cluster(Map.of(), + Map.of("type", + new Status(then, then, null, null, null, null, 1.0))))); + assertFalse(reindexingIsReady(reindexing, now), + "Should not be ready when reindexing is already running"); reindexing = new ApplicationReindexing(true, - Map.of("cluster", - new Cluster(Map.of("type", 123L), - Map.of("type", - new Status(then, then, now, null, null, null, 1.0))))); - assertTrue("Should be ready when reindexing is no longer running", - reindexingIsReady(reindexing, now)); + Map.of("cluster", + new Cluster(Map.of("type", 123L), + Map.of("type", + new Status(then, then, now, null, null, null, 1.0))))); + assertTrue(reindexingIsReady(reindexing, now), + "Should be ready when reindexing is no longer running"); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java index a8d39438654..1f92c7f6e41 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java @@ -18,7 +18,7 @@ import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.integration.MetricsMock; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -29,9 +29,9 @@ import java.util.function.BiConsumer; import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author olaa @@ -45,7 +45,7 @@ public class ResourceMeterMaintainerTest { new ResourceMeterMaintainer(tester.controller(), Duration.ofMinutes(5), metrics, resourceClient); @Test - public void updates_deployment_costs() { + void updates_deployment_costs() { ApplicationId app1 = ApplicationId.from("t1", "a1", "default"); ApplicationId app2 = ApplicationId.from("t2", "a1", "default"); ZoneId z1 = ZoneId.from("prod.aws-us-east-1c"); @@ -79,13 +79,13 @@ public class ResourceMeterMaintainerTest { assertEquals(1.72, (Double) metrics.getMetric(context -> z1.value().equals(context.get("zoneId")) && - app1.tenant().value().equals(context.get("tenant")), + app1.tenant().value().equals(context.get("tenant")), "metering.cost.hourly").get(), Double.MIN_VALUE); } @Test - public void testMaintainer() { + void testMaintainer() { setUpZones(); long lastRefreshTime = tester.clock().millis(); tester.curator().writeMeteringRefreshTime(lastRefreshTime); @@ -105,7 +105,7 @@ public class ResourceMeterMaintainerTest { assertEquals(24, app2.getMemoryGb(), Double.MIN_VALUE); assertEquals(500, app2.getDiskGb(), Double.MIN_VALUE); - assertEquals(tester.clock().millis()/1000, metrics.getMetric("metering_last_reported")); + assertEquals(tester.clock().millis() / 1000, metrics.getMetric("metering_last_reported")); assertEquals(2224.0d, (Double) metrics.getMetric("metering_total_reported"), Double.MIN_VALUE); assertEquals(24d, (Double) metrics.getMetric(context -> "tenant1".equals(context.get("tenant")), "metering.vcpu").get(), Double.MIN_VALUE); assertEquals(40d, (Double) metrics.getMetric(context -> "tenant2".equals(context.get("tenant")), "metering.vcpu").get(), Double.MIN_VALUE); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java index 1a6976034c5..0068f15ed46 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java @@ -10,14 +10,14 @@ import com.yahoo.vespa.hosted.controller.api.integration.aws.MockResourceTagger; import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import com.yahoo.vespa.hosted.controller.application.SystemApplication; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.List; import java.util.Map; import static com.yahoo.vespa.hosted.controller.maintenance.ResourceTagMaintainer.SHARED_HOST_APPLICATION; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author olaa @@ -27,12 +27,12 @@ public class ResourceTagMaintainerTest { private final ControllerTester tester = new ControllerTester(); @Test - public void maintain() { + void maintain() { setUpZones(); MockResourceTagger mockResourceTagger = new MockResourceTagger(); ResourceTagMaintainer resourceTagMaintainer = new ResourceTagMaintainer(tester.controller(), - Duration.ofMinutes(5), - mockResourceTagger); + Duration.ofMinutes(5), + mockResourceTagger); resourceTagMaintainer.maintain(); assertEquals(2, mockResourceTagger.getValues().size()); Map<HostName, ApplicationId> applicationForHost = mockResourceTagger.getValues().get(ZoneId.from("prod.region-2")); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RetriggerMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RetriggerMaintainerTest.java index bebecf8b52b..69301ea91ef 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RetriggerMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RetriggerMaintainerTest.java @@ -9,13 +9,13 @@ 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.deployment.RetriggerEntry; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.time.Duration; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mortent @@ -25,7 +25,7 @@ public class RetriggerMaintainerTest { private final DeploymentTester tester = new DeploymentTester(); @Test - public void processes_queue() throws IOException { + void processes_queue() throws IOException { RetriggerMaintainer maintainer = new RetriggerMaintainer(tester.controller(), Duration.ofDays(1)); ApplicationId applicationId = ApplicationId.from("tenant", "app", "default"); var devApp = tester.newDeploymentContext(applicationId); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java index c09d3ec3a92..3ccd7e695c7 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java @@ -11,7 +11,7 @@ import com.yahoo.vespa.hosted.controller.application.SystemApplication; import com.yahoo.vespa.hosted.controller.integration.NodeRepositoryMock; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.List; @@ -19,9 +19,9 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author mpolden @@ -36,19 +36,19 @@ public class SystemUpgraderTest { private final ControllerTester tester = new ControllerTester(); @Test - public void upgrade_system() { + void upgrade_system() { SystemUpgrader systemUpgrader = systemUpgrader( UpgradePolicy.builder() - .upgrade(zone1) - .upgradeInParallel(zone2, zone3) - .upgrade(zone4) - .build() + .upgrade(zone1) + .upgradeInParallel(zone2, zone3) + .upgrade(zone4) + .build() ); Version version1 = Version.fromString("6.5"); // Bootstrap a system without host applications tester.configServer().bootstrap(List.of(zone1.getId(), zone2.getId(), zone3.getId(), zone4.getId()), - SystemApplication.configServer, SystemApplication.proxy); + SystemApplication.configServer, SystemApplication.proxy); // Fail a few nodes. Failed nodes should not affect versions failNodeIn(zone1, SystemApplication.configServer); failNodeIn(zone3, SystemApplication.proxy); @@ -78,8 +78,8 @@ public class SystemUpgraderTest { systemUpgrader.maintain(); assertWantedVersion(SystemApplication.proxy, version2, zone1); completeUpgrade(SystemApplication.proxy, version2, zone1); - assertTrue("Deployed proxy application", - tester.configServer().application(SystemApplication.proxy.id(), zone1.getId()).isPresent()); + assertTrue(tester.configServer().application(SystemApplication.proxy.id(), zone1.getId()).isPresent(), + "Deployed proxy application"); // zone 2, 3 and 4: still targets old version assertWantedVersion(SystemApplication.configServer, version1, zone2, zone3, zone4); @@ -138,12 +138,12 @@ public class SystemUpgraderTest { } @Test - public void upgrade_controller_with_non_converging_application() { + void upgrade_controller_with_non_converging_application() { SystemUpgrader systemUpgrader = systemUpgrader(UpgradePolicy.builder().upgrade(zone1).build()); // Bootstrap system tester.configServer().bootstrap(List.of(zone1.getId()), SystemApplication.configServer, - SystemApplication.proxy); + SystemApplication.proxy); Version version1 = Version.fromString("6.5"); tester.upgradeSystem(version1); @@ -173,13 +173,13 @@ public class SystemUpgraderTest { } @Test - public void upgrade_system_containing_host_applications() { + void upgrade_system_containing_host_applications() { SystemUpgrader systemUpgrader = systemUpgrader( UpgradePolicy.builder() - .upgrade(zone1) - .upgradeInParallel(zone2, zone3) - .upgrade(zone4) - .build() + .upgrade(zone1) + .upgradeInParallel(zone2, zone3) + .upgrade(zone4) + .build() ); Version version1 = Version.fromString("6.5"); @@ -196,9 +196,9 @@ public class SystemUpgraderTest { // System upgrades in zone 1: systemUpgrader.maintain(); List<SystemApplication> allExceptZone = List.of(SystemApplication.configServerHost, - SystemApplication.configServer, - SystemApplication.proxyHost, - SystemApplication.tenantHost); + SystemApplication.configServer, + SystemApplication.proxyHost, + SystemApplication.tenantHost); completeUpgrade(allExceptZone, version2, zone1); systemUpgrader.maintain(); completeUpgrade(SystemApplication.proxy, version2, zone1); @@ -225,7 +225,7 @@ public class SystemUpgraderTest { } @Test - public void downgrading_controller_never_downgrades_system() { + void downgrading_controller_never_downgrades_system() { SystemUpgrader systemUpgrader = systemUpgrader(UpgradePolicy.builder().upgrade(zone1).build()); Version version = Version.fromString("6.5"); @@ -244,7 +244,7 @@ public class SystemUpgraderTest { } @Test - public void upgrade_halts_on_broken_version() { + void upgrade_halts_on_broken_version() { SystemUpgrader systemUpgrader = systemUpgrader(UpgradePolicy.builder().upgrade(zone1).upgrade(zone2).build()); // Initial system version @@ -252,11 +252,11 @@ public class SystemUpgraderTest { tester.upgradeSystem(version1); systemUpgrader.maintain(); assertCurrentVersion(List.of(SystemApplication.configServerHost, SystemApplication.proxyHost, - SystemApplication.configServer, SystemApplication.proxy), - version1, zone1); + SystemApplication.configServer, SystemApplication.proxy), + version1, zone1); assertCurrentVersion(List.of(SystemApplication.configServerHost, SystemApplication.proxyHost, - SystemApplication.configServer, SystemApplication.proxy), - version1, zone2); + SystemApplication.configServer, SystemApplication.proxy), + version1, zone2); // System starts upgrading to next version Version version2 = Version.fromString("6.6"); @@ -273,13 +273,13 @@ public class SystemUpgraderTest { overrideConfidence(version2, VespaVersion.Confidence.broken); systemUpgrader.maintain(); assertWantedVersion(List.of(SystemApplication.configServerHost, SystemApplication.proxyHost, - SystemApplication.configServer, SystemApplication.proxy), version1, zone2); + SystemApplication.configServer, SystemApplication.proxy), version1, zone2); } @Test - public void does_not_deploy_proxy_app_in_zone_without_shared_routing() { + void does_not_deploy_proxy_app_in_zone_without_shared_routing() { var applications = List.of(SystemApplication.configServerHost, SystemApplication.configServer, - SystemApplication.tenantHost); + SystemApplication.tenantHost); tester.configServer().bootstrap(List.of(zone1.getId()), applications); tester.configServer().disallowConvergenceCheck(SystemApplication.proxy.id()); tester.zoneRegistry().exclusiveRoutingIn(zone1); @@ -301,7 +301,7 @@ public class SystemUpgraderTest { } @Test - public void downgrade_from_aborted_version() { + void downgrade_from_aborted_version() { SystemUpgrader systemUpgrader = systemUpgrader(UpgradePolicy.builder().upgrade(zone1).upgrade(zone2).upgrade(zone3).build()); Version version1 = Version.fromString("6.5"); @@ -319,9 +319,9 @@ public class SystemUpgraderTest { for (var zone : List.of(zone1, zone2)) { systemUpgrader.maintain(); completeUpgrade(List.of(SystemApplication.tenantHost, - SystemApplication.proxyHost, - SystemApplication.configServerHost), - version2, zone); + SystemApplication.proxyHost, + SystemApplication.configServerHost), + version2, zone); completeUpgrade(SystemApplication.configServer, version2, zone); systemUpgrader.maintain(); completeUpgrade(SystemApplication.proxy, version2, zone); @@ -336,12 +336,12 @@ public class SystemUpgraderTest { for (var zone : List.of(zone2, zone1)) { systemUpgrader.maintain(); completeUpgrade(List.of(SystemApplication.tenantHost, - SystemApplication.configServerHost, - SystemApplication.proxy), - version1, zone); + SystemApplication.configServerHost, + SystemApplication.proxy), + version1, zone); convergeServices(SystemApplication.proxy, zone); List<SystemApplication> lastToDowngrade = List.of(SystemApplication.configServer, - SystemApplication.proxyHost); + SystemApplication.proxyHost); assertWantedVersion(lastToDowngrade, version2, zone); // ... and then configserver and proxyhost @@ -359,7 +359,8 @@ public class SystemUpgraderTest { try { overrideConfidence(version3, VespaVersion.Confidence.aborted); fail("Expected exception"); - } catch (IllegalArgumentException ignored) {} + } catch (IllegalArgumentException ignored) { + } systemUpgrader.maintain(); assertWantedVersion(SystemApplication.notController(), version3, zone1, zone2, zone3); } @@ -414,8 +415,9 @@ public class SystemUpgraderTest { private void assertWantedVersion(SystemApplication application, Version version, ZoneApi first, ZoneApi... rest) { Stream.concat(Stream.of(first), Stream.of(rest)).forEach(zone -> { if (!application.hasApplicationPackage()) { - assertEquals("Target version set for " + application + " in " + zone.getId(), version, - nodeRepository().targetVersionsOf(zone.getId()).vespaVersion(application.nodeType()).orElse(Version.emptyVersion)); + assertEquals(version, + nodeRepository().targetVersionsOf(zone.getId()).vespaVersion(application.nodeType()).orElse(Version.emptyVersion), + "Target version set for " + application + " in " + zone.getId()); } assertVersion(application, version, Node::wantedVersion, zone); }); @@ -437,7 +439,7 @@ public class SystemUpgraderTest { ZoneApi first, ZoneApi... rest) { Stream.concat(Stream.of(first), Stream.of(rest)).forEach(zone -> { for (Node node : listNodes(zone, application)) { - assertEquals("Version of " + application.id() + " in " + zone.getId(), version, versionField.apply(node)); + assertEquals(version, versionField.apply(node), "Version of " + application.id() + " in " + zone.getId()); } }); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TenantRoleMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TenantRoleMaintainerTest.java index 7026d975010..97656583d04 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TenantRoleMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TenantRoleMaintainerTest.java @@ -9,13 +9,13 @@ import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; 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 org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mortent @@ -25,11 +25,11 @@ public class TenantRoleMaintainerTest { private final DeploymentTester tester = new DeploymentTester(); @Test - public void maintains_iam_roles_for_tenants_in_production() { + void maintains_iam_roles_for_tenants_in_production() { var devAppTenant1 = tester.newDeploymentContext("tenant1", "app1", "default"); var prodAppTenant2 = tester.newDeploymentContext("tenant2", "app2", "default"); - var devAppTenant2 = tester.newDeploymentContext("tenant2","app3","default"); - var perfAppTenant1 = tester.newDeploymentContext("tenant3","app1","default"); + var devAppTenant2 = tester.newDeploymentContext("tenant2", "app3", "default"); + var perfAppTenant1 = tester.newDeploymentContext("tenant3", "app1", "default"); ApplicationPackage appPackage = new ApplicationPackageBuilder() .region("us-west-1") .build(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficShareUpdaterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficShareUpdaterTest.java index c59155cb162..07ea04b4c84 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficShareUpdaterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficShareUpdaterTest.java @@ -10,12 +10,12 @@ import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.integration.NodeRepositoryMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.Map; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests the traffic fraction updater. This also tests its dependency on DeploymentMetricsMaintainer. @@ -25,7 +25,7 @@ import static org.junit.Assert.assertEquals; public class TrafficShareUpdaterTest { @Test - public void testTrafficUpdater() { + void testTrafficUpdater() { DeploymentTester tester = new DeploymentTester(); var application = tester.newDeploymentContext(); var deploymentMetricsMaintainer = new DeploymentMetricsMaintainer(tester.controller(), Duration.ofDays(1)); @@ -70,7 +70,7 @@ public class TrafficShareUpdaterTest { assertTrafficFraction(0.47, 0.50, application.instanceId(), prod2, tester); assertTrafficFraction(0.00, 0.50, application.instanceId(), prod3, tester); // - all hot - setQpsMetric( 50.0, application.application().id().defaultInstance(), prod1, tester); + setQpsMetric(50.0, application.application().id().defaultInstance(), prod1, tester); setQpsMetric(25.0, application.application().id().defaultInstance(), prod2, tester); setQpsMetric(25.0, application.application().id().defaultInstance(), prod3, tester); deploymentMetricsMaintainer.maintain(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java index f053ab7a4a6..b24b6c8e99b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UpgraderTest.java @@ -16,7 +16,7 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger; import com.yahoo.vespa.hosted.controller.deployment.Run; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -38,9 +38,9 @@ import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.sys import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger.ChangesToCancel.ALL; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger.ChangesToCancel.PIN; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger.ChangesToCancel.PLATFORM; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author bratseth @@ -50,13 +50,13 @@ public class UpgraderTest { private final DeploymentTester tester = new DeploymentTester().atMondayMorning(); @Test - public void testUpgrading() { + void testUpgrading() { // --- Setup Version version0 = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(version0); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("No applications: Nothing to do", 0, tester.jobs().active().size()); + assertEquals(0, tester.jobs().active().size(), "No applications: Nothing to do"); // Setup applications var canary0 = createAndDeploy("canary0", "canary"); @@ -68,7 +68,7 @@ public class UpgraderTest { tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("All already on the right version: Nothing to do", 0, tester.jobs().active().size()); + assertEquals(0, tester.jobs().active().size(), "All already on the right version: Nothing to do"); // --- Next version released - everything goes smoothly Version version1 = Version.fromString("6.3"); @@ -77,14 +77,14 @@ public class UpgraderTest { tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("New system version: Should upgrade Canaries", 4, tester.jobs().active().size()); + assertEquals(4, tester.jobs().active().size(), "New system version: Should upgrade Canaries"); canary0.deployPlatform(version1); assertEquals(version1, tester.configServer().lastPrepareVersion().get()); tester.controllerTester().computeVersionStatus(); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("One canary pending; nothing else", 2, tester.jobs().active().size()); + assertEquals(2, tester.jobs().active().size(), "One canary pending; nothing else"); canary1.deployPlatform(version1); @@ -92,7 +92,7 @@ public class UpgraderTest { assertEquals(VespaVersion.Confidence.normal, tester.controller().readVersionStatus().systemVersion().get().confidence()); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Canaries done: Should upgrade defaults", 6, tester.jobs().active().size()); + assertEquals(6, tester.jobs().active().size(), "Canaries done: Should upgrade defaults"); default0.deployPlatform(version1); default1.deployPlatform(version1); @@ -102,13 +102,13 @@ public class UpgraderTest { assertEquals(VespaVersion.Confidence.high, tester.controller().readVersionStatus().systemVersion().get().confidence()); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Normals done: Should upgrade conservatives", 2, tester.jobs().active().size()); + assertEquals(2, tester.jobs().active().size(), "Normals done: Should upgrade conservatives"); conservative0.deployPlatform(version1); tester.controllerTester().computeVersionStatus(); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Nothing to do", 0, tester.jobs().active().size()); + assertEquals(0, tester.jobs().active().size(), "Nothing to do"); // --- Next version released - which fails a Canary Version version2 = Version.fromString("6.4"); @@ -117,7 +117,7 @@ public class UpgraderTest { tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("New system version: Should upgrade Canaries", 4, tester.jobs().active().size()); + assertEquals(4, tester.jobs().active().size(), "New system version: Should upgrade Canaries"); canary0.runJob(systemTest); canary0.failDeployment(stagingTest); @@ -125,7 +125,7 @@ public class UpgraderTest { assertEquals(VespaVersion.Confidence.broken, tester.controller().readVersionStatus().systemVersion().get().confidence()); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Version broken, but Canaries should keep trying", 3, tester.jobs().active().size()); + assertEquals(3, tester.jobs().active().size(), "Version broken, but Canaries should keep trying"); // --- Next version released - which repairs the Canary app and fails a default Version version3 = Version.fromString("6.5"); @@ -137,14 +137,14 @@ public class UpgraderTest { canary1.abortJob(stagingTest); tester.triggerJobs(); - assertEquals("New system version: Should upgrade Canaries", 4, tester.jobs().active().size()); + assertEquals(4, tester.jobs().active().size(), "New system version: Should upgrade Canaries"); canary0.deployPlatform(version3); assertEquals(version3, tester.configServer().lastPrepareVersion().get()); tester.controllerTester().computeVersionStatus(); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("One canary pending; nothing else", 2, tester.jobs().active().size()); + assertEquals(2, tester.jobs().active().size(), "One canary pending; nothing else"); canary1.deployPlatform(version3); @@ -153,7 +153,7 @@ public class UpgraderTest { tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Canaries done: Should upgrade defaults", 6, tester.jobs().active().size()); + assertEquals(6, tester.jobs().active().size(), "Canaries done: Should upgrade defaults"); default0.runJob(systemTest); default0.failDeployment(stagingTest); @@ -161,11 +161,10 @@ public class UpgraderTest { default2.deployPlatform(version3); tester.controllerTester().computeVersionStatus(); - assertEquals("Not enough evidence to mark this as neither broken nor high", - VespaVersion.Confidence.normal, tester.controller().readVersionStatus().systemVersion().get().confidence()); + assertEquals(VespaVersion.Confidence.normal, tester.controller().readVersionStatus().systemVersion().get().confidence(), "Not enough evidence to mark this as neither broken nor high"); tester.triggerJobs(); - assertEquals("Upgrade with error should retry", 1, tester.jobs().active().size()); + assertEquals(1, tester.jobs().active().size(), "Upgrade with error should retry"); // --- Failing application is repaired by changing the application, causing confidence to move above 'high' threshold // Deploy application change @@ -176,13 +175,13 @@ public class UpgraderTest { assertEquals(VespaVersion.Confidence.high, tester.controller().readVersionStatus().systemVersion().get().confidence()); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Normals done: Should upgrade conservatives", 2, tester.jobs().active().size()); + assertEquals(2, tester.jobs().active().size(), "Normals done: Should upgrade conservatives"); conservative0.deployPlatform(version3); tester.controllerTester().computeVersionStatus(); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Applications are on " + version3 + " - nothing to do", 0, tester.jobs().active().size()); + assertEquals(0, tester.jobs().active().size(), "Applications are on " + version3 + " - nothing to do"); // --- Starting upgrading to a new version which breaks, causing upgrades to commence on the previous version var default3 = createAndDeploy("default3", "default"); @@ -198,7 +197,7 @@ public class UpgraderTest { tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Upgrade of defaults are scheduled", 10, tester.jobs().active().size()); + assertEquals(10, tester.jobs().active().size(), "Upgrade of defaults are scheduled"); for (var context : List.of(default0, default1, default2, default3, default4)) assertEquals(version4, context.instance().change().platform().get()); @@ -216,7 +215,7 @@ public class UpgraderTest { tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Upgrade of defaults are scheduled", 10, tester.jobs().active().size()); + assertEquals(10, tester.jobs().active().size(), "Upgrade of defaults are scheduled"); assertEquals(version5, default0.instance().change().platform().get()); for (var context : List.of(default1, default2, default3, default4)) assertEquals(version4, context.instance().change().platform().get()); @@ -254,17 +253,17 @@ public class UpgraderTest { } @Test - public void testUpgradingToVersionWhichBreaksSomeNonCanaries() { + void testUpgradingToVersionWhichBreaksSomeNonCanaries() { // --- Setup tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("No system version: Nothing to do", 0, tester.jobs().active().size()); + assertEquals(0, tester.jobs().active().size(), "No system version: Nothing to do"); Version version = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(version); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("No applications: Nothing to do", 0, tester.jobs().active().size()); + assertEquals(0, tester.jobs().active().size(), "No applications: Nothing to do"); // Setup applications var canary0 = createAndDeploy("canary0", "canary"); @@ -282,7 +281,7 @@ public class UpgraderTest { tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("All already on the right version: Nothing to do", 0, tester.jobs().active().size()); + assertEquals(0, tester.jobs().active().size(), "All already on the right version: Nothing to do"); // --- A new version is released version = Version.fromString("6.3"); @@ -291,14 +290,14 @@ public class UpgraderTest { tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("New system version: Should upgrade Canaries", 4, tester.jobs().active().size()); + assertEquals(4, tester.jobs().active().size(), "New system version: Should upgrade Canaries"); canary0.deployPlatform(version); assertEquals(version, tester.configServer().lastPrepareVersion().get()); tester.controllerTester().computeVersionStatus(); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("One canary pending; nothing else", 2, tester.jobs().active().size()); + assertEquals(2, tester.jobs().active().size(), "One canary pending; nothing else"); canary1.deployPlatform(version); @@ -306,7 +305,7 @@ public class UpgraderTest { assertEquals(VespaVersion.Confidence.normal, tester.controller().readVersionStatus().systemVersion().get().confidence()); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Canaries done: Should upgrade defaults", 20, tester.jobs().active().size()); + assertEquals(20, tester.jobs().active().size(), "Canaries done: Should upgrade defaults"); default0.deployPlatform(version); for (var context : List.of(default1, default2, default3, default4)) @@ -318,7 +317,7 @@ public class UpgraderTest { tester.abortAll(); tester.triggerJobs(); assertEquals(VespaVersion.Confidence.broken, tester.controller().readVersionStatus().systemVersion().get().confidence()); - assertEquals("Upgrades are cancelled", 0, tester.jobs().active().size()); + assertEquals(0, tester.jobs().active().size(), "Upgrades are cancelled"); } // Scenario: @@ -328,7 +327,7 @@ public class UpgraderTest { // V2 is marked as broken and upgrade of A to V2 is cancelled. // Upgrade of A to V1 is scheduled: Should skip the zone on V2 but upgrade the next zone to V1 @Test - public void testVersionIsBrokenAfterAZoneIsLive() { + void testVersionIsBrokenAfterAZoneIsLive() { Version v0 = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(v0); @@ -383,8 +382,8 @@ public class UpgraderTest { // Applications with default policy start upgrading to V2 tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Upgrade scheduled for remaining apps", 10, tester.jobs().active().size()); - assertEquals("default4 is still upgrading to 6.3", v1, default4.instance().change().platform().get()); + assertEquals(10, tester.jobs().active().size(), "Upgrade scheduled for remaining apps"); + assertEquals(v1, default4.instance().change().platform().get(), "default4 is still upgrading to 6.3"); // 4/5 applications fail (in the last prod zone) and lowers confidence default0.runJob(systemTest).runJob(stagingTest).runJob(productionUsWest1).failDeployment(productionUsEast3); @@ -400,20 +399,19 @@ public class UpgraderTest { tester.abortAll(); tester.triggerJobs(); - assertEquals("Upgrade to 5.1 scheduled for apps not completely on 5.1 or 5.2", 10, tester.jobs().active().size()); + assertEquals(10, tester.jobs().active().size(), "Upgrade to 5.1 scheduled for apps not completely on 5.1 or 5.2"); // prod zone on 5.2 (usWest1) is skipped, but we still trigger the next zone from triggerReadyJobs: default0.runJob(systemTest).runJob(stagingTest).runJob(productionUsEast3); // Resulting state: assertEquals(v2, default0.deployment(ZoneId.from("prod.us-west-1")).version()); - assertEquals("Last zone is upgraded to v1", - v1, default0.deployment(ZoneId.from("prod.us-east-3")).version()); + assertEquals(v1, default0.deployment(ZoneId.from("prod.us-east-3")).version(), "Last zone is upgraded to v1"); assertFalse(default0.instance().change().hasTargets()); } @Test - public void testConfidenceIgnoresFailingApplicationChanges() { + void testConfidenceIgnoresFailingApplicationChanges() { Version version = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(version); @@ -459,7 +457,7 @@ public class UpgraderTest { } @Test - public void testBlockVersionChange() { + void testBlockVersionChange() { // Tuesday, 18:00 tester.at(Instant.parse("2017-09-26T18:00:00.00Z")); Version version = Version.fromString("6.2"); @@ -481,25 +479,25 @@ public class UpgraderTest { // Application is not upgraded at this time tester.upgrader().maintain(); tester.triggerJobs(); - assertTrue("No jobs scheduled", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "No jobs scheduled"); // One hour passes, time is 19:00, still no upgrade tester.clock().advance(Duration.ofHours(1)); tester.upgrader().maintain(); tester.triggerJobs(); - assertTrue("No jobs scheduled", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "No jobs scheduled"); // Two hours pass in total, time is 20:00 and application upgrades tester.clock().advance(Duration.ofHours(1)); tester.upgrader().maintain(); tester.triggerJobs(); - assertFalse("Job is scheduled", tester.jobs().active().isEmpty()); + assertFalse(tester.jobs().active().isEmpty(), "Job is scheduled"); app.deployPlatform(version); - assertTrue("All jobs consumed", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "All jobs consumed"); } @Test - public void testBlockVersionChangeHalfwayThough() { + void testBlockVersionChangeHalfwayThough() { // Tuesday, 17:00 tester.at(Instant.parse("2017-09-26T17:00:00.00Z")); @@ -532,11 +530,11 @@ public class UpgraderTest { assertEquals(1, tester.jobs().active().size()); // Next job triggered because upgrade is already rolling out. app.runJob(productionUsCentral1).runJob(productionUsEast3); - assertTrue("All jobs consumed", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "All jobs consumed"); } @Test - public void testBlockVersionChangeHalfwayThroughThenNewRevision() { + void testBlockVersionChangeHalfwayThroughThenNewRevision() { // Friday, 16:00 tester.at(Instant.parse("2017-09-29T16:00:00.00Z")); @@ -600,12 +598,12 @@ public class UpgraderTest { tester.upgrader().maintain(); tester.triggerJobs(); app.runJob(systemTest) - .runJob(stagingTest) - .runJob(productionUsWest1) - .runJob(productionUsCentral1) - .runJob(stagingTest) - .runJob(productionUsEast3); - assertTrue("All jobs consumed", tester.jobs().active().isEmpty()); + .runJob(stagingTest) + .runJob(productionUsWest1) + .runJob(productionUsCentral1) + .runJob(stagingTest) + .runJob(productionUsEast3); + assertTrue(tester.jobs().active().isEmpty(), "All jobs consumed"); // App is completely upgraded to the latest version for (Deployment deployment : app.instance().deployments().values()) @@ -613,7 +611,7 @@ public class UpgraderTest { } @Test - public void testThrottlesUpgrades() { + void testThrottlesUpgrades() { Version version = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(version); @@ -632,7 +630,7 @@ public class UpgraderTest { // Dev deployment which should be ignored var dev0 = tester.newDeploymentContext("tenant1", "dev0", "default") - .runJob(devUsEast1, DeploymentContext.applicationPackage()); + .runJob(devUsEast1, DeploymentContext.applicationPackage()); // New version is released and canaries upgrade version = Version.fromString("6.3"); @@ -661,13 +659,13 @@ public class UpgraderTest { } @Test - public void testPinningMajorVersionInDeploymentXml() { + void testPinningMajorVersionInDeploymentXml() { Version version = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(version); ApplicationPackage version6ApplicationPackage = new ApplicationPackageBuilder().majorVersion(6) - .region("us-west-1") - .build(); + .region("us-west-1") + .build(); // Setup applications var canary0 = createAndDeploy("canary0", "canary"); @@ -693,7 +691,7 @@ public class UpgraderTest { } @Test - public void testPinningMajorVersionInApplication() { + void testPinningMajorVersionInApplication() { Version version = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(version); @@ -701,7 +699,7 @@ public class UpgraderTest { var canary0 = createAndDeploy("canary", "canary"); var default0 = tester.newDeploymentContext().submit().deploy(); tester.applications().lockApplicationOrThrow(default0.application().id(), - a -> tester.applications().store(a.withMajorVersion(6))); + a -> tester.applications().store(a.withMajorVersion(6))); assertEquals(OptionalInt.of(6), default0.application().majorVersion()); // New major version is released @@ -724,20 +722,20 @@ public class UpgraderTest { } @Test - public void testPinningMajorVersionInUpgrader() { + void testPinningMajorVersionInUpgrader() { Version version = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(version); ApplicationPackage version7CanaryApplicationPackage = new ApplicationPackageBuilder() - .majorVersion(7) - .upgradePolicy("canary") - .region("us-west-1") - .build(); + .majorVersion(7) + .upgradePolicy("canary") + .region("us-west-1") + .build(); ApplicationPackage version7DefaultApplicationPackage = new ApplicationPackageBuilder() - .majorVersion(7) - .upgradePolicy("default") - .region("us-west-1") - .build(); + .majorVersion(7) + .upgradePolicy("default") + .region("us-west-1") + .build(); // Setup applications var canary0 = tester.newDeploymentContext("tenant1", "canary0", "default").submit(version7CanaryApplicationPackage).deploy(); @@ -778,7 +776,7 @@ public class UpgraderTest { } @Test - public void testAllowApplicationChangeDuringFailingUpgrade() { + void testAllowApplicationChangeDuringFailingUpgrade() { Version version = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(version); @@ -797,15 +795,15 @@ public class UpgraderTest { RevisionId revision = app.lastSubmission().get(); // Application change recorded together with ongoing upgrade - assertTrue("Change contains both upgrade and application change", - app.instance().change().platform().get().equals(version) && - app.instance().change().revision().get().equals(revision)); + assertTrue(app.instance().change().platform().get().equals(version) && + app.instance().change().revision().get().equals(revision), + "Change contains both upgrade and application change"); // Deployment completes app.runJob(systemTest).runJob(stagingTest) - .runJob(productionUsWest1) - .runJob(productionUsEast3); - assertEquals("All jobs consumed", List.of(), tester.jobs().active()); + .runJob(productionUsWest1) + .runJob(productionUsEast3); + assertEquals(List.of(), tester.jobs().active(), "All jobs consumed"); for (Deployment deployment : app.instance().deployments().values()) { assertEquals(version, deployment.version()); @@ -814,7 +812,7 @@ public class UpgraderTest { } @Test - public void testBlockRevisionChangeHalfwayThoughThenUpgrade() { + void testBlockRevisionChangeHalfwayThoughThenUpgrade() { // Tuesday, 17:00. tester.at(Instant.parse("2017-09-26T17:00:00.00Z")); @@ -852,11 +850,11 @@ public class UpgraderTest { // Upgrade may start, now that revision is rolled out. tester.upgrader().maintain(); app.deployPlatform(version); - assertTrue("All jobs consumed", tester.jobs().active().isEmpty()); + assertTrue(tester.jobs().active().isEmpty(), "All jobs consumed"); } @Test - public void testBlockRevisionChangeHalfwayThoughThenNewRevision() { + void testBlockRevisionChangeHalfwayThoughThenNewRevision() { // Tuesday, 17:00. tester.at(Instant.parse("2017-09-26T17:00:00.00Z")); @@ -901,7 +899,7 @@ public class UpgraderTest { } @Test - public void testPinning() { + void testPinning() { Version version0 = Version.fromString("6.2"); tester.controllerTester().upgradeSystem(version0); @@ -939,7 +937,7 @@ public class UpgraderTest { // Application fails upgrade after one zone is complete, and is pinned again to the old version. context.runJob(systemTest).runJob(stagingTest).runJob(productionUsCentral1) - .timeOutUpgrade(productionUsWest1); + .timeOutUpgrade(productionUsWest1); tester.deploymentTrigger().cancelChange(context.instanceId(), ALL); tester.deploymentTrigger().forceChange(context.instanceId(), Change.of(version0).withPin()); assertEquals(version0, context.instance().change().platform().get()); @@ -953,7 +951,7 @@ public class UpgraderTest { } @Test - public void upgradesToLatestAllowedMajor() { + void upgradesToLatestAllowedMajor() { Version version0 = Version.fromString("6.1"); tester.controllerTester().upgradeSystem(version0); @@ -967,7 +965,7 @@ public class UpgraderTest { // Keep app 1 on current version tester.controller().applications().lockApplicationIfPresent(app1.application().id(), app -> tester.controller().applications().store(app.with(app1.instance().name(), - instance -> instance.withChange(instance.change().withPin())))); + instance -> instance.withChange(instance.change().withPin())))); // New version is released Version version1 = Version.fromString("6.2"); @@ -989,14 +987,15 @@ public class UpgraderTest { // App 1 is unpinned and upgrades to latest 6 tester.controller().applications().lockApplicationIfPresent(app1.application().id(), app -> tester.controller().applications().store(app.with(app1.instance().name(), - instance -> instance.withChange(instance.change().withoutPin())))); + instance -> instance.withChange(instance.change().withoutPin())))); tester.upgrader().maintain(); - assertEquals("Application upgrades to latest allowed major", version1, - app1.instance().change().platform().orElseThrow()); + assertEquals(version1, + app1.instance().change().platform().orElseThrow(), + "Application upgrades to latest allowed major"); } @Test - public void testSettingFailingRevisionAside() { + void testSettingFailingRevisionAside() { DeploymentContext app = tester.newDeploymentContext().submit().deploy(); // New revision fails. @@ -1050,7 +1049,7 @@ public class UpgraderTest { } @Test - public void testsEachUpgradeCombinationWithFailingDeployments() { + void testsEachUpgradeCombinationWithFailingDeployments() { Version v1 = Version.fromString("6.1"); tester.controllerTester().upgradeSystem(v1); @@ -1105,11 +1104,11 @@ public class UpgraderTest { // Upgrade completes application.runJob(productionUsEast3); - assertTrue("Upgrade complete", application.instance().change().isEmpty()); + assertTrue(application.instance().change().isEmpty(), "Upgrade complete"); } @Test - public void testUpgradesPerMinute() { + void testUpgradesPerMinute() { assertEquals(0, Upgrader.numberOfApplicationsToUpgrade(10, 0, 0)); for (long now = 0; now < 60_000; now++) @@ -1130,14 +1129,14 @@ public class UpgraderTest { } @Test - public void testUpgradeShuffling() { + void testUpgradeShuffling() { // Deploy applications on initial version var default0 = createAndDeploy("default0", "default"); var default1 = createAndDeploy("default1", "default"); var default2 = createAndDeploy("default2", "default"); var applications = Map.of(default0.instanceId(), default0, - default1.instanceId(), default1, - default2.instanceId(), default2); + default1.instanceId(), default1, + default2.instanceId(), default2); // Throttle upgrades per run ((ManualClock) tester.controller().clock()).setInstant(Instant.ofEpochMilli(1589787107000L)); // Fixed random seed @@ -1157,10 +1156,10 @@ public class UpgraderTest { upgrader.maintain(); tester.triggerJobs(); Set<ApplicationId> triggered = tester.jobs().active().stream() - .map(Run::id) - .map(RunId::application) - .collect(Collectors.toSet()); - assertEquals("Expected number of applications is triggered", 1, triggered.size()); + .map(Run::id) + .map(RunId::application) + .collect(Collectors.toSet()); + assertEquals(1, triggered.size(), "Expected number of applications is triggered"); ApplicationId application = triggered.iterator().next(); upgraderOrder.add(application); applications.get(application).completeRollout(); @@ -1168,7 +1167,7 @@ public class UpgraderTest { } upgradeOrders.add(upgraderOrder); } - assertEquals("Upgrade orders are distinct", versions.size(), upgradeOrders.size()); + assertEquals(versions.size(), upgradeOrders.size(), "Upgrade orders are distinct"); } private static final ApplicationPackage canaryApplicationPackage = diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainerTest.java index c1a9559ac46..4fe04b25577 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/UserManagementMaintainerTest.java @@ -3,11 +3,11 @@ package com.yahoo.vespa.hosted.controller.maintenance; import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.hosted.controller.ControllerTester; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author olaa @@ -19,7 +19,7 @@ public class UserManagementMaintainerTest { private final String APP_NAME = "some-app"; @Test - public void deletes_tenant_when_not_public() { + void deletes_tenant_when_not_public() { var tester = createTester(SystemName.main); var maintainer = new UserManagementMaintainer(tester.controller(), Duration.ofMinutes(5), tester.serviceRegistry().roleMaintainer()); maintainer.maintain(); @@ -32,7 +32,7 @@ public class UserManagementMaintainerTest { } @Test - public void no_tenant_deletion_in_public() { + void no_tenant_deletion_in_public() { var tester = createTester(SystemName.Public); var maintainer = new UserManagementMaintainer(tester.controller(), Duration.ofMinutes(5), tester.serviceRegistry().roleMaintainer()); maintainer.maintain(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VcmrMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VcmrMaintainerTest.java index 321ec3ad8ea..52bd8e9c618 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VcmrMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VcmrMaintainerTest.java @@ -16,8 +16,8 @@ import com.yahoo.vespa.hosted.controller.api.integration.vcmr.VespaChangeRequest import com.yahoo.vespa.hosted.controller.api.integration.vcmr.VespaChangeRequest.Status; import com.yahoo.vespa.hosted.controller.integration.MetricsMock; import com.yahoo.vespa.hosted.controller.integration.NodeRepositoryMock; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.time.DayOfWeek; import java.time.Duration; @@ -27,9 +27,9 @@ import java.time.temporal.TemporalAdjusters; import java.util.List; import static com.yahoo.vespa.hosted.controller.maintenance.VcmrMaintainer.TRACKED_CMRS_METRIC; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author olaa @@ -47,7 +47,7 @@ public class VcmrMaintainerTest { private final HostName host3 = HostName.of("host3"); private final String changeRequestId = "id123"; - @Before + @BeforeEach public void setup() { tester = new ControllerTester(); metrics = new MetricsMock(); @@ -56,15 +56,15 @@ public class VcmrMaintainerTest { } @Test - public void recycle_hosts_after_completion() { + void recycle_hosts_after_completion() { var vcmrReport = new VcmrReport(); vcmrReport.addVcmr("id123", ZonedDateTime.now(), ZonedDateTime.now()); var parkedNode = createNode(host1, NodeType.host, Node.State.parked, true); var failedNode = createNode(host2, NodeType.host, Node.State.failed, false); var reports = vcmrReport.toNodeReports(); parkedNode = Node.builder(parkedNode) - .reports(reports) - .build(); + .reports(reports) + .build(); nodeRepo.putNodes(zoneId, List.of(parkedNode, failedNode)); @@ -83,7 +83,7 @@ public class VcmrMaintainerTest { } @Test - public void infrastructure_hosts_require_maunal_intervention() { + void infrastructure_hosts_require_maunal_intervention() { var configNode = createNode(host1, NodeType.config, Node.State.active, false); var activeNode = createNode(host2, NodeType.host, Node.State.active, false); nodeRepo.putNodes(zoneId, List.of(configNode, activeNode)); @@ -103,7 +103,7 @@ public class VcmrMaintainerTest { } @Test - public void retires_hosts_when_near_vcmr() { + void retires_hosts_when_near_vcmr() { var activeNode = createNode(host1, NodeType.host, Node.State.active, false); var failedNode = createNode(host2, NodeType.host, Node.State.failed, false); nodeRepo.putNodes(zoneId, List.of(activeNode, failedNode)); @@ -125,7 +125,7 @@ public class VcmrMaintainerTest { } @Test - public void no_spare_capacity_requires_operator_action() { + void no_spare_capacity_requires_operator_action() { var activeNode = createNode(host1, NodeType.host, Node.State.active, false); var failedNode = createNode(host2, NodeType.host, Node.State.failed, false); nodeRepo.putNodes(zoneId, List.of(activeNode, failedNode)); @@ -147,7 +147,7 @@ public class VcmrMaintainerTest { } @Test - public void updates_status_when_retiring_host_is_parked() { + void updates_status_when_retiring_host_is_parked() { var parkedNode = createNode(host1, NodeType.host, Node.State.parked, true); nodeRepo.putNodes(zoneId, parkedNode); nodeRepo.hasSpareCapacity(true); @@ -162,7 +162,7 @@ public class VcmrMaintainerTest { } @Test - public void pending_retirement_when_vcmr_is_far_ahead() { + void pending_retirement_when_vcmr_is_far_ahead() { var activeNode = createNode(host2, NodeType.host, Node.State.active, false); nodeRepo.putNodes(zoneId, List.of(activeNode)); nodeRepo.hasSpareCapacity(true); @@ -181,13 +181,13 @@ public class VcmrMaintainerTest { activeNode = nodeRepo.list(zoneId, NodeFilter.all().hostnames(host2)).get(0); var report = VcmrReport.fromReports(activeNode.reports()); var reportAdded = report.getVcmrs().stream() - .filter(vcmr -> vcmr.getId().equals(changeRequestId)) - .count() == 1; + .filter(vcmr -> vcmr.getId().equals(changeRequestId)) + .count() == 1; assertTrue(reportAdded); } @Test - public void recycles_nodes_if_vcmr_is_postponed() { + void recycles_nodes_if_vcmr_is_postponed() { var parkedNode = createNode(host1, NodeType.host, Node.State.parked, false); var retiringNode = createNode(host2, NodeType.host, Node.State.active, true); nodeRepo.putNodes(zoneId, List.of(parkedNode, retiringNode)); @@ -210,7 +210,7 @@ public class VcmrMaintainerTest { } @Test - public void handle_multizone_vcmr() { + void handle_multizone_vcmr() { var configNode = createNode(host1, NodeType.config, Node.State.active, false); var tenantNode1 = createNode(host2, NodeType.host, Node.State.active, false); var tenantNode2 = createNode(host3, NodeType.host, Node.State.active, false); @@ -234,7 +234,7 @@ public class VcmrMaintainerTest { } @Test - public void out_of_sync_when_manual_reactivation() { + void out_of_sync_when_manual_reactivation() { var nonRetiringNode = createNode(host1, NodeType.host, Node.State.active, false); nodeRepo.putNodes(zoneId, nonRetiringNode); @@ -253,7 +253,7 @@ public class VcmrMaintainerTest { } @Test - public void retirement_start_time_ignores_weekends() { + void retirement_start_time_ignores_weekends() { var plannedStartTime = ZonedDateTime.now().with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY)); var retirementStartTime = maintainer.getRetirementStartTime(plannedStartTime); assertEquals(plannedStartTime.minusDays(2), retirementStartTime); 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 d85ec868d56..e6f46e0630d 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 @@ -5,15 +5,15 @@ import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.integration.organization.SystemMonitor; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.util.Collections; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author bratseth @@ -23,7 +23,7 @@ public class VersionStatusUpdaterTest { /** 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() { + void testVersionUpdating() { ControllerTester tester = new ControllerTester(); tester.controller().updateVersionStatus(new VersionStatus(Collections.emptyList())); assertFalse(tester.controller().readVersionStatus().systemVersion().isPresent()); @@ -35,7 +35,7 @@ public class VersionStatusUpdaterTest { } @Test - public void testConfidenceConversion() { + void testConfidenceConversion() { List.of(VespaVersion.Confidence.values()).forEach(VersionStatusUpdater::convert); assertEquals(SystemMonitor.Confidence.broken, VersionStatusUpdater.convert(VespaVersion.Confidence.broken)); assertEquals(SystemMonitor.Confidence.low, VersionStatusUpdater.convert(VespaVersion.Confidence.low)); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationFormatterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationFormatterTest.java index c643a612f00..164df0a27f5 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationFormatterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationFormatterTest.java @@ -13,12 +13,12 @@ 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.application.TenantAndApplicationId; import com.yahoo.vespa.hosted.controller.integration.ZoneRegistryMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author enygaard @@ -35,7 +35,7 @@ public class NotificationFormatterTest { private final NotificationFormatter formatter = new NotificationFormatter(zoneRegistry); @Test - public void applicationPackage() { + void applicationPackage() { var notification = new Notification(Instant.now(), Notification.Type.applicationPackage, Notification.Level.warning, NotificationSource.from(applicationId), List.of("1", "2")); var content = formatter.format(notification); assertEquals("Application package", content.prettyType()); @@ -44,7 +44,7 @@ public class NotificationFormatterTest { } @Test - public void deployment() { + void deployment() { var runId = new RunId(applicationId, JobType.prod(RegionName.defaultName()), 1001); var notification = new Notification(Instant.now(), Notification.Type.deployment, Notification.Level.warning, NotificationSource.from(runId), List.of("1")); var content = formatter.format(notification); @@ -54,7 +54,7 @@ public class NotificationFormatterTest { } @Test - public void deploymentError() { + void deploymentError() { var runId = new RunId(applicationId, JobType.prod(RegionName.defaultName()), 1001); var notification = new Notification(Instant.now(), Notification.Type.deployment, Notification.Level.error, NotificationSource.from(runId), List.of("1")); var content = formatter.format(notification); @@ -64,7 +64,7 @@ public class NotificationFormatterTest { } @Test - public void testPackage() { + void testPackage() { var notification = new Notification(Instant.now(), Notification.Type.testPackage, Notification.Level.warning, NotificationSource.from(TenantAndApplicationId.from(applicationId)), List.of("1")); var content = formatter.format(notification); assertEquals("Test package", content.prettyType()); @@ -73,7 +73,7 @@ public class NotificationFormatterTest { } @Test - public void reindex() { + void reindex() { var notification = new Notification(Instant.now(), Notification.Type.reindex, Notification.Level.info, NotificationSource.from(deploymentId, cluster), List.of("1")); var content = formatter.format(notification); assertEquals("Reindex", content.prettyType()); @@ -82,7 +82,7 @@ public class NotificationFormatterTest { } @Test - public void feedBlock() { + void feedBlock() { var notification = new Notification(Instant.now(), Notification.Type.feedBlock, Notification.Level.warning, NotificationSource.from(deploymentId, cluster), List.of("1")); var content = formatter.format(notification); assertEquals("Nearly feed blocked", content.prettyType()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationsDbTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationsDbTest.java index 5666f8bafd8..1a171341ee0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationsDbTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotificationsDbTest.java @@ -25,8 +25,8 @@ import com.yahoo.vespa.hosted.controller.tenant.CloudTenant; import com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo; import com.yahoo.vespa.hosted.controller.tenant.TenantContacts; import com.yahoo.vespa.hosted.controller.tenant.TenantInfo; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.ArrayList; @@ -39,9 +39,9 @@ import java.util.stream.Collectors; import static com.yahoo.vespa.hosted.controller.notification.Notification.Level; import static com.yahoo.vespa.hosted.controller.notification.Notification.Type; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author freva @@ -77,7 +77,7 @@ public class NotificationsDbTest { private final NotificationsDb notificationsDb = new NotificationsDb(clock, curatorDb, new Notifier(curatorDb, new ZoneRegistryMock(SystemName.cd), mailer, flagSource)); @Test - public void list_test() { + void list_test() { assertEquals(notifications, notificationsDb.listNotifications(NotificationSource.from(tenant), false)); assertEquals(notificationIndices(0, 1, 2, 3), notificationsDb.listNotifications(NotificationSource.from(tenant), true)); assertEquals(notificationIndices(2, 3), notificationsDb.listNotifications(NotificationSource.from(TenantAndApplicationId.from(tenant.value(), "app2")), false)); @@ -87,7 +87,7 @@ public class NotificationsDbTest { } @Test - public void add_test() { + void add_test() { Notification notification1 = notification(12345, Type.deployment, Level.warning, NotificationSource.from(ApplicationId.from(tenant.value(), "app2", "instance2")), "instance msg #2"); Notification notification2 = notification(12345, Type.deployment, Level.error, NotificationSource.from(ApplicationId.from(tenant.value(), "app3", "instance2")), "instance msg #3"); @@ -103,11 +103,11 @@ public class NotificationsDbTest { } @Test - public void notifier_test() { + void notifier_test() { Notification notification1 = notification(12345, Type.deployment, Level.warning, NotificationSource.from(ApplicationId.from(tenant.value(), "app2", "instance2")), "instance msg #2"); Notification notification2 = notification(12345, Type.applicationPackage, Level.error, NotificationSource.from(ApplicationId.from(tenant.value(), "app3", "instance2")), "instance msg #3"); Notification notification3 = notification(12345, Type.reindex, Level.warning, NotificationSource.from(new DeploymentId(ApplicationId.from(tenant.value(), "app2", "instance2"), ZoneId.defaultId()), new ClusterSpec.Id("content")), "instance msg #2"); -; + ; var a = notifications.get(0); notificationsDb.setNotification(a.source(), a.type(), a.level(), a.messages()); assertEquals(0, mailer.inbox(email).size()); @@ -126,7 +126,7 @@ public class NotificationsDbTest { } @Test - public void remove_single_test() { + void remove_single_test() { // Remove the 3rd notification notificationsDb.removeNotification(NotificationSource.from(ApplicationId.from(tenant.value(), "app2", "instance2")), Type.deployment); @@ -137,7 +137,7 @@ public class NotificationsDbTest { } @Test - public void remove_multiple_test() { + void remove_multiple_test() { // Remove the 3rd notification notificationsDb.removeNotifications(NotificationSource.from(ApplicationId.from(tenant.value(), "app1", "instance1"))); assertEquals(notificationIndices(0, 1, 2, 3), curatorDb.readNotifications(tenant)); @@ -149,7 +149,7 @@ public class NotificationsDbTest { } @Test - public void deployment_metrics_notify_test() { + void deployment_metrics_notify_test() { DeploymentId deploymentId = new DeploymentId(ApplicationId.from(tenant.value(), "app1", "instance1"), ZoneId.from("prod", "us-south-3")); NotificationSource sourceCluster1 = NotificationSource.from(deploymentId, ClusterSpec.Id.from("cluster1")); List<Notification> expected = new ArrayList<>(notifications); @@ -172,7 +172,7 @@ public class NotificationsDbTest { } @Test - public void feed_blocked_single_cluster_test() { + void feed_blocked_single_cluster_test() { DeploymentId deploymentId = new DeploymentId(ApplicationId.from(tenant.value(), "app1", "instance1"), ZoneId.from("prod", "us-south-3")); NotificationSource sourceCluster1 = NotificationSource.from(deploymentId, ClusterSpec.Id.from("cluster1")); List<Notification> expected = new ArrayList<>(notifications); @@ -207,7 +207,7 @@ public class NotificationsDbTest { } @Test - public void deployment_metrics_multiple_cluster_test() { + void deployment_metrics_multiple_cluster_test() { DeploymentId deploymentId = new DeploymentId(ApplicationId.from(tenant.value(), "app1", "instance1"), ZoneId.from("prod", "us-south-3")); NotificationSource sourceCluster1 = NotificationSource.from(deploymentId, ClusterSpec.Id.from("cluster1")); NotificationSource sourceCluster2 = NotificationSource.from(deploymentId, ClusterSpec.Id.from("cluster2")); @@ -231,7 +231,7 @@ public class NotificationsDbTest { assertEquals(expected, curatorDb.readNotifications(tenant)); } - @Before + @BeforeEach public void init() { curatorDb.writeNotifications(tenant, notifications); curatorDb.writeTenant(cloudTenant); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotifierTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotifierTest.java index 4132db74140..00d8c100ced 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotifierTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/notification/NotifierTest.java @@ -16,17 +16,15 @@ import com.yahoo.vespa.hosted.controller.tenant.CloudTenant; import com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo; import com.yahoo.vespa.hosted.controller.tenant.TenantContacts; import com.yahoo.vespa.hosted.controller.tenant.TenantInfo; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.List; import java.util.Map; import java.util.Optional; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class NotifierTest { private static final TenantName tenant = TenantName.from("tenant1"); @@ -48,13 +46,13 @@ public class NotifierTest { MockCuratorDb curatorDb = new MockCuratorDb(SystemName.Public); - @Before + @BeforeEach public void init() { curatorDb.writeTenant(cloudTenant); } @Test - public void dispatch() { + void dispatch() { var mailer = new MockMailer(); var flagSource = new InMemoryFlagSource().withBooleanFlag(Flags.NOTIFICATION_DISPATCH_FLAG.id(), true); var notifier = new Notifier(curatorDb, new ZoneRegistryMock(SystemName.cd), mailer, flagSource); @@ -86,7 +84,7 @@ public class NotifierTest { } @Test - public void linkify() { + void linkify() { var data = Map.of( "Hello. https://example.com/foo/bar.html is a nice place.", "Hello. <a href=\"https://example.com/foo/bar.html\">https://example.com/foo/bar.html</a> is a nice place.", "No url.", "No url."); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java index e60325a140a..88da698b3f2 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java @@ -30,7 +30,7 @@ import com.yahoo.vespa.hosted.controller.metric.ApplicationMetrics; import com.yahoo.vespa.hosted.controller.routing.rotation.RotationId; import com.yahoo.vespa.hosted.controller.routing.rotation.RotationState; import com.yahoo.vespa.hosted.controller.routing.rotation.RotationStatus; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.nio.file.Files; import java.nio.file.Path; @@ -47,7 +47,7 @@ import java.util.OptionalInt; import java.util.OptionalLong; import java.util.Set; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author bratseth @@ -70,18 +70,18 @@ public class ApplicationSerializerTest { @Test - public void testSerialization() throws Exception { + void testSerialization() throws Exception { DeploymentSpec deploymentSpec = DeploymentSpec.fromXml("<deployment version='1.0'>\n" + - " <staging/>\n" + - " <instance id=\"i1\">\n" + - " <prod global-service-id=\"default\">\n" + - " <region active=\"true\">us-west-1</region>\n" + - " </prod>\n" + - " </instance>\n" + - "</deployment>"); + " <staging/>\n" + + " <instance id=\"i1\">\n" + + " <prod global-service-id=\"default\">\n" + + " <region active=\"true\">us-west-1</region>\n" + + " </prod>\n" + + " </instance>\n" + + "</deployment>"); ValidationOverrides validationOverrides = ValidationOverrides.fromXml("<validation-overrides version='1.0'>" + - " <allow until='2017-06-15'>deployment-removal</allow>" + - "</validation-overrides>"); + " <allow until='2017-06-15'>deployment-removal</allow>" + + "</validation-overrides>"); OptionalLong projectId = OptionalLong.of(123L); @@ -89,69 +89,69 @@ public class ApplicationSerializerTest { ApplicationId id3 = ApplicationId.from("t1", "a1", "i3"); List<Deployment> deployments = new ArrayList<>(); ApplicationVersion applicationVersion1 = new ApplicationVersion(RevisionId.forProduction(31), - Optional.of(new SourceRevision("git@github:org/repo.git", "branch1", "commit1")), - Optional.of("william@shakespeare"), - Optional.of(Version.fromString("1.2.3")), - Optional.of(Instant.ofEpochMilli(666)), - Optional.empty(), - Optional.of("best commit"), - Optional.of("hash1"), - true, - false, - Optional.of("~(˘▾˘)~"), - 3); + Optional.of(new SourceRevision("git@github:org/repo.git", "branch1", "commit1")), + Optional.of("william@shakespeare"), + Optional.of(Version.fromString("1.2.3")), + Optional.of(Instant.ofEpochMilli(666)), + Optional.empty(), + Optional.of("best commit"), + Optional.of("hash1"), + true, + false, + Optional.of("~(˘▾˘)~"), + 3); assertEquals("https://github/org/repo/tree/commit1", applicationVersion1.sourceUrl().get()); ApplicationVersion applicationVersion2 = ApplicationVersion.from(RevisionId.forDevelopment(31, new JobId(id1, DeploymentContext.productionUsEast3)), - new SourceRevision("repo1", "branch1", "commit1"), "a@b", - Version.fromString("6.3.1"), - Instant.ofEpochMilli(496)); + new SourceRevision("repo1", "branch1", "commit1"), "a@b", + Version.fromString("6.3.1"), + Instant.ofEpochMilli(496)); Instant activityAt = Instant.parse("2018-06-01T10:15:30.00Z"); deployments.add(new Deployment(zone1, applicationVersion1.id(), Version.fromString("1.2.3"), Instant.ofEpochMilli(3), - DeploymentMetrics.none, DeploymentActivity.none, QuotaUsage.none, OptionalDouble.empty())); + DeploymentMetrics.none, DeploymentActivity.none, QuotaUsage.none, OptionalDouble.empty())); deployments.add(new Deployment(zone2, applicationVersion2.id(), Version.fromString("1.2.3"), Instant.ofEpochMilli(5), - new DeploymentMetrics(2, 3, 4, 5, 6, - Optional.of(Instant.now().truncatedTo(ChronoUnit.MILLIS)), - Map.of(DeploymentMetrics.Warning.all, 3)), - DeploymentActivity.create(Optional.of(activityAt), Optional.of(activityAt), - OptionalDouble.of(200), OptionalDouble.of(10)), - QuotaUsage.create(OptionalDouble.of(23.5)), - OptionalDouble.of(12.3))); + new DeploymentMetrics(2, 3, 4, 5, 6, + Optional.of(Instant.now().truncatedTo(ChronoUnit.MILLIS)), + Map.of(DeploymentMetrics.Warning.all, 3)), + DeploymentActivity.create(Optional.of(activityAt), Optional.of(activityAt), + OptionalDouble.of(200), OptionalDouble.of(10)), + QuotaUsage.create(OptionalDouble.of(23.5)), + OptionalDouble.of(12.3))); var rotationStatus = RotationStatus.from(Map.of(new RotationId("my-rotation"), - new RotationStatus.Targets( - Map.of(ZoneId.from("prod", "us-west-1"), RotationState.in, - ZoneId.from("prod", "us-east-3"), RotationState.out), - Instant.ofEpochMilli(42)))); + new RotationStatus.Targets( + Map.of(ZoneId.from("prod", "us-west-1"), RotationState.in, + ZoneId.from("prod", "us-east-3"), RotationState.out), + Instant.ofEpochMilli(42)))); RevisionHistory revisions = RevisionHistory.ofRevisions(List.of(applicationVersion1), - Map.of(new JobId(id1, DeploymentContext.productionUsEast3), List.of(applicationVersion2))); + Map.of(new JobId(id1, DeploymentContext.productionUsEast3), List.of(applicationVersion2))); List<Instance> instances = List.of(new Instance(id1, - deployments, - Map.of(DeploymentContext.systemTest, Instant.ofEpochMilli(333)), - List.of(AssignedRotation.fromStrings("foo", "default", "my-rotation", Set.of("us-west-1"))), - rotationStatus, - Change.of(new Version("6.1"))), - new Instance(id3, - List.of(), - Map.of(), - List.of(), - RotationStatus.EMPTY, - Change.of(Version.fromString("6.7")).withPin())); + deployments, + Map.of(DeploymentContext.systemTest, Instant.ofEpochMilli(333)), + List.of(AssignedRotation.fromStrings("foo", "default", "my-rotation", Set.of("us-west-1"))), + rotationStatus, + Change.of(new Version("6.1"))), + new Instance(id3, + List.of(), + Map.of(), + List.of(), + RotationStatus.EMPTY, + Change.of(Version.fromString("6.7")).withPin())); Application original = new Application(TenantAndApplicationId.from(id1), - Instant.now().truncatedTo(ChronoUnit.MILLIS), - deploymentSpec, - validationOverrides, - Optional.of(IssueId.from("4321")), - Optional.of(IssueId.from("1234")), - Optional.of(User.from("by-username")), - OptionalInt.of(7), - new ApplicationMetrics(0.5, 0.9), - Set.of(publicKey, otherPublicKey), - projectId, - revisions, - instances + Instant.now().truncatedTo(ChronoUnit.MILLIS), + deploymentSpec, + validationOverrides, + Optional.of(IssueId.from("4321")), + Optional.of(IssueId.from("1234")), + Optional.of(User.from("by-username")), + OptionalInt.of(7), + new ApplicationMetrics(0.5, 0.9), + Set.of(publicKey, otherPublicKey), + projectId, + revisions, + instances ); Application serialized = APPLICATION_SERIALIZER.fromSlime(SlimeUtils.toJsonBytes(APPLICATION_SERIALIZER.toSlime(original))); @@ -189,9 +189,9 @@ public class ApplicationSerializerTest { assertEquals(original.require(id1.instance()).deployments().get(zone2), serialized.require(id1.instance()).deployments().get(zone2)); assertEquals(original.require(id1.instance()).jobPause(DeploymentContext.systemTest), - serialized.require(id1.instance()).jobPause(DeploymentContext.systemTest)); + serialized.require(id1.instance()).jobPause(DeploymentContext.systemTest)); assertEquals(original.require(id1.instance()).jobPause(DeploymentContext.stagingTest), - serialized.require(id1.instance()).jobPause(DeploymentContext.stagingTest)); + serialized.require(id1.instance()).jobPause(DeploymentContext.stagingTest)); assertEquals(original.ownershipIssueId(), serialized.ownershipIssueId()); assertEquals(original.owner(), serialized.owner()); @@ -220,7 +220,7 @@ public class ApplicationSerializerTest { } @Test - public void testCompleteApplicationDeserialization() throws Exception { + void testCompleteApplicationDeserialization() throws Exception { byte[] applicationJson = Files.readAllBytes(testData.resolve("complete-application.json")); APPLICATION_SERIALIZER.fromSlime(applicationJson); // ok if no error diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializerTest.java index a3e4f6e6f89..82c5a6fc0c1 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ArchiveBucketsSerializerTest.java @@ -3,16 +3,16 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.config.provision.TenantName; import com.yahoo.vespa.hosted.controller.api.integration.archive.ArchiveBucket; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.LinkedHashSet; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class ArchiveBucketsSerializerTest { @Test - public void serdes() { + void serdes() { var testTenants = new LinkedHashSet<TenantName>(); testTenants.add(TenantName.from("tenant1")); testTenants.add(TenantName.from("tenant2")); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializerTest.java index c047f31e171..4508372738f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/AuditLogSerializerTest.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.vespa.hosted.controller.auditlog.AuditLog; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.nio.charset.StandardCharsets; import java.time.Duration; @@ -10,8 +10,8 @@ import java.time.Instant; import java.util.List; import static java.time.temporal.ChronoUnit.MILLIS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden @@ -19,7 +19,7 @@ import static org.junit.Assert.assertTrue; public class AuditLogSerializerTest { @Test - public void test_serialization() { + void test_serialization() { Instant i1 = Instant.now(); Instant i2 = i1.minus(Duration.ofHours(1)); Instant i3 = i1.minus(Duration.ofHours(2)); @@ -27,20 +27,20 @@ public class AuditLogSerializerTest { AuditLog log = new AuditLog(List.of( new AuditLog.Entry(i1, "bar", AuditLog.Entry.Method.POST, - "/bar/baz/", - "0".repeat(2048).getBytes(StandardCharsets.UTF_8)), + "/bar/baz/", + "0".repeat(2048).getBytes(StandardCharsets.UTF_8)), new AuditLog.Entry(i2, "foo", AuditLog.Entry.Method.POST, - "/foo/bar/", - "{\"foo\":\"bar\"}".getBytes(StandardCharsets.UTF_8)), + "/foo/bar/", + "{\"foo\":\"bar\"}".getBytes(StandardCharsets.UTF_8)), new AuditLog.Entry(i3, "baz", AuditLog.Entry.Method.POST, - "/foo/baz/", - new byte[0]), + "/foo/baz/", + new byte[0]), new AuditLog.Entry(i4, "baz", AuditLog.Entry.Method.POST, - "/foo/baz/", - "000\ufdff\ufeff\uffff000".getBytes(StandardCharsets.UTF_8)), // non-ascii + "/foo/baz/", + "000\ufdff\ufeff\uffff000".getBytes(StandardCharsets.UTF_8)), // non-ascii new AuditLog.Entry(i4, "quux", AuditLog.Entry.Method.POST, - "/foo/quux/", - new byte[]{(byte) 0xDE, (byte) 0xAD, (byte) 0xBE, (byte) 0xEF}) // garbage + "/foo/quux/", + new byte[]{(byte) 0xDE, (byte) 0xAD, (byte) 0xBE, (byte) 0xEF}) // garbage )); AuditLogSerializer serializer = new AuditLogSerializer(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStoreTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStoreTest.java index 87280c0c1a3..eb5422f5cff 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStoreTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStoreTest.java @@ -10,7 +10,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockRunDataStore; import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.RunLog; import com.yahoo.vespa.hosted.controller.deployment.Step; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.ArrayList; @@ -20,21 +20,21 @@ import java.util.Optional; import java.util.stream.IntStream; import static java.util.stream.Collectors.toUnmodifiableList; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class BufferedLogStoreTest { @Test - public void chunkingAndFlush() { + void chunkingAndFlush() { int chunkSize = 1 << 10; int maxChunks = 1 << 5; CuratorDb buffer = new MockCuratorDb(SystemName.main); RunDataStore store = new MockRunDataStore(); BufferedLogStore logs = new BufferedLogStore(chunkSize, chunkSize * maxChunks, buffer, store); RunId id = new RunId(ApplicationId.from("tenant", "application", "instance"), - DeploymentContext.productionUsWest1, - 123); + DeploymentContext.productionUsWest1, + 123); byte[] manyBytes = new byte[chunkSize / 2 + 1]; // One fits, and two (over-)fills. Arrays.fill(manyBytes, (byte) 'O'); @@ -52,27 +52,27 @@ public class BufferedLogStoreTest { logs.append(id.application(), id.type(), Step.deployReal, List.of(entry), false); assertEquals(List.of(entry0), - logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); assertEquals(RunLog.empty(), logs.readActive(id.application(), id.type(), 0)); logs.append(id.application(), id.type(), Step.deployReal, List.of(entry), false); assertEquals(List.of(entry0, entry1), - logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); assertEquals(List.of(entry1), - logs.readActive(id.application(), id.type(), 0).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), 0).get(Step.deployReal)); assertEquals(RunLog.empty(), logs.readActive(id.application(), id.type(), 1)); logs.append(id.application(), id.type(), Step.deployReal, List.of(entry, entry, entry), false); assertEquals(List.of(entry0, entry1, entry2, entry3, entry4), - logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); assertEquals(List.of(entry1, entry2, entry3, entry4), - logs.readActive(id.application(), id.type(), 0).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), 0).get(Step.deployReal)); assertEquals(List.of(entry2, entry3, entry4), - logs.readActive(id.application(), id.type(), 1).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), 1).get(Step.deployReal)); assertEquals(List.of(entry3, entry4), - logs.readActive(id.application(), id.type(), 2).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), 2).get(Step.deployReal)); assertEquals(List.of(entry4), - logs.readActive(id.application(), id.type(), 3).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), 3).get(Step.deployReal)); assertEquals(RunLog.empty(), logs.readActive(id.application(), id.type(), 4)); // We should now have three chunks, with two, two, and one entries. @@ -86,21 +86,21 @@ public class BufferedLogStoreTest { assertEquals(RunLog.empty(), logs.readActive(id.application(), id.type(), -1)); assertEquals(List.of(entry0, entry1, entry2, entry3, entry4), - logs.readFinished(id, -1).get().get(Step.deployReal)); + logs.readFinished(id, -1).get().get(Step.deployReal)); assertEquals(List.of(entry1, entry2, entry3, entry4), - logs.readFinished(id, 0).get().get(Step.deployReal)); + logs.readFinished(id, 0).get().get(Step.deployReal)); assertEquals(List.of(entry2, entry3, entry4), - logs.readFinished(id, 1).get().get(Step.deployReal)); + logs.readFinished(id, 1).get().get(Step.deployReal)); assertEquals(List.of(entry3, entry4), - logs.readFinished(id, 2).get().get(Step.deployReal)); + logs.readFinished(id, 2).get().get(Step.deployReal)); assertEquals(List.of(entry4), - logs.readFinished(id, 3).get().get(Step.deployReal)); + logs.readFinished(id, 3).get().get(Step.deployReal)); assertEquals(List.of(), logs.readFinished(id, 4).get().get(Step.deployReal)); // Logging a large entry enough times to reach the maximum size causes no further entries to be stored. List<LogEntry> monsterLog = IntStream.range(0, 2 * maxChunks + 3) - .mapToObj(i -> new LogEntry(i, entry.at(), entry.type(), entry.message())) - .collect(toUnmodifiableList()); + .mapToObj(i -> new LogEntry(i, entry.at(), entry.type(), entry.message())) + .collect(toUnmodifiableList()); List<LogEntry> logged = new ArrayList<>(monsterLog); logged.remove(logged.size() - 1); logged.remove(logged.size() - 1); @@ -109,18 +109,18 @@ public class BufferedLogStoreTest { logs.append(id.application(), id.type(), Step.deployReal, monsterLog, false); assertEquals(logged.size(), - logs.readActive(id.application(), id.type(), -1).get(Step.deployReal).size()); + logs.readActive(id.application(), id.type(), -1).get(Step.deployReal).size()); assertEquals(logged, - logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); // An additional, forced entry is appended. LogEntry forced = new LogEntry(logged.size(), entry.at(), entry.type(), entry.message()); logs.append(id.application(), id.type(), Step.deployReal, List.of(forced), true); logged.add(forced); assertEquals(logged.size(), - logs.readActive(id.application(), id.type(), -1).get(Step.deployReal).size()); + logs.readActive(id.application(), id.type(), -1).get(Step.deployReal).size()); assertEquals(logged, - logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); logged.remove(logged.size() - 1); // Flushing the buffer clears it again, and makes it ready for reuse. @@ -128,9 +128,9 @@ public class BufferedLogStoreTest { for (int i = 0; i < 2 * maxChunks + 3; i++) logs.append(id.application(), id.type(), Step.deployReal, List.of(entry), false); assertEquals(logged.size(), - logs.readActive(id.application(), id.type(), -1).get(Step.deployReal).size()); + logs.readActive(id.application(), id.type(), -1).get(Step.deployReal).size()); assertEquals(logged, - logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); + logs.readActive(id.application(), id.type(), -1).get(Step.deployReal)); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ChangeRequestSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ChangeRequestSerializerTest.java index a52a6b81eb9..77686467336 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ChangeRequestSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ChangeRequestSerializerTest.java @@ -6,13 +6,13 @@ import com.yahoo.vespa.hosted.controller.api.integration.vcmr.ChangeRequest; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.ChangeRequestSource; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.HostAction; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.VespaChangeRequest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.time.ZonedDateTime; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author olaa @@ -20,7 +20,7 @@ import static org.junit.Assert.assertEquals; public class ChangeRequestSerializerTest { @Test - public void reserialization_equality() { + void reserialization_equality() { var source = new ChangeRequestSource("aws", "id321", "url", ChangeRequestSource.Status.STARTED, ZonedDateTime.now(), ZonedDateTime.now()); var actionPlan = List.of( new HostAction("host1", HostAction.State.RETIRING, Instant.now()), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ControllerVersionSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ControllerVersionSerializerTest.java index 20cc82f0143..a7188cfa93e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ControllerVersionSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ControllerVersionSerializerTest.java @@ -3,11 +3,11 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.component.Version; import com.yahoo.vespa.hosted.controller.api.identifiers.ControllerVersion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -17,7 +17,7 @@ public class ControllerVersionSerializerTest { private final ControllerVersionSerializer serializer = new ControllerVersionSerializer(); @Test - public void serialization() { + void serialization() { var version = new ControllerVersion(Version.fromString("7.42.1"), "badc0ffee", Instant.ofEpochSecond(1565876112)); var serialized = serializer.fromSlime(serializer.toSlime(version)); assertEquals(version.version(), serialized.version()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java index c4aa2b5a18b..819d9282618 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java @@ -2,12 +2,12 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.vespa.hosted.controller.api.integration.certificates.EndpointCertificateMetadata; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.List; import java.util.Optional; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class EndpointCertificateMetadataSerializerTest { @@ -18,21 +18,21 @@ public class EndpointCertificateMetadataSerializerTest { new EndpointCertificateMetadata("keyName", "certName", 1, 0, "rootRequestId", Optional.empty(), List.of("SAN1", "SAN2"), "issuer", Optional.empty(), Optional.empty()); @Test - public void serialize_with_optional_fields() { + void serialize_with_optional_fields() { assertEquals( "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1,\"lastRequested\":0,\"requestId\":\"rootRequestId\",\"leafRequestId\":\"leafRequestId\",\"requestedDnsSans\":[\"SAN1\",\"SAN2\"],\"issuer\":\"issuer\",\"expiry\":1628000000,\"lastRefreshed\":1612000000}", EndpointCertificateMetadataSerializer.toSlime(sampleWithOptionalFieldsSet).toString()); } @Test - public void serialize_without_optional_fields() { + void serialize_without_optional_fields() { assertEquals( "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1,\"lastRequested\":0,\"requestId\":\"rootRequestId\",\"requestedDnsSans\":[\"SAN1\",\"SAN2\"],\"issuer\":\"issuer\"}", EndpointCertificateMetadataSerializer.toSlime(sampleWithoutOptionalFieldsSet).toString()); } @Test - public void deserialize_from_json_with_optional_fields() { + void deserialize_from_json_with_optional_fields() { assertEquals( sampleWithOptionalFieldsSet, EndpointCertificateMetadataSerializer.fromJsonString( @@ -40,7 +40,7 @@ public class EndpointCertificateMetadataSerializerTest { } @Test - public void deserialize_from_json_without_optional_fields() { + void deserialize_from_json_without_optional_fields() { assertEquals( sampleWithoutOptionalFieldsSet, EndpointCertificateMetadataSerializer.fromJsonString( diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializerTest.java index 1e63b87e7c6..d03a17edde2 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializerTest.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.vespa.hosted.controller.api.integration.LogEntry; import com.yahoo.vespa.hosted.controller.deployment.Step; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.nio.file.Files; @@ -17,7 +17,7 @@ import java.util.Map; import static com.yahoo.vespa.hosted.controller.deployment.Step.deployReal; import static com.yahoo.vespa.hosted.controller.deployment.Step.deployTester; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author jonmv @@ -28,7 +28,7 @@ public class LogSerializerTest { private static final Path logsFile = Paths.get("src/test/java/com/yahoo/vespa/hosted/controller/persistence/testdata/logs.json"); @Test - public void testSerialization() throws IOException { + void testSerialization() throws IOException { for (LogEntry.Type type : LogEntry.Type.values()) assertEquals(type, LogSerializer.typeOf(LogSerializer.valueOf(type))); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializerTest.java index 5ecc22ffc5e..6f0a36690ed 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializerTest.java @@ -11,11 +11,11 @@ import com.yahoo.vespa.hosted.controller.dns.CreateRecord; import com.yahoo.vespa.hosted.controller.dns.CreateRecords; import com.yahoo.vespa.hosted.controller.dns.NameServiceQueue; import com.yahoo.vespa.hosted.controller.dns.RemoveRecords; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -25,20 +25,20 @@ public class NameServiceQueueSerializerTest { private final NameServiceQueueSerializer serializer = new NameServiceQueueSerializer(); @Test - public void test_serialization() { + void test_serialization() { var record1 = new Record(Record.Type.CNAME, RecordName.from("cname.example.com"), RecordData.from("example.com")); var record2 = new Record(Record.Type.TXT, RecordName.from("txt.example.com"), RecordData.from("text")); var requests = List.of( new CreateRecord(record1), new CreateRecords(List.of(record2)), new CreateRecords(List.of(new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.of("alias1"), - "dns-zone-01", - ZoneId.from("prod", "us-north-1")).pack()), - new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.of("alias2"), - "dns-zone-02", - ZoneId.from("prod", "us-north-2")).pack())) + new LatencyAliasTarget(HostName.of("alias1"), + "dns-zone-01", + ZoneId.from("prod", "us-north-1")).pack()), + new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), + new LatencyAliasTarget(HostName.of("alias2"), + "dns-zone-02", + ZoneId.from("prod", "us-north-2")).pack())) ), new RemoveRecords(record1.type(), record1.name()), new RemoveRecords(record2.type(), record2.data()) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializerTest.java index 370b1cbe02c..c9755672232 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializerTest.java @@ -10,13 +10,13 @@ import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.notification.Notification; import com.yahoo.vespa.hosted.controller.notification.NotificationSource; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.time.Instant; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author freva @@ -24,7 +24,7 @@ import static org.junit.Assert.assertEquals; public class NotificationsSerializerTest { @Test - public void serialization_test() throws IOException { + void serialization_test() throws IOException { NotificationsSerializer serializer = new NotificationsSerializer(); TenantName tenantName = TenantName.from("tenant1"); List<Notification> notifications = List.of( @@ -42,20 +42,20 @@ public class NotificationsSerializerTest { Slime serialized = serializer.toSlime(notifications); assertEquals("{\"notifications\":[" + "{" + - "\"at\":1234000," + - "\"type\":\"applicationPackage\"," + - "\"level\":\"warning\"," + - "\"messages\":[\"Something something deprecated...\"]," + - "\"application\":\"app1\"" + + "\"at\":1234000," + + "\"type\":\"applicationPackage\"," + + "\"level\":\"warning\"," + + "\"messages\":[\"Something something deprecated...\"]," + + "\"application\":\"app1\"" + "},{" + - "\"at\":2345000," + - "\"type\":\"deployment\"," + - "\"level\":\"error\"," + - "\"messages\":[\"Failed to deploy: Node allocation failure\"]," + - "\"application\":\"app1\"," + - "\"instance\":\"instance1\"," + - "\"jobId\":\"test.us-east-1\"," + - "\"runNumber\":12" + + "\"at\":2345000," + + "\"type\":\"deployment\"," + + "\"level\":\"error\"," + + "\"messages\":[\"Failed to deploy: Node allocation failure\"]," + + "\"application\":\"app1\"," + + "\"instance\":\"instance1\"," + + "\"jobId\":\"test.us-east-1\"," + + "\"runNumber\":12" + "}]}", new String(SlimeUtils.toJsonBytes(serialized))); List<Notification> deserialized = serializer.fromSlime(tenantName, serialized); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionSerializerTest.java index c722b3bbb96..568b17817a1 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionSerializerTest.java @@ -5,11 +5,11 @@ import com.google.common.collect.ImmutableSet; import com.yahoo.component.Version; import com.yahoo.config.provision.CloudName; import com.yahoo.vespa.hosted.controller.versions.OsVersion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.Set; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -17,7 +17,7 @@ import static org.junit.Assert.assertEquals; public class OsVersionSerializerTest { @Test - public void test_serialization() { + void test_serialization() { OsVersionSerializer serializer = new OsVersionSerializer(); Set<OsVersion> osVersions = ImmutableSet.of( new OsVersion(Version.fromString("7.1"), CloudName.defaultName()), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java index d50c071d98e..7461bf6516c 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java @@ -8,7 +8,7 @@ import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; import com.yahoo.vespa.hosted.controller.versions.OsVersion; import com.yahoo.vespa.hosted.controller.versions.OsVersionStatus; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.LinkedHashMap; @@ -16,7 +16,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -24,7 +24,7 @@ import static org.junit.Assert.assertEquals; public class OsVersionStatusSerializerTest { @Test - public void serialization() { + void serialization() { Version version1 = Version.fromString("7.1"); Version version2 = Version.fromString("7.2"); Map<OsVersion, List<NodeVersion>> versions = new LinkedHashMap<>(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializerTest.java index 1af4465528d..654703b36c0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializerTest.java @@ -6,13 +6,13 @@ import com.yahoo.component.Version; import com.yahoo.config.provision.CloudName; import com.yahoo.vespa.hosted.controller.versions.OsVersion; import com.yahoo.vespa.hosted.controller.versions.OsVersionTarget; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; import java.util.Set; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -20,7 +20,7 @@ import static org.junit.Assert.assertEquals; public class OsVersionTargetSerializerTest { @Test - public void serialization() { + void serialization() { OsVersionTargetSerializer serializer = new OsVersionTargetSerializer(new OsVersionSerializer()); Set<OsVersionTarget> targets = ImmutableSet.of( new OsVersionTarget(new OsVersion(Version.fromString("7.1"), CloudName.defaultName()), Duration.ZERO, Instant.ofEpochMilli(123)), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java index 2e8ba84d4ff..3df459513d7 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java @@ -9,7 +9,7 @@ import com.yahoo.vespa.hosted.controller.application.EndpointId; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicy; import com.yahoo.vespa.hosted.controller.routing.RoutingPolicyId; import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.Iterator; @@ -17,7 +17,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mortent @@ -27,34 +27,34 @@ public class RoutingPolicySerializerTest { private final RoutingPolicySerializer serializer = new RoutingPolicySerializer(); @Test - public void serialization() { + void serialization() { var owner = ApplicationId.defaultId(); var instanceEndpoints = Set.of(EndpointId.of("r1"), EndpointId.of("r2")); var applicationEndpoints = Set.of(EndpointId.of("a1")); var id1 = new RoutingPolicyId(owner, - ClusterSpec.Id.from("my-cluster1"), - ZoneId.from("prod", "us-north-1")); + ClusterSpec.Id.from("my-cluster1"), + ZoneId.from("prod", "us-north-1")); var id2 = new RoutingPolicyId(owner, - ClusterSpec.Id.from("my-cluster2"), - ZoneId.from("prod", "us-north-2")); + ClusterSpec.Id.from("my-cluster2"), + ZoneId.from("prod", "us-north-2")); var policies = List.of(new RoutingPolicy(id1, - HostName.of("long-and-ugly-name"), - Optional.of("zone1"), - instanceEndpoints, - applicationEndpoints, - new RoutingPolicy.Status(true, RoutingStatus.DEFAULT)), - new RoutingPolicy(id2, - HostName.of("long-and-ugly-name-2"), - Optional.empty(), - instanceEndpoints, - Set.of(), - new RoutingPolicy.Status(false, - new RoutingStatus(RoutingStatus.Value.out, - RoutingStatus.Agent.tenant, - Instant.ofEpochSecond(123))))); + HostName.of("long-and-ugly-name"), + Optional.of("zone1"), + instanceEndpoints, + applicationEndpoints, + new RoutingPolicy.Status(true, RoutingStatus.DEFAULT)), + new RoutingPolicy(id2, + HostName.of("long-and-ugly-name-2"), + Optional.empty(), + instanceEndpoints, + Set.of(), + new RoutingPolicy.Status(false, + new RoutingStatus(RoutingStatus.Value.out, + RoutingStatus.Agent.tenant, + Instant.ofEpochSecond(123))))); var serialized = serializer.fromSlime(owner, serializer.toSlime(policies)); assertEquals(policies.size(), serialized.size()); - for (Iterator<RoutingPolicy> it1 = policies.iterator(), it2 = serialized.iterator(); it1.hasNext();) { + for (Iterator<RoutingPolicy> it1 = policies.iterator(), it2 = serialized.iterator(); it1.hasNext(); ) { var expected = it1.next(); var actual = it2.next(); assertEquals(expected.id(), actual.id()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java index 6a01a70eb98..644f26e888a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java @@ -15,7 +15,7 @@ import com.yahoo.vespa.hosted.controller.deployment.Run; import com.yahoo.vespa.hosted.controller.deployment.RunStatus; import com.yahoo.vespa.hosted.controller.deployment.Step; import com.yahoo.vespa.hosted.controller.deployment.StepInfo; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.nio.file.Files; @@ -46,9 +46,9 @@ import static com.yahoo.vespa.hosted.controller.deployment.Step.startStagingSetu import static com.yahoo.vespa.hosted.controller.deployment.Step.startTests; import static java.nio.charset.StandardCharsets.UTF_8; import static java.time.temporal.ChronoUnit.MILLIS; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; public class RunSerializerTest { @@ -60,7 +60,7 @@ public class RunSerializerTest { private static final Instant start = Instant.parse("2007-12-03T10:15:30.00Z"); @Test - public void testSerialization() throws IOException { + void testSerialization() throws IOException { for (Step step : Step.values()) assertEquals(step, RunSerializer.stepOf(RunSerializer.valueOf(step))); @@ -89,16 +89,16 @@ public class RunSerializerTest { assertEquals(new Version(1, 2, 2), run.versions().sourcePlatform().get()); assertEquals(revision2, run.versions().sourceRevision().get()); assertEquals(Optional.of(new ConvergenceSummary(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233)), - run.convergenceSummary()); + run.convergenceSummary()); assertEquals(X509CertificateUtils.fromPem("-----BEGIN CERTIFICATE-----\n" + - "MIIBEzCBu6ADAgECAgEBMAoGCCqGSM49BAMEMBQxEjAQBgNVBAMTCW15c2Vydmlj\n" + - "ZTAeFw0xOTA5MDYwNzM3MDZaFw0xOTA5MDcwNzM3MDZaMBQxEjAQBgNVBAMTCW15\n" + - "c2VydmljZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABM0JhD8fV2DlAkjQOGX3\n" + - "Y50ryMBr3g2+v/uFiRoxJ1muuSOWYrW7HCQIGuzc04fa0QwtaX/voAZKCV51t6jF\n" + - "0fwwCgYIKoZIzj0EAwQDRwAwRAIgVbQ3Co1H4X0gmRrtXSyTU0HgBQu9PXHMmX20\n" + - "5MyyPSoCIBltOcmaPfdN03L3zqbqZ6PgUBWsvAHgiBzL3hrtJ+iy\n" + - "-----END CERTIFICATE-----"), - run.testerCertificate().get()); + "MIIBEzCBu6ADAgECAgEBMAoGCCqGSM49BAMEMBQxEjAQBgNVBAMTCW15c2Vydmlj\n" + + "ZTAeFw0xOTA5MDYwNzM3MDZaFw0xOTA5MDcwNzM3MDZaMBQxEjAQBgNVBAMTCW15\n" + + "c2VydmljZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABM0JhD8fV2DlAkjQOGX3\n" + + "Y50ryMBr3g2+v/uFiRoxJ1muuSOWYrW7HCQIGuzc04fa0QwtaX/voAZKCV51t6jF\n" + + "0fwwCgYIKoZIzj0EAwQDRwAwRAIgVbQ3Co1H4X0gmRrtXSyTU0HgBQu9PXHMmX20\n" + + "5MyyPSoCIBltOcmaPfdN03L3zqbqZ6PgUBWsvAHgiBzL3hrtJ+iy\n" + + "-----END CERTIFICATE-----"), + run.testerCertificate().get()); assertEquals(ImmutableMap.<Step, StepInfo>builder() .put(deployInitialReal, new StepInfo(deployInitialReal, unfinished, Optional.empty())) .put(installInitialReal, new StepInfo(installInitialReal, failed, Optional.of(Instant.ofEpochMilli(1196676940000L)))) @@ -118,10 +118,10 @@ public class RunSerializerTest { run.steps()); run = run.with(1L << 50) - .with(Instant.now().truncatedTo(MILLIS)) - .noNodesDownSince(Instant.now().truncatedTo(MILLIS)) - .aborted() - .finished(Instant.now().truncatedTo(MILLIS)); + .with(Instant.now().truncatedTo(MILLIS)) + .noNodesDownSince(Instant.now().truncatedTo(MILLIS)) + .aborted() + .finished(Instant.now().truncatedTo(MILLIS)); assertEquals(aborted, run.status()); assertTrue(run.hasEnded()); @@ -140,7 +140,7 @@ public class RunSerializerTest { assertEquals(run.reason(), phoenix.reason()); assertEquals(new String(SlimeUtils.toJsonBytes(serializer.toSlime(run).get(), false), UTF_8), - new String(SlimeUtils.toJsonBytes(serializer.toSlime(phoenix).get(), false), UTF_8)); + new String(SlimeUtils.toJsonBytes(serializer.toSlime(phoenix).get(), false), UTF_8)); Run initial = Run.initial(id, run.versions(), run.isRedeployment(), run.start(), JobProfile.production, Optional.empty()); assertEquals(initial, serializer.runFromSlime(serializer.toSlime(initial))); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/SupportAccessSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/SupportAccessSerializerTest.java index 8b2c291f751..8aa53fb5cd4 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/SupportAccessSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/SupportAccessSerializerTest.java @@ -11,7 +11,7 @@ import com.yahoo.slime.Slime; import com.yahoo.vespa.hosted.controller.support.access.SupportAccess; import com.yahoo.vespa.hosted.controller.support.access.SupportAccessGrant; import org.intellij.lang.annotations.Language; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.security.auth.x500.X500Principal; import java.io.ByteArrayOutputStream; @@ -22,7 +22,7 @@ import java.security.cert.X509Certificate; import java.time.Instant; import java.time.temporal.ChronoUnit; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class SupportAccessSerializerTest { @@ -78,70 +78,70 @@ public class SupportAccessSerializerTest { } @Test - public void serialize_default() { + void serialize_default() { var slime = SupportAccessSerializer.serializeCurrentState(SupportAccess.DISALLOWED_NO_HISTORY, Instant.EPOCH); assertSerialized(slime, "{\n" + - " \"state\": {\n" + - " \"supportAccess\": \"NOT_ALLOWED\"\n" + - " },\n" + - " \"history\": [ ],\n" + - " \"grants\": [ ]\n" + - "}\n"); + " \"state\": {\n" + + " \"supportAccess\": \"NOT_ALLOWED\"\n" + + " },\n" + + " \"history\": [ ],\n" + + " \"grants\": [ ]\n" + + "}\n"); } @Test - public void serialize_with_certificates() { + void serialize_with_certificates() { var slime = SupportAccessSerializer.toSlime(supportAccessExample); assertSerialized(slime, expectedWithCertificates); } @Test - public void serialize_with_status() { + void serialize_with_status() { var slime = SupportAccessSerializer.serializeCurrentState(supportAccessExample, hour(12)); assertSerialized(slime, - "{\n" - + " \"state\": {\n" - + " \"supportAccess\": \"ALLOWED\",\n" - + " \"until\": \"1970-01-02T12:00:00Z\",\n" - + " \"by\": \"andreer\"\n" - + " },\n" - + " \"history\": [\n" - + " {\n" - + " \"state\": \"allowed\",\n" - + " \"at\": \"1970-01-02T06:00:00Z\",\n" - + " \"until\": \"1970-01-02T12:00:00Z\",\n" - + " \"by\": \"andreer\"\n" - + " },\n" - + " {\n" - + " \"state\": \"disallowed\",\n" - + " \"at\": \"1970-01-01T22:00:00Z\",\n" - + " \"by\": \"andreer\"\n" - + " },\n" - + " {\n" - + " \"state\": \"allowed\",\n" - + " \"at\": \"1970-01-01T02:00:00Z\",\n" - + " \"until\": \"1970-01-02T00:00:00Z\",\n" - + " \"by\": \"andreer\"\n" - + " },\n" - + " {\n" - + " \"state\": \"grant\",\n" - + " \"at\": \"1970-01-01T03:00:00Z\",\n" - + " \"until\": \"1970-01-01T04:00:00Z\",\n" - + " \"by\": \"mortent\"\n" - + " }\n" - + " ],\n" - + " \"grants\": [\n" - + " {\n" - + " \"requestor\": \"mortent\",\n" - + " \"notBefore\": \"1970-01-01T07:00:00Z\",\n" - + " \"notAfter\": \"1970-01-01T19:00:00Z\"\n" - + " }\n" - + " ]\n" - + "}\n"); + "{\n" + + " \"state\": {\n" + + " \"supportAccess\": \"ALLOWED\",\n" + + " \"until\": \"1970-01-02T12:00:00Z\",\n" + + " \"by\": \"andreer\"\n" + + " },\n" + + " \"history\": [\n" + + " {\n" + + " \"state\": \"allowed\",\n" + + " \"at\": \"1970-01-02T06:00:00Z\",\n" + + " \"until\": \"1970-01-02T12:00:00Z\",\n" + + " \"by\": \"andreer\"\n" + + " },\n" + + " {\n" + + " \"state\": \"disallowed\",\n" + + " \"at\": \"1970-01-01T22:00:00Z\",\n" + + " \"by\": \"andreer\"\n" + + " },\n" + + " {\n" + + " \"state\": \"allowed\",\n" + + " \"at\": \"1970-01-01T02:00:00Z\",\n" + + " \"until\": \"1970-01-02T00:00:00Z\",\n" + + " \"by\": \"andreer\"\n" + + " },\n" + + " {\n" + + " \"state\": \"grant\",\n" + + " \"at\": \"1970-01-01T03:00:00Z\",\n" + + " \"until\": \"1970-01-01T04:00:00Z\",\n" + + " \"by\": \"mortent\"\n" + + " }\n" + + " ],\n" + + " \"grants\": [\n" + + " {\n" + + " \"requestor\": \"mortent\",\n" + + " \"notBefore\": \"1970-01-01T07:00:00Z\",\n" + + " \"notAfter\": \"1970-01-01T19:00:00Z\"\n" + + " }\n" + + " ]\n" + + "}\n"); } @Test - public void deserialize() { + void deserialize() { var slime = SupportAccessSerializer.toSlime(supportAccessExample); assertSerialized(slime, expectedWithCertificates); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java index a9e633a78d6..e29d4afabff 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java @@ -23,7 +23,7 @@ import com.yahoo.vespa.hosted.controller.tenant.TenantBilling; import com.yahoo.vespa.hosted.controller.tenant.TenantContact; import com.yahoo.vespa.hosted.controller.tenant.TenantContacts; import com.yahoo.vespa.hosted.controller.tenant.TenantInfo; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.net.URI; import java.security.PublicKey; @@ -33,9 +33,9 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden @@ -53,12 +53,12 @@ public class TenantSerializerTest { "-----END PUBLIC KEY-----\n"); @Test - public void athenz_tenant() { + void athenz_tenant() { AthenzTenant tenant = AthenzTenant.create(TenantName.from("athenz-tenant"), - new AthenzDomain("domain1"), - new Property("property1"), - Optional.of(new PropertyId("1")), - Instant.ofEpochMilli(1234L)); + new AthenzDomain("domain1"), + new Property("property1"), + Optional.of(new PropertyId("1")), + Instant.ofEpochMilli(1234L)); AthenzTenant serialized = (AthenzTenant) serializer.tenantFrom(serializer.toSlime(tenant)); assertEquals(tenant.name(), serialized.name()); assertEquals(tenant.domain(), serialized.domain()); @@ -69,41 +69,41 @@ public class TenantSerializerTest { } @Test - public void athenz_tenant_without_property_id() { + void athenz_tenant_without_property_id() { AthenzTenant tenant = AthenzTenant.create(TenantName.from("athenz-tenant"), - new AthenzDomain("domain1"), - new Property("property1"), - Optional.empty(), - Instant.EPOCH); + new AthenzDomain("domain1"), + new Property("property1"), + Optional.empty(), + Instant.EPOCH); AthenzTenant serialized = (AthenzTenant) serializer.tenantFrom(serializer.toSlime(tenant)); assertFalse(serialized.propertyId().isPresent()); assertEquals(tenant.propertyId(), serialized.propertyId()); } @Test - public void athenz_tenant_with_contact() { + void athenz_tenant_with_contact() { AthenzTenant tenant = new AthenzTenant(TenantName.from("athenz-tenant"), - new AthenzDomain("domain1"), - new Property("property1"), - Optional.of(new PropertyId("1")), - Optional.of(contact()), - Instant.EPOCH, - lastLoginInfo(321L, 654L, 987L)); + new AthenzDomain("domain1"), + new Property("property1"), + Optional.of(new PropertyId("1")), + Optional.of(contact()), + Instant.EPOCH, + lastLoginInfo(321L, 654L, 987L)); AthenzTenant serialized = (AthenzTenant) serializer.tenantFrom(serializer.toSlime(tenant)); assertEquals(tenant.contact(), serialized.contact()); } @Test - public void cloud_tenant() { + void cloud_tenant() { CloudTenant tenant = new CloudTenant(TenantName.from("elderly-lady"), - Instant.ofEpochMilli(1234L), - lastLoginInfo(123L, 456L, null), - Optional.of(new SimplePrincipal("foobar-user")), - ImmutableBiMap.of(publicKey, new SimplePrincipal("joe"), - otherPublicKey, new SimplePrincipal("jane")), - TenantInfo.empty(), - List.of(), - new ArchiveAccess() + Instant.ofEpochMilli(1234L), + lastLoginInfo(123L, 456L, null), + Optional.of(new SimplePrincipal("foobar-user")), + ImmutableBiMap.of(publicKey, new SimplePrincipal("joe"), + otherPublicKey, new SimplePrincipal("jane")), + TenantInfo.empty(), + List.of(), + new ArchiveAccess() ); CloudTenant serialized = (CloudTenant) serializer.tenantFrom(serializer.toSlime(tenant)); assertEquals(tenant.name(), serialized.name()); @@ -113,7 +113,7 @@ public class TenantSerializerTest { } @Test - public void cloud_tenant_with_info() { + void cloud_tenant_with_info() { CloudTenant tenant = new CloudTenant(TenantName.from("elderly-lady"), Instant.EPOCH, lastLoginInfo(null, 789L, 654L), @@ -133,7 +133,7 @@ public class TenantSerializerTest { } @Test - public void cloud_tenant_with_old_archive_access_serialization() { + void cloud_tenant_with_old_archive_access_serialization() { var json = "{\n" + " \"name\": \"elderly-lady\",\n" + " \"type\": \"cloud\",\n" + @@ -165,7 +165,7 @@ public class TenantSerializerTest { } @Test - public void cloud_tenant_with_archive_access() { + void cloud_tenant_with_archive_access() { CloudTenant tenant = new CloudTenant(TenantName.from("elderly-lady"), Instant.ofEpochMilli(1234L), lastLoginInfo(123L, 456L, null), @@ -182,7 +182,7 @@ public class TenantSerializerTest { } @Test - public void cloud_tenant_with_tenant_info_partial() { + void cloud_tenant_with_tenant_info_partial() { TenantInfo partialInfo = TenantInfo.empty() .withAddress(TenantAddress.empty().withCity("Hønefoss")); @@ -193,7 +193,7 @@ public class TenantSerializerTest { } @Test - public void cloud_tenant_with_tenant_info_full() { + void cloud_tenant_with_tenant_info_full() { TenantInfo fullInfo = TenantInfo.empty() .withName("My Company") .withEmail("email@mycomp.any") @@ -222,7 +222,7 @@ public class TenantSerializerTest { } @Test - public void cloud_tenant_with_tenant_info_contacts() { + void cloud_tenant_with_tenant_info_contacts() { TenantInfo tenantInfo = TenantInfo.empty() .withContacts(new TenantContacts(List.of( new TenantContacts.EmailContact(List.of(TenantContacts.Audience.TENANT), "email1@email.com"), @@ -235,7 +235,7 @@ public class TenantSerializerTest { } @Test - public void deleted_tenant() { + void deleted_tenant() { DeletedTenant tenant = new DeletedTenant( TenantName.from("tenant1"), Instant.ofEpochMilli(1234L), Instant.ofEpochMilli(2345L)); DeletedTenant serialized = (DeletedTenant) serializer.tenantFrom(serializer.toSlime(tenant)); 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 73cfc6ad2f3..618c33835bd 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 @@ -7,7 +7,7 @@ import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.ArrayList; @@ -15,7 +15,7 @@ import java.util.List; import java.util.Optional; import static java.time.temporal.ChronoUnit.MILLIS; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -23,15 +23,15 @@ import static org.junit.Assert.assertEquals; public class VersionStatusSerializerTest { @Test - public void testSerialization() { + void testSerialization() { List<VespaVersion> vespaVersions = new ArrayList<>(); Version version = Version.fromString("5.0"); vespaVersions.add(new VespaVersion(version, "dead", Instant.now(), false, false, - true, nodeVersions(Version.fromString("5.0"), Version.fromString("5.1"), - "cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); + true, nodeVersions(Version.fromString("5.0"), Version.fromString("5.1"), + "cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); vespaVersions.add(new VespaVersion(version, "cafe", Instant.now(), true, true, - false, nodeVersions(Version.fromString("5.0"), Version.fromString("5.1"), - "cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); + false, nodeVersions(Version.fromString("5.0"), Version.fromString("5.1"), + "cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); VersionStatus status = new VersionStatus(vespaVersions); VersionStatusSerializer serializer = new VersionStatusSerializer(new NodeVersionSerializer()); VersionStatus deserialized = serializer.fromSlime(serializer.toSlime(status)); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializerTest.java index 234de233571..f524f4a2d4f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ZoneRoutingPolicySerializerTest.java @@ -4,11 +4,11 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.routing.ZoneRoutingPolicy; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -16,12 +16,12 @@ import static org.junit.Assert.assertEquals; public class ZoneRoutingPolicySerializerTest { @Test - public void serialization() { + void serialization() { var serializer = new ZoneRoutingPolicySerializer(new RoutingPolicySerializer()); var zone = ZoneId.from("prod", "us-north-1"); var policy = new ZoneRoutingPolicy(zone, - RoutingStatus.create(RoutingStatus.Value.out, RoutingStatus.Agent.operator, - Instant.ofEpochMilli(123))); + RoutingStatus.create(RoutingStatus.Value.out, RoutingStatus.Agent.operator, + Instant.ofEpochMilli(123))); var serialized = serializer.fromSlime(zone, serializer.toSlime(policy)); assertEquals(policy, serialized); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImplTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImplTest.java index f5926e799af..5214ded0904 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImplTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImplTest.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.hosted.controller.proxy; import ai.vespa.http.HttpURL.Path; -import com.github.tomakehurst.wiremock.junit.WireMockRule; +import com.github.tomakehurst.wiremock.junit5.WireMockExtension; import com.github.tomakehurst.wiremock.stubbing.Scenario; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; @@ -10,8 +10,8 @@ import com.yahoo.yolean.concurrent.Sleeper; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.HttpCoreContext; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; import javax.net.ssl.SSLContext; import java.io.ByteArrayOutputStream; @@ -25,21 +25,21 @@ import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden */ public class ConfigServerRestExecutorImplTest { - @Rule - public final WireMockRule wireMock = new WireMockRule(options().dynamicPort(), true); + @RegisterExtension + public final WireMockExtension wireMock = WireMockExtension.newInstance().options(options().dynamicPort()).failOnUnmatchedRequests(true).build(); @Test - public void proxy_with_retries() throws Exception { + void proxy_with_retries() throws Exception { var connectionReuseStrategy = new CountingConnectionReuseStrategy(Set.of("127.0.0.1")); var proxy = new ConfigServerRestExecutorImpl(new SSLConnectionSocketFactory(SSLContext.getDefault()), - Sleeper.NOOP, connectionReuseStrategy); + Sleeper.NOOP, connectionReuseStrategy); URI url = url(); String path = url.getPath(); @@ -61,10 +61,10 @@ public class ConfigServerRestExecutorImplTest { } @Test - public void proxy_without_connection_reuse() throws Exception { + void proxy_without_connection_reuse() throws Exception { var connectionReuseStrategy = new CountingConnectionReuseStrategy(Set.of()); var proxy = new ConfigServerRestExecutorImpl(new SSLConnectionSocketFactory(SSLContext.getDefault()), - Sleeper.NOOP, connectionReuseStrategy); + Sleeper.NOOP, connectionReuseStrategy); URI url = url(); String path = url.getPath(); @@ -79,7 +79,7 @@ public class ConfigServerRestExecutorImplTest { } private URI url() { - return URI.create("http://127.0.0.1:" + wireMock.port() + "/"); + return URI.create("http://127.0.0.1:" + wireMock.getPort() + "/"); } private void stubRequests(String path) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyRequestTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyRequestTest.java index e6de60c859b..d851eb56890 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyRequestTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyRequestTest.java @@ -3,14 +3,14 @@ package com.yahoo.vespa.hosted.controller.proxy; import ai.vespa.http.HttpURL.Path; import com.yahoo.jdisc.http.HttpRequest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.net.URI; import java.util.List; import java.util.Map; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Haakon Dybdahl @@ -18,14 +18,14 @@ import static org.junit.Assert.assertThrows; public class ProxyRequestTest { @Test - public void testBadUri() { + void testBadUri() { assertEquals("Request path '/path' does not end with proxy path '/zone/v2/'", - assertThrows(IllegalArgumentException.class, - () -> testRequest("http://domain.tld/path", "/zone/v2/")).getMessage()); + assertThrows(IllegalArgumentException.class, + () -> testRequest("http://domain.tld/path", "/zone/v2/")).getMessage()); } @Test - public void testUris() { + void testUris() { { // Root request ProxyRequest request = testRequest("http://controller.domain.tld/my/path", ""); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyResponseTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyResponseTest.java index 845d007c154..08164de6a8e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyResponseTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyResponseTest.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.controller.proxy; import ai.vespa.http.HttpURL.Path; import com.yahoo.jdisc.http.HttpRequest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.ByteArrayOutputStream; import java.net.URI; @@ -11,7 +11,7 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Haakon Dybdahl @@ -19,7 +19,7 @@ import static org.junit.Assert.assertEquals; public class ProxyResponseTest { @Test - public void testRewriteUrl() throws Exception { + void testRewriteUrl() throws Exception { ProxyRequest request = new ProxyRequest(HttpRequest.Method.GET, URI.create("http://domain.tld/zone/v2/dev/us-north-1/configserver"), Map.of(), null, List.of(URI.create("http://example.com")), Path.parse("configserver")); ProxyResponse proxyResponse = new ProxyResponse( @@ -37,9 +37,9 @@ public class ProxyResponseTest { } @Test - public void testRewriteSecureUrl() throws Exception { + void testRewriteSecureUrl() throws Exception { ProxyRequest request = new ProxyRequest(HttpRequest.Method.GET, URI.create("https://domain.tld/zone/v2/prod/eu-south-3/configserver"), - Map.of(), null, List.of(URI.create("http://example.com")), Path.parse("configserver")); + Map.of(), null, List.of(URI.create("http://example.com")), Path.parse("configserver")); ProxyResponse proxyResponse = new ProxyResponse( request, "response link is http://configserver:4443/bla/bla/", 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 07f00e8c989..539d6cff06d 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 @@ -28,8 +28,8 @@ import java.util.Optional; import java.util.function.Supplier; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; /** * Provides testing of JSON container responses @@ -123,7 +123,7 @@ public class ContainerTester { catch (IOException e) { fail("failed writing JSON: " + e); } - assertEquals("Status code", expectedStatusCode, response.getStatus()); + assertEquals(expectedStatusCode, response.getStatus(), "Status code"); } public void assertResponse(Supplier<Request> request, String expectedResponse) { @@ -154,7 +154,7 @@ public class ContainerTester { } catch (Exception e) { throw new RuntimeException(e); } - assertEquals("Status code", expectedStatusCode, response.getStatus()); + assertEquals(expectedStatusCode, response.getStatus(), "Status code"); } // Hack to run request filters as part of the request processing chain. diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java index 87fe8dd17fe..404dcca87c0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java @@ -9,8 +9,8 @@ import com.yahoo.vespa.athenz.api.AthenzIdentity; import com.yahoo.vespa.athenz.api.AthenzUser; import com.yahoo.vespa.athenz.api.OAuthCredentials; import com.yahoo.vespa.hosted.controller.api.integration.athenz.AthenzClientFactoryMock; -import org.junit.After; -import org.junit.Before; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import static com.yahoo.vespa.hosted.controller.integration.AthenzFilterMock.IDENTITY_HEADER_NAME; import static com.yahoo.vespa.hosted.controller.integration.AthenzFilterMock.OKTA_ACCESS_TOKEN_HEADER_NAME; @@ -33,7 +33,7 @@ public class ControllerContainerTest { protected JDisc container; - @Before + @BeforeEach public void startContainer() { container = JDisc.fromServicesXml(controllerServicesXml(), networking()); addUserToHostedOperatorRole(hostedOperator); @@ -41,7 +41,7 @@ public class ControllerContainerTest { protected Networking networking() { return Networking.disable; } - @After + @AfterEach public void stopContainer() { container.close(); } private String controllerServicesXml() { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java index 26dd6335ab8..674424fbdd9 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java @@ -27,8 +27,8 @@ import com.yahoo.vespa.hosted.controller.security.Auth0Credentials; import com.yahoo.vespa.hosted.controller.security.CloudTenantSpec; import com.yahoo.vespa.hosted.controller.security.Credentials; import com.yahoo.vespa.hosted.controller.tenant.CloudTenant; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.File; import java.util.Collections; @@ -40,10 +40,10 @@ import static com.yahoo.application.container.handler.Request.Method.GET; import static com.yahoo.application.container.handler.Request.Method.POST; import static com.yahoo.application.container.handler.Request.Method.PUT; import static com.yahoo.vespa.hosted.controller.restapi.application.ApplicationApiTest.createApplicationSubmissionData; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author oyving @@ -57,7 +57,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { private static final TenantName tenantName = TenantName.from("scoober"); private static final ApplicationName applicationName = ApplicationName.from("albums"); - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responseFiles); ((InMemoryFlagSource) tester.controller().flagSource()) @@ -66,7 +66,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void test_missing_security_clients_pem() { + void test_missing_security_clients_pem() { var application = prodBuilder().build(); var deployRequest = request("/application/v4/tenant/scoober/application/albums/submit", POST) @@ -80,7 +80,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void tenant_info_profile() { + void tenant_info_profile() { var request = request("/application/v4/tenant/scoober/info/profile", GET) .roles(Set.of(Role.reader(tenantName))); tester.assertResponse(request, "{}", 200); @@ -94,7 +94,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void tenant_info_billing() { + void tenant_info_billing() { var request = request("/application/v4/tenant/scoober/info/billing", GET) .roles(Set.of(Role.reader(tenantName))); tester.assertResponse(request, "{}", 200); @@ -111,7 +111,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void tenant_info_contacts() { + void tenant_info_contacts() { var request = request("/application/v4/tenant/scoober/info/contacts", GET) .roles(Set.of(Role.reader(tenantName))); tester.assertResponse(request, "{\"contacts\":[]}", 200); @@ -126,10 +126,10 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void tenant_info_workflow() { + void tenant_info_workflow() { var infoRequest = request("/application/v4/tenant/scoober/info", GET) - .roles(Set.of(Role.reader(tenantName))); + .roles(Set.of(Role.reader(tenantName))); tester.assertResponse(infoRequest, "{}", 200); String partialInfo = "{\"contactName\":\"newName\", \"contactEmail\": \"foo@example.com\", \"billingContact\":{\"name\":\"billingName\"}}"; @@ -166,7 +166,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void tenant_info_missing_fields() { + void tenant_info_missing_fields() { // tenants can be created with empty tenant info - they're not part of the POST to v4/tenant var infoRequest = request("/application/v4/tenant/scoober/info", GET) @@ -255,7 +255,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void trial_tenant_limit_reached() { + void trial_tenant_limit_reached() { ((InMemoryFlagSource) tester.controller().flagSource()).withIntFlag(PermanentFlags.MAX_TRIAL_TENANTS.id(), 1); tester.controller().serviceRegistry().billingController().setPlan(tenantName, PlanId.from("pay-as-you-go"), false, false); @@ -273,7 +273,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void test_secret_store_configuration() { + void test_secret_store_configuration() { var secretStoreRequest = request("/application/v4/tenant/scoober/secret-store/some-name", PUT) .data("{" + @@ -303,7 +303,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void validate_secret_store() { + void validate_secret_store() { deployApplication(); var secretStoreRequest = request("/application/v4/tenant/scoober/secret-store/secret-foo/validate?aws-region=us-west-1¶meter-name=foo&application-id=scoober.albums.default&zone=prod.aws-us-east-1c", GET) @@ -326,7 +326,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void delete_secret_store() { + void delete_secret_store() { var deleteRequest = request("/application/v4/tenant/scoober/secret-store/secret-foo", DELETE) .roles(Set.of(Role.developer(tenantName))); @@ -347,18 +347,18 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void archive_uri_test() { + void archive_uri_test() { ControllerTester wrapped = new ControllerTester(tester); wrapped.upgradeSystem(Version.fromString("7.1")); new DeploymentTester(wrapped).newDeploymentContext(ApplicationId.from(tenantName, applicationName, InstanceName.defaultName())) - .submit() - .deploy(); + .submit() + .deploy(); tester.assertResponse(request("/application/v4/tenant/scoober", GET).roles(Role.reader(tenantName)), (response) -> assertFalse(response.getBodyAsString().contains("archiveAccessRole")), 200); tester.assertResponse(request("/application/v4/tenant/scoober/archive-access", PUT) - .data("{\"role\":\"dummy\"}").roles(Role.administrator(tenantName)), + .data("{\"role\":\"dummy\"}").roles(Role.administrator(tenantName)), "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid archive access role 'dummy': Must match expected pattern: 'arn:aws:iam::\\\\d{12}:.+'\"}", 400); tester.assertResponse(request("/application/v4/tenant/scoober/archive-access/aws", PUT) @@ -411,7 +411,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { } @Test - public void create_application_on_deploy() { + void create_application_on_deploy() { var application = ApplicationName.from("unique"); var applicationPackage = new ApplicationPackageBuilder().withoutAthenzIdentity().build(); @@ -420,15 +420,15 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { tester.assertResponse( request("/application/v4/tenant/scoober/application/unique/instance/default/deploy/dev-aws-us-east-1c", POST) - .data(createApplicationDeployData(Optional.of(applicationPackage), Optional.empty(), true)) - .roles(Set.of(Role.developer(tenantName))), + .data(createApplicationDeployData(Optional.of(applicationPackage), Optional.empty(), true)) + .roles(Set.of(Role.developer(tenantName))), "{\"message\":\"Deployment started in run 1 of dev-aws-us-east-1c for scoober.unique. This may take about 15 minutes the first time.\",\"run\":1}"); assertTrue(tester.controller().applications().getApplication(TenantAndApplicationId.from(tenantName, application)).isPresent()); } @Test - public void create_application_on_submit() { + void create_application_on_submit() { var application = ApplicationName.from("unique"); var applicationPackage = new ApplicationPackageBuilder() .trustDefaultCertificate() 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 2435bb2efb8..e3292700432 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 @@ -70,8 +70,8 @@ import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant; import com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; import com.yahoo.yolean.Exceptions; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import javax.security.auth.x500.X500Principal; import java.io.File; @@ -100,9 +100,9 @@ import static com.yahoo.application.container.handler.Request.Method.PUT; import static java.net.URLEncoder.encode; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.stream.Collectors.joining; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author bratseth @@ -153,7 +153,7 @@ public class ApplicationApiTest extends ControllerContainerTest { private ContainerTester tester; private DeploymentTester deploymentTester; - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responseFiles); deploymentTester = new DeploymentTester(new ControllerTester(tester)); @@ -161,24 +161,24 @@ public class ApplicationApiTest extends ControllerContainerTest { } @Test - public void testApplicationApi() { + void testApplicationApi() { createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); // (Necessary but not provided in this API) // GET API root tester.assertResponse(request("/application/v4/", GET).userIdentity(USER_ID), - new File("root.json")); + new File("root.json")); // POST (add) a tenant without property ID tester.assertResponse(request("/application/v4/tenant/tenant1", POST) - .userIdentity(USER_ID) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") - .oAuthCredentials(OKTA_CREDENTIALS), - new File("tenant-without-applications.json")); + .userIdentity(USER_ID) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") + .oAuthCredentials(OKTA_CREDENTIALS), + new File("tenant-without-applications.json")); // PUT (modify) a tenant tester.assertResponse(request("/application/v4/tenant/tenant1", PUT) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), - new File("tenant-without-applications.json")); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), + new File("tenant-without-applications.json")); // Add another Athens domain, so we can try to create more tenants createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN_2, USER_ID); // New domain to test tenant w/property ID @@ -187,59 +187,59 @@ public class ApplicationApiTest extends ControllerContainerTest { // POST (add) a tenant with property ID tester.assertResponse(request("/application/v4/tenant/tenant2", POST) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS) - .data("{\"athensDomain\":\"domain2\", \"property\":\"property2\", \"propertyId\":\"1234\"}"), - new File("tenant-without-applications-with-id.json")); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS) + .data("{\"athensDomain\":\"domain2\", \"property\":\"property2\", \"propertyId\":\"1234\"}"), + new File("tenant-without-applications-with-id.json")); // PUT (modify) a tenant with property ID tester.assertResponse(request("/application/v4/tenant/tenant2", PUT) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS) - .data("{\"athensDomain\":\"domain2\", \"property\":\"property2\", \"propertyId\":\"1234\"}"), - new File("tenant-without-applications-with-id.json")); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS) + .data("{\"athensDomain\":\"domain2\", \"property\":\"property2\", \"propertyId\":\"1234\"}"), + new File("tenant-without-applications-with-id.json")); // GET a tenant with property ID and contact information updateContactInformation(); tester.controller().tenants().updateLastLogin(TenantName.from("tenant2"), List.of(LastLoginInfo.UserLevel.user, LastLoginInfo.UserLevel.administrator), Instant.ofEpochMilli(1234)); tester.assertResponse(request("/application/v4/tenant/tenant2", GET).userIdentity(USER_ID), - new File("tenant2.json")); + new File("tenant2.json")); // POST (create) an application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", POST) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - new File("instance-reference.json")); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + new File("instance-reference.json")); // GET a tenant tester.assertResponse(request("/application/v4/tenant/tenant1", GET).userIdentity(USER_ID), - new File("tenant-with-application.json")); + new File("tenant-with-application.json")); tester.assertResponse(request("/application/v4/tenant/tenant1", GET) - .userIdentity(USER_ID) - .properties(Map.of("activeInstances", "true")), - new File("tenant-without-applications.json")); + .userIdentity(USER_ID) + .properties(Map.of("activeInstances", "true")), + new File("tenant-without-applications.json")); // GET tenant applications tester.assertResponse(request("/application/v4/tenant/tenant1/application/", GET).userIdentity(USER_ID), - new File("application-list.json")); + new File("application-list.json")); // GET tenant application instances for application that does not exist tester.assertResponse(request("/application/v4/tenant/tenant1/application/fake-app/instance/", GET).userIdentity(USER_ID), "{\"error-code\":\"NOT_FOUND\",\"message\":\"Application 'fake-app' does not exist\"}", 404); // GET tenant applications (instances of "application1" only) tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/", GET).userIdentity(USER_ID), - new File("application-list.json")); + new File("application-list.json")); // GET at a tenant, with "&recursive=true&production=true", recurses over no instances yet, as they are not in deployment spec. tester.assertResponse(request("/application/v4/tenant/tenant1/", GET) - .userIdentity(USER_ID) - .properties(Map.of("recursive", "true", - "production", "true")), - new File("tenant-with-empty-application.json")); + .userIdentity(USER_ID) + .properties(Map.of("recursive", "true", + "production", "true")), + new File("tenant-with-empty-application.json")); // GET at an application, with "&recursive=true&production=true", recurses over no instances yet, as they are not in deployment spec. tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", GET) - .userIdentity(USER_ID) - .properties(Map.of("recursive", "true", - "production", "true")), - new File("application-without-instances.json")); + .userIdentity(USER_ID) + .properties(Map.of("recursive", "true", + "production", "true")), + new File("application-without-instances.json")); addUserToHostedOperatorRole(HostedAthenzIdentities.from(HOSTED_VESPA_OPERATOR)); @@ -249,87 +249,87 @@ public class ApplicationApiTest extends ControllerContainerTest { // POST (deploy) an application to start a manual deployment in prod is not allowed MultiPartStreamer entity = createApplicationDeployData(applicationPackageInstance1); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploy/production-us-east-3/", POST) - .data(entity) - .userIdentity(USER_ID), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Direct deployments are only allowed to manually deployed environments.\"}", 400); + .data(entity) + .userIdentity(USER_ID), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Direct deployments are only allowed to manually deployed environments.\"}", 400); // POST (deploy) an application to start a manual deployment in prod is allowed for operators tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploy/production-us-east-3/", POST) - .data(entity) - .userIdentity(HOSTED_VESPA_OPERATOR), - "{\"message\":\"Deployment started in run 1 of production-us-east-3 for tenant1.application1.instance1. This may take about 15 minutes the first time.\",\"run\":1}"); + .data(entity) + .userIdentity(HOSTED_VESPA_OPERATOR), + "{\"message\":\"Deployment started in run 1 of production-us-east-3 for tenant1.application1.instance1. This may take about 15 minutes the first time.\",\"run\":1}"); app1.runJob(DeploymentContext.productionUsEast3); tester.controller().applications().deactivate(app1.instanceId(), ZoneId.from("prod", "us-east-3")); // POST (deploy) an application to start a manual deployment to dev tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploy/dev-us-east-1/", POST) - .data(entity) - .userIdentity(USER_ID), - "{\"message\":\"Deployment started in run 1 of dev-us-east-1 for tenant1.application1.instance1. This may take about 15 minutes the first time.\",\"run\":1}"); + .data(entity) + .userIdentity(USER_ID), + "{\"message\":\"Deployment started in run 1 of dev-us-east-1 for tenant1.application1.instance1. This may take about 15 minutes the first time.\",\"run\":1}"); app1.runJob(DeploymentContext.devUsEast1); // POST (deploy) a job to restart a manual deployment to dev tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/dev-us-east-1", POST) - .userIdentity(USER_ID), - "{\"message\":\"Triggered dev-us-east-1 for tenant1.application1.instance1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Triggered dev-us-east-1 for tenant1.application1.instance1\"}"); app1.runJob(DeploymentContext.devUsEast1); // GET dev application package tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/dev-us-east-1/package", GET) - .userIdentity(USER_ID), - (response) -> { - assertEquals("attachment; filename=\"tenant1.application1.instance1.dev.us-east-1.zip\"", response.getHeaders().getFirst("Content-Disposition")); - assertArrayEquals(applicationPackageInstance1.zippedContent(), response.getBody()); - }, - 200); + .userIdentity(USER_ID), + (response) -> { + assertEquals("attachment; filename=\"tenant1.application1.instance1.dev.us-east-1.zip\"", response.getHeaders().getFirst("Content-Disposition")); + assertArrayEquals(applicationPackageInstance1.zippedContent(), response.getBody()); + }, + 200); // POST an application package is not generally allowed under user instance tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/otheruser/deploy/dev-us-east-1", POST) - .userIdentity(OTHER_USER_ID) - .data(createApplicationDeployData(applicationPackageInstance1)), - accessDenied, - 403); + .userIdentity(OTHER_USER_ID) + .data(createApplicationDeployData(applicationPackageInstance1)), + accessDenied, + 403); // DELETE a dev deployment is not generally allowed under user instance tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/otheruser/environment/dev/region/us-east-1", DELETE) - .userIdentity(OTHER_USER_ID), - accessDenied, - 403); + .userIdentity(OTHER_USER_ID), + accessDenied, + 403); // When the user is a tenant admin, user instances are allowed. // POST an application package is not allowed under user instance for tenant admins tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/myuser/deploy/dev-us-east-1", POST) - .userIdentity(USER_ID) - .data(createApplicationDeployData(applicationPackageInstance1)), - new File("deployment-job-accepted-2.json")); + .userIdentity(USER_ID) + .data(createApplicationDeployData(applicationPackageInstance1)), + new File("deployment-job-accepted-2.json")); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/myuser/job/dev-us-east-1/diff/1", GET).userIdentity(HOSTED_VESPA_OPERATOR), - (response) -> assertTrue(response.getBodyAsString(), - response.getBodyAsString().contains("--- schemas/test.sd\n" + + (response) -> assertTrue(response.getBodyAsString().contains("--- schemas/test.sd\n" + "@@ -1,0 +1,1 @@\n" + - "+ search test { }\n")), + "+ search test { }\n"), + response.getBodyAsString()), 200); // DELETE a dev deployment is allowed under user instance for tenant admins tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/myuser/environment/dev/region/us-east-1", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"Deactivated tenant1.application1.myuser in dev.us-east-1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Deactivated tenant1.application1.myuser in dev.us-east-1\"}"); // DELETE a user instance tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/myuser", DELETE) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"message\":\"Deleted instance tenant1.application1.myuser\"}"); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"message\":\"Deleted instance tenant1.application1.myuser\"}"); addScrewdriverUserToDeployRole(SCREWDRIVER_ID, - ATHENZ_TENANT_DOMAIN, - id.application()); + ATHENZ_TENANT_DOMAIN, + id.application()); // POST an application package and a test jar, submitting a new application for production deployment. tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/submit", POST) - .screwdriverIdentity(SCREWDRIVER_ID) - .data(createApplicationSubmissionData(applicationPackageInstance1, 123)), - "{\"message\":\"application build 1, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); + .screwdriverIdentity(SCREWDRIVER_ID) + .data(createApplicationSubmissionData(applicationPackageInstance1, 123)), + "{\"message\":\"application build 1, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); app1.runJob(DeploymentContext.systemTest).runJob(DeploymentContext.stagingTest).runJob(DeploymentContext.productionUsCentral1); @@ -344,102 +344,102 @@ public class ApplicationApiTest extends ControllerContainerTest { // POST (create) another application tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/instance/default", POST) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - new File("instance-reference-2.json")); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + new File("instance-reference-2.json")); ApplicationId id2 = ApplicationId.from("tenant2", "application2", "instance1"); var app2 = deploymentTester.newDeploymentContext(id2); addScrewdriverUserToDeployRole(SCREWDRIVER_ID, - ATHENZ_TENANT_DOMAIN_2, - id2.application()); + ATHENZ_TENANT_DOMAIN_2, + id2.application()); // POST an application package and a test jar, submitting a new application for production deployment. tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/submit", POST) - .screwdriverIdentity(SCREWDRIVER_ID) - .data(createApplicationSubmissionData(applicationPackage, 1000)), - "{\"message\":\"application build 1, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); + .screwdriverIdentity(SCREWDRIVER_ID) + .data(createApplicationSubmissionData(applicationPackage, 1000)), + "{\"message\":\"application build 1, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); deploymentTester.triggerJobs(); // POST a triggering to force a production job to start without successful tests tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/instance/instance1/job/production-us-west-1", POST) - .data("{ \"skipTests\": true, \"skipRevision\": true, \"skipUpgrade\": true }") - .userIdentity(USER_ID), - "{\"message\":\"Triggered production-us-west-1 for tenant2.application2.instance1, without revision and platform upgrade\"}"); + .data("{ \"skipTests\": true, \"skipRevision\": true, \"skipUpgrade\": true }") + .userIdentity(USER_ID), + "{\"message\":\"Triggered production-us-west-1 for tenant2.application2.instance1, without revision and platform upgrade\"}"); app2.runJob(DeploymentContext.productionUsWest1); // POST a re-triggering to force a production job to start with previous parameters tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/instance/instance1/job/production-us-west-1", POST) - .data("{\"reTrigger\":true}") - .userIdentity(USER_ID), - "{\"message\":\"Triggered production-us-west-1 for tenant2.application2.instance1\"}"); + .data("{\"reTrigger\":true}") + .userIdentity(USER_ID), + "{\"message\":\"Triggered production-us-west-1 for tenant2.application2.instance1\"}"); // DELETE manually deployed prod deployment again tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/instance/instance1/environment/prod/region/us-west-1", DELETE) - .userIdentity(HOSTED_VESPA_OPERATOR), - "{\"message\":\"Deactivated tenant2.application2.instance1 in prod.us-west-1\"}"); + .userIdentity(HOSTED_VESPA_OPERATOR), + "{\"message\":\"Deactivated tenant2.application2.instance1 in prod.us-west-1\"}"); // GET application having both change and outstanding change tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2", GET) - .screwdriverIdentity(SCREWDRIVER_ID), - new File("application2.json")); + .screwdriverIdentity(SCREWDRIVER_ID), + new File("application2.json")); // PATCH in a major version override tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2", PATCH) - .userIdentity(USER_ID) - .data("{\"majorVersion\":7}"), - "{\"message\":\"Set major version to 7\"}"); + .userIdentity(USER_ID) + .data("{\"majorVersion\":7}"), + "{\"message\":\"Set major version to 7\"}"); // POST a pem deploy key tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/key", POST) - .userIdentity(USER_ID) - .data("{\"key\":\"" + pemPublicKey + "\"}"), - "{\"keys\":[\"-----BEGIN PUBLIC KEY-----\\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuKVFA8dXk43kVfYKzkUqhEY2rDT9\\nz/4jKSTHwbYR8wdsOSrJGVEUPbS2nguIJ64OJH7gFnxM6sxUVj+Nm2HlXw==\\n-----END PUBLIC KEY-----\\n\"]}"); + .userIdentity(USER_ID) + .data("{\"key\":\"" + pemPublicKey + "\"}"), + "{\"keys\":[\"-----BEGIN PUBLIC KEY-----\\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuKVFA8dXk43kVfYKzkUqhEY2rDT9\\nz/4jKSTHwbYR8wdsOSrJGVEUPbS2nguIJ64OJH7gFnxM6sxUVj+Nm2HlXw==\\n-----END PUBLIC KEY-----\\n\"]}"); // PATCH in a pem deploy key at deprecated path tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/instance/default", PATCH) - .userIdentity(USER_ID) - .data("{\"pemDeployKey\":\"" + pemPublicKey + "\"}"), - "{\"message\":\"Added deploy key " + quotedPemPublicKey + "\"}"); + .userIdentity(USER_ID) + .data("{\"pemDeployKey\":\"" + pemPublicKey + "\"}"), + "{\"message\":\"Added deploy key " + quotedPemPublicKey + "\"}"); // GET an application with a major version override tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2", GET) - .userIdentity(USER_ID), - new File("application2-with-patches.json")); + .userIdentity(USER_ID), + new File("application2-with-patches.json")); // PATCH in removal of the application major version override removal tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2", PATCH) - .userIdentity(USER_ID) - .data("{\"majorVersion\":null}"), - "{\"message\":\"Set major version to empty\"}"); + .userIdentity(USER_ID) + .data("{\"majorVersion\":null}"), + "{\"message\":\"Set major version to empty\"}"); // GET compile version for an application tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/compile-version", GET) - .userIdentity(USER_ID), - "{\"compileVersion\":\"6.1.0\"}"); + .userIdentity(USER_ID), + "{\"compileVersion\":\"6.1.0\"}"); // DELETE the pem deploy key tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/key", DELETE) - .userIdentity(USER_ID) - .data("{\"key\":\"" + pemPublicKey + "\"}"), - "{\"keys\":[]}"); + .userIdentity(USER_ID) + .data("{\"key\":\"" + pemPublicKey + "\"}"), + "{\"keys\":[]}"); tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2", GET) - .userIdentity(USER_ID), - new File("application2.json")); + .userIdentity(USER_ID), + new File("application2.json")); // DELETE instance 1 of 2 tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/instance/default", DELETE) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"message\":\"Deleted instance tenant2.application2.default\"}"); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"message\":\"Deleted instance tenant2.application2.default\"}"); // DELETE application with only one instance left tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2", DELETE) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"message\":\"Deleted application tenant2.application2\"}"); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"message\":\"Deleted application tenant2.application2\"}"); // Set version 6.1 to broken to change compile version for. deploymentTester.upgrader().overrideConfidence(Version.fromString("6.1"), VespaVersion.Confidence.broken); @@ -448,44 +448,44 @@ public class ApplicationApiTest extends ControllerContainerTest { // GET tenant application deployments tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", GET) - .userIdentity(USER_ID), - new File("instance.json")); + .userIdentity(USER_ID), + new File("instance.json")); // GET an application deployment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1", GET) - .userIdentity(USER_ID), - new File("deployment.json")); + .userIdentity(USER_ID), + new File("deployment.json")); addIssues(deploymentTester, TenantAndApplicationId.from("tenant1", "application1")); // GET at root, with "&recursive=deployment", returns info about all tenants, their applications and their deployments tester.assertResponse(request("/application/v4/", GET) - .userIdentity(USER_ID) - .recursive("deployment"), - new File("recursive-root.json")); + .userIdentity(USER_ID) + .recursive("deployment"), + new File("recursive-root.json")); // GET at root, with "&recursive=tenant", returns info about all tenants, with limited info about their applications. tester.assertResponse(request("/application/v4/", GET) - .userIdentity(USER_ID) - .recursive("tenant"), - new File("recursive-until-tenant-root.json")); + .userIdentity(USER_ID) + .recursive("tenant"), + new File("recursive-until-tenant-root.json")); // GET at a tenant, with "&recursive=true", returns full info about their applications and their deployments tester.assertResponse(request("/application/v4/tenant/tenant1/", GET) - .userIdentity(USER_ID) - .recursive("true"), - new File("tenant1-recursive.json")); + .userIdentity(USER_ID) + .recursive("true"), + new File("tenant1-recursive.json")); // GET at an application, with "&recursive=true", returns full info about its deployments tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", GET) - .userIdentity(USER_ID) - .recursive("true"), - new File("instance1-recursive.json")); + .userIdentity(USER_ID) + .recursive("true"), + new File("instance1-recursive.json")); // GET nodes tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/nodes", GET) - .userIdentity(USER_ID), - new File("application-nodes.json")); + .userIdentity(USER_ID), + new File("application-nodes.json")); // GET clusters tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/clusters", GET) - .userIdentity(USER_ID), - new File("application-clusters.json")); + .userIdentity(USER_ID), + new File("application-clusters.json")); // GET logs tester.assertResponse(request("/application/v4/tenant/tenant2/application/application1/environment/dev/region/us-east-1/instance/default/logs?from=1233&to=3214", GET) @@ -494,12 +494,12 @@ public class ApplicationApiTest extends ControllerContainerTest { // GET controller logs tester.assertResponse(request("/application/v4/tenant/tenant2/application/application1/environment/prod/region/controller/instance/default/logs?from=1233&to=3214", GET) - .userIdentity(USER_ID), - "INFO - All good"); + .userIdentity(USER_ID), + "INFO - All good"); // Get content/../foo tester.assertResponse(request("/application/v4/tenant/tenant2/application/application1/instance/default/environment/dev/region/us-east-1/content/%2E%2E%2Ffoo", GET).userIdentity(USER_ID), - accessDenied, 403); + accessDenied, 403); // Get content - root tester.assertResponse(request("/application/v4/tenant/tenant2/application/application1/instance/default/environment/dev/region/us-east-1/content/", GET).userIdentity(USER_ID), "{\"path\":\"/\"}"); @@ -513,121 +513,121 @@ public class ApplicationApiTest extends ControllerContainerTest { // GET metrics tester.assertJsonResponse(request("/application/v4/tenant/tenant2/application/application1/environment/dev/region/us-east-1/instance/default/metrics", GET) .userIdentity(USER_ID), - new File("proton-metrics.json")); + new File("proton-metrics.json")); // POST a roll-out of the latest application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/application", POST) - .userIdentity(USER_ID), - "{\"message\":\"Triggered revision change to build 1 for tenant1.application1.instance1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Triggered revision change to build 1 for tenant1.application1.instance1\"}"); // POST a roll-out of a given revision tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/application", POST) - .data("{ \"build\": 1 }") - .userIdentity(USER_ID), - "{\"message\":\"Triggered revision change to build 1 for tenant1.application1.instance1\"}"); + .data("{ \"build\": 1 }") + .userIdentity(USER_ID), + "{\"message\":\"Triggered revision change to build 1 for tenant1.application1.instance1\"}"); // DELETE (cancel) ongoing change tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying", DELETE) - .userIdentity(HOSTED_VESPA_OPERATOR), - "{\"message\":\"Changed deployment from 'revision change to build 1' to 'no change' for tenant1.application1.instance1\"}"); + .userIdentity(HOSTED_VESPA_OPERATOR), + "{\"message\":\"Changed deployment from 'revision change to build 1' to 'no change' for tenant1.application1.instance1\"}"); // DELETE (cancel) again is a no-op tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying", DELETE) - .userIdentity(USER_ID) - .data("{\"cancel\":\"all\"}"), - "{\"message\":\"No deployment in progress for tenant1.application1.instance1 at this time\"}"); + .userIdentity(USER_ID) + .data("{\"cancel\":\"all\"}"), + "{\"message\":\"No deployment in progress for tenant1.application1.instance1 at this time\"}"); // POST pinning to a given version to an application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/pin", POST) - .userIdentity(USER_ID) - .data("6.1.0"), - "{\"message\":\"Triggered pin to 6.1 for tenant1.application1.instance1\"}"); - assertTrue("Action is logged to audit log", - tester.controller().auditLogger().readLog().entries().stream() - .anyMatch(entry -> entry.resource().equals("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/pin?"))); + .userIdentity(USER_ID) + .data("6.1.0"), + "{\"message\":\"Triggered pin to 6.1 for tenant1.application1.instance1\"}"); + assertTrue(tester.controller().auditLogger().readLog().entries().stream() + .anyMatch(entry -> entry.resource().equals("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/pin?")), + "Action is logged to audit log"); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying", GET) - .userIdentity(USER_ID), "{\"platform\":\"6.1\",\"pinned\":true}"); + .userIdentity(USER_ID), "{\"platform\":\"6.1\",\"pinned\":true}"); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/pin", GET) - .userIdentity(USER_ID), "{\"platform\":\"6.1\",\"pinned\":true}"); + .userIdentity(USER_ID), "{\"platform\":\"6.1\",\"pinned\":true}"); // DELETE only the pin to a given version tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/pin", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"Changed deployment from 'pin to 6.1' to 'upgrade to 6.1' for tenant1.application1.instance1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Changed deployment from 'pin to 6.1' to 'upgrade to 6.1' for tenant1.application1.instance1\"}"); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying", GET) - .userIdentity(USER_ID), "{\"platform\":\"6.1\",\"pinned\":false}"); + .userIdentity(USER_ID), "{\"platform\":\"6.1\",\"pinned\":false}"); // POST pinning again tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/pin", POST) - .userIdentity(USER_ID) - .data("6.1"), - "{\"message\":\"Triggered pin to 6.1 for tenant1.application1.instance1\"}"); + .userIdentity(USER_ID) + .data("6.1"), + "{\"message\":\"Triggered pin to 6.1 for tenant1.application1.instance1\"}"); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying", GET) - .userIdentity(USER_ID), "{\"platform\":\"6.1\",\"pinned\":true}"); + .userIdentity(USER_ID), "{\"platform\":\"6.1\",\"pinned\":true}"); // DELETE only the version, but leave the pin tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/platform", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"Changed deployment from 'pin to 6.1' to 'pin to current platform' for tenant1.application1.instance1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Changed deployment from 'pin to 6.1' to 'pin to current platform' for tenant1.application1.instance1\"}"); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying", GET) - .userIdentity(USER_ID), "{\"pinned\":true}"); + .userIdentity(USER_ID), "{\"pinned\":true}"); // DELETE also the pin to a given version tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying/pin", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"Changed deployment from 'pin to current platform' to 'no change' for tenant1.application1.instance1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Changed deployment from 'pin to current platform' to 'no change' for tenant1.application1.instance1\"}"); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploying", GET) - .userIdentity(USER_ID), "{}"); + .userIdentity(USER_ID), "{}"); // POST a pause to a production job tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-west-1/pause", POST) - .userIdentity(USER_ID), - "{\"message\":\"production-us-west-1 for tenant1.application1.instance1 paused for " + DeploymentTrigger.maxPause + "\"}"); + .userIdentity(USER_ID), + "{\"message\":\"production-us-west-1 for tenant1.application1.instance1 paused for " + DeploymentTrigger.maxPause + "\"}"); // DELETE a pause of a production job tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-west-1/pause", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"production-us-west-1 for tenant1.application1.instance1 resumed\"}"); + .userIdentity(USER_ID), + "{\"message\":\"production-us-west-1 for tenant1.application1.instance1 resumed\"}"); // POST a triggering to the same production job tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-west-1", POST) - .userIdentity(USER_ID), - "{\"message\":\"Triggered production-us-west-1 for tenant1.application1.instance1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Triggered production-us-west-1 for tenant1.application1.instance1\"}"); // POST a 'reindex application' command tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/reindex", POST) - .properties(Map.of("indexedOnly", "true", - "speed", "10")) - .userIdentity(USER_ID), - "{\"message\":\"Requested reindexing of tenant1.application1.instance1 in prod.us-central-1, for indexed types, with speed 10.0\"}"); + .properties(Map.of("indexedOnly", "true", + "speed", "10")) + .userIdentity(USER_ID), + "{\"message\":\"Requested reindexing of tenant1.application1.instance1 in prod.us-central-1, for indexed types, with speed 10.0\"}"); // POST a 'reindex application' command with cluster filter tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/reindex", POST) - .properties(Map.of("clusterId", "boo,moo")) - .userIdentity(USER_ID), - "{\"message\":\"Requested reindexing of tenant1.application1.instance1 in prod.us-central-1, on clusters boo, moo\"}"); + .properties(Map.of("clusterId", "boo,moo")) + .userIdentity(USER_ID), + "{\"message\":\"Requested reindexing of tenant1.application1.instance1 in prod.us-central-1, on clusters boo, moo\"}"); // POST a 'reindex application' command with cluster and document type filters tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/reindex", POST) - .properties(Map.of("clusterId", "boo,moo", - "documentType", "foo,boo")) - .userIdentity(USER_ID), - "{\"message\":\"Requested reindexing of tenant1.application1.instance1 in prod.us-central-1, on clusters boo, moo, for types foo, boo\"}"); + .properties(Map.of("clusterId", "boo,moo", + "documentType", "foo,boo")) + .userIdentity(USER_ID), + "{\"message\":\"Requested reindexing of tenant1.application1.instance1 in prod.us-central-1, on clusters boo, moo, for types foo, boo\"}"); // POST to enable reindexing tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/reindexing", POST) - .userIdentity(USER_ID), - "{\"message\":\"Enabled reindexing of tenant1.application1.instance1 in prod.us-central-1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Enabled reindexing of tenant1.application1.instance1 in prod.us-central-1\"}"); // DELETE to disable reindexing tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/reindexing", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"Disabled reindexing of tenant1.application1.instance1 in prod.us-central-1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Disabled reindexing of tenant1.application1.instance1 in prod.us-central-1\"}"); // GET to get reindexing status tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/reindexing", GET) - .userIdentity(USER_ID), - "{\"enabled\":true,\"clusters\":[{\"name\":\"cluster\",\"pending\":[{\"type\":\"type\",\"requiredGeneration\":100}],\"ready\":[{\"type\":\"type\",\"readyAtMillis\":345,\"startedAtMillis\":456,\"endedAtMillis\":567,\"state\":\"failed\",\"message\":\"(#`д´)ノ\",\"progress\":0.1,\"speed\":1.0}]}]}"); + .userIdentity(USER_ID), + "{\"enabled\":true,\"clusters\":[{\"name\":\"cluster\",\"pending\":[{\"type\":\"type\",\"requiredGeneration\":100}],\"ready\":[{\"type\":\"type\",\"readyAtMillis\":345,\"startedAtMillis\":456,\"endedAtMillis\":567,\"state\":\"failed\",\"message\":\"(#`д´)ノ\",\"progress\":0.1,\"speed\":1.0}]}]}"); // POST to request a service dump tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/node/host-tenant1.application1.instance1-prod.us-central-1/service-dump", POST) @@ -643,122 +643,122 @@ public class ApplicationApiTest extends ControllerContainerTest { // POST a 'restart application' command tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/restart", POST) - .userIdentity(USER_ID), - "{\"message\":\"Requested restart of tenant1.application1.instance1 in prod.us-central-1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Requested restart of tenant1.application1.instance1 in prod.us-central-1\"}"); // POST a 'restart application' command tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/restart", POST) - .userIdentity(HOSTED_VESPA_OPERATOR), - "{\"message\":\"Requested restart of tenant1.application1.instance1 in prod.us-central-1\"}"); + .userIdentity(HOSTED_VESPA_OPERATOR), + "{\"message\":\"Requested restart of tenant1.application1.instance1 in prod.us-central-1\"}"); addUserToHostedOperatorRole(HostedAthenzIdentities.from(SCREWDRIVER_ID)); // POST a 'restart application' in staging environment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/staging/region/us-east-3/instance/instance1/restart", POST) - .screwdriverIdentity(SCREWDRIVER_ID), - "{\"message\":\"Requested restart of tenant1.application1.instance1 in staging.us-east-3\"}"); + .screwdriverIdentity(SCREWDRIVER_ID), + "{\"message\":\"Requested restart of tenant1.application1.instance1 in staging.us-east-3\"}"); // POST a 'restart application' in test environment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/test/region/us-east-1/instance/instance1/restart", POST) - .screwdriverIdentity(SCREWDRIVER_ID), - "{\"message\":\"Requested restart of tenant1.application1.instance1 in test.us-east-1\"}"); + .screwdriverIdentity(SCREWDRIVER_ID), + "{\"message\":\"Requested restart of tenant1.application1.instance1 in test.us-east-1\"}"); // POST a 'restart application' in dev environment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/dev/region/us-east-1/instance/instance1/restart", POST) - .userIdentity(USER_ID), - "{\"message\":\"Requested restart of tenant1.application1.instance1 in dev.us-east-1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Requested restart of tenant1.application1.instance1 in dev.us-east-1\"}"); // POST a 'restart application' command with a host filter (other filters not supported yet) tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/restart", POST) - .properties(Map.of("hostname", "node-1-tenant-host-prod.us-central-1")) - .screwdriverIdentity(SCREWDRIVER_ID), - "{\"message\":\"Requested restart of tenant1.application1.instance1 in prod.us-central-1\"}", 200); + .properties(Map.of("hostname", "node-1-tenant-host-prod.us-central-1")) + .screwdriverIdentity(SCREWDRIVER_ID), + "{\"message\":\"Requested restart of tenant1.application1.instance1 in prod.us-central-1\"}", 200); // POST a 'suspend application' in dev environment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/dev/region/us-east-1/suspend", POST) - .userIdentity(USER_ID), - "{\"message\":\"Suspended orchestration of tenant1.application1.instance1 in dev.us-east-1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Suspended orchestration of tenant1.application1.instance1 in dev.us-east-1\"}"); // POST a 'resume application' in dev environment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/dev/region/us-east-1/suspend", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"Resumed orchestration of tenant1.application1.instance1 in dev.us-east-1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Resumed orchestration of tenant1.application1.instance1 in dev.us-east-1\"}"); // POST a 'suspend application' in prod environment fails tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-east-3/suspend", POST) - .userIdentity(USER_ID), - accessDenied, 403); + .userIdentity(USER_ID), + accessDenied, 403); // GET suspended tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1/suspended", GET) - .userIdentity(USER_ID), - new File("suspended.json")); + .userIdentity(USER_ID), + new File("suspended.json")); // GET service/state/v1 tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/service/storagenode/host.com/state/v1/?foo=bar", GET) - .userIdentity(USER_ID), - new File("service")); + .userIdentity(USER_ID), + new File("service")); // GET orchestrator tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/orchestrator", GET) - .userIdentity(USER_ID), - "{\"json\":\"thank you very much\"}"); + .userIdentity(USER_ID), + "{\"json\":\"thank you very much\"}"); // GET application package which has been deployed to production tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/package", GET) - .properties(Map.of("build", "latestDeployed")) - .userIdentity(HOSTED_VESPA_OPERATOR), - (response) -> { - assertEquals("attachment; filename=\"tenant1.application1-build1.zip\"", response.getHeaders().getFirst("Content-Disposition")); - assertArrayEquals(applicationPackageInstance1.zippedContent(), response.getBody()); - }, - 200); + .properties(Map.of("build", "latestDeployed")) + .userIdentity(HOSTED_VESPA_OPERATOR), + (response) -> { + assertEquals("attachment; filename=\"tenant1.application1-build1.zip\"", response.getHeaders().getFirst("Content-Disposition")); + assertArrayEquals(applicationPackageInstance1.zippedContent(), response.getBody()); + }, + 200); // DELETE application with active deployments fails tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", DELETE) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - new File("delete-with-active-deployments.json"), 400); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + new File("delete-with-active-deployments.json"), 400); // DELETE (deactivate) a deployment - dev tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/dev/region/us-east-1/instance/instance1", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"Deactivated tenant1.application1.instance1 in dev.us-east-1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Deactivated tenant1.application1.instance1 in dev.us-east-1\"}"); // DELETE (deactivate) a deployment - prod tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1", DELETE) - .screwdriverIdentity(SCREWDRIVER_ID), - "{\"message\":\"Deactivated tenant1.application1.instance1 in prod.us-central-1\"}"); + .screwdriverIdentity(SCREWDRIVER_ID), + "{\"message\":\"Deactivated tenant1.application1.instance1 in prod.us-central-1\"}"); // DELETE (deactivate) a deployment is idempotent tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-central-1/instance/instance1", DELETE) - .screwdriverIdentity(SCREWDRIVER_ID), - "{\"message\":\"Deactivated tenant1.application1.instance1 in prod.us-central-1\"}"); + .screwdriverIdentity(SCREWDRIVER_ID), + "{\"message\":\"Deactivated tenant1.application1.instance1 in prod.us-central-1\"}"); // Setup for test config tests tester.controller().jobController().deploy(ApplicationId.from("tenant1", "application1", "default"), - DeploymentContext.productionUsCentral1, - Optional.empty(), - applicationPackageDefault); + DeploymentContext.productionUsCentral1, + Optional.empty(), + applicationPackageDefault); tester.controller().jobController().deploy(ApplicationId.from("tenant1", "application1", "my-user"), - DeploymentContext.devUsEast1, - Optional.empty(), - applicationPackageDefault); + DeploymentContext.devUsEast1, + Optional.empty(), + applicationPackageDefault); // GET test-config for local tests against a dev deployment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/my-user/job/dev-us-east-1/test-config", GET) - .userIdentity(USER_ID), - new File("test-config-dev.json")); + .userIdentity(USER_ID), + new File("test-config-dev.json")); // GET test-config for local tests against a prod deployment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/my-user/job/production-us-central-1/test-config", GET) - .userIdentity(USER_ID), - new File("test-config.json")); + .userIdentity(USER_ID), + new File("test-config.json")); tester.controller().applications().deactivate(ApplicationId.from("tenant1", "application1", "default"), - ZoneId.from("prod", "us-central-1")); + ZoneId.from("prod", "us-central-1")); tester.controller().applications().deactivate(ApplicationId.from("tenant1", "application1", "my-user"), - ZoneId.from("dev", "us-east-1")); + ZoneId.from("dev", "us-east-1")); // teardown for test config tests // Second attempt has a service under a different domain than the tenant of the application, and fails. @@ -769,9 +769,9 @@ public class ApplicationApiTest extends ControllerContainerTest { .build(); allowLaunchOfService(new com.yahoo.vespa.athenz.api.AthenzService(ATHENZ_TENANT_DOMAIN_2, "service")); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/submit", POST) - .screwdriverIdentity(SCREWDRIVER_ID) - .data(createApplicationSubmissionData(packageWithServiceForWrongDomain, 123)), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Athenz domain in deployment.xml: [domain2] must match tenant domain: [domain1]\"}", 400); + .screwdriverIdentity(SCREWDRIVER_ID) + .data(createApplicationSubmissionData(packageWithServiceForWrongDomain, 123)), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Athenz domain in deployment.xml: [domain2] must match tenant domain: [domain1]\"}", 400); // Third attempt has a service under the domain of the tenant, and also succeeds. ApplicationPackage packageWithService = new ApplicationPackageBuilder() @@ -783,54 +783,54 @@ public class ApplicationApiTest extends ControllerContainerTest { .build(); allowLaunchOfService(new com.yahoo.vespa.athenz.api.AthenzService(ATHENZ_TENANT_DOMAIN, "service")); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/submit", POST) - .screwdriverIdentity(SCREWDRIVER_ID) - .data(createApplicationSubmissionData(packageWithService, 123)), - "{\"message\":\"application build 2, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); + .screwdriverIdentity(SCREWDRIVER_ID) + .data(createApplicationSubmissionData(packageWithService, 123)), + "{\"message\":\"application build 2, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/diff/2", GET).userIdentity(HOSTED_VESPA_OPERATOR), - (response) -> assertTrue(response.getBodyAsString(), - response.getBodyAsString().contains("+ <deployment version='1.0' athenz-domain='domain1' athenz-service='service'>\n" + - "- <deployment version='1.0' >\n")), - 200); + (response) -> assertTrue(response.getBodyAsString().contains("+ <deployment version='1.0' athenz-domain='domain1' athenz-service='service'>\n" + + "- <deployment version='1.0' >\n"), + response.getBodyAsString()), + 200); // GET last submitted application package tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/package", GET).userIdentity(HOSTED_VESPA_OPERATOR), - (response) -> { - assertEquals("attachment; filename=\"tenant1.application1-build2.zip\"", response.getHeaders().getFirst("Content-Disposition")); - assertArrayEquals(packageWithService.zippedContent(), response.getBody()); - }, - 200); + (response) -> { + assertEquals("attachment; filename=\"tenant1.application1-build2.zip\"", response.getHeaders().getFirst("Content-Disposition")); + assertArrayEquals(packageWithService.zippedContent(), response.getBody()); + }, + 200); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/package", GET).userIdentity(HOSTED_VESPA_OPERATOR).properties(Map.of("tests", "true")), - (response) -> { - assertEquals("attachment; filename=\"tenant1.application1-tests2.zip\"", response.getHeaders().getFirst("Content-Disposition")); - assertArrayEquals("content".getBytes(UTF_8), response.getBody()); - }, - 200); + (response) -> { + assertEquals("attachment; filename=\"tenant1.application1-tests2.zip\"", response.getHeaders().getFirst("Content-Disposition")); + assertArrayEquals("content".getBytes(UTF_8), response.getBody()); + }, + 200); // GET application package for specific build tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/package", GET) - .properties(Map.of("build", "2")) - .userIdentity(HOSTED_VESPA_OPERATOR), - (response) -> { - assertEquals("attachment; filename=\"tenant1.application1-build2.zip\"", response.getHeaders().getFirst("Content-Disposition")); - assertArrayEquals(packageWithService.zippedContent(), response.getBody()); - }, - 200); + .properties(Map.of("build", "2")) + .userIdentity(HOSTED_VESPA_OPERATOR), + (response) -> { + assertEquals("attachment; filename=\"tenant1.application1-build2.zip\"", response.getHeaders().getFirst("Content-Disposition")); + assertArrayEquals(packageWithService.zippedContent(), response.getBody()); + }, + 200); // Fourth attempt has a wrong content hash in a header, and fails. tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/submit", POST) - .screwdriverIdentity(SCREWDRIVER_ID) - .header("X-Content-Hash", "not/the/right/hash") - .data(createApplicationSubmissionData(packageWithService, 123)), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Value of X-Content-Hash header does not match computed content hash\"}", 400); + .screwdriverIdentity(SCREWDRIVER_ID) + .header("X-Content-Hash", "not/the/right/hash") + .data(createApplicationSubmissionData(packageWithService, 123)), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Value of X-Content-Hash header does not match computed content hash\"}", 400); // Fifth attempt has the right content hash in a header, and succeeds. MultiPartStreamer streamer = createApplicationSubmissionData(packageWithService, 123); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/submit", POST) - .screwdriverIdentity(SCREWDRIVER_ID) - .header("X-Content-Hash", Base64.getEncoder().encodeToString(Signatures.sha256Digest(streamer::data))) - .data(streamer), - "{\"message\":\"application build 3, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); + .screwdriverIdentity(SCREWDRIVER_ID) + .header("X-Content-Hash", Base64.getEncoder().encodeToString(Signatures.sha256Digest(streamer::data))) + .data(streamer), + "{\"message\":\"application build 3, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); // Sixth attempt has a multi-instance deployment spec, and is accepted. ApplicationPackage multiInstanceSpec = new ApplicationPackageBuilder() @@ -841,53 +841,53 @@ public class ApplicationApiTest extends ControllerContainerTest { .endpoint("default", "foo", "us-central-1", "us-west-1", "us-east-3") .build(); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/submit", POST) - .screwdriverIdentity(SCREWDRIVER_ID) - .data(createApplicationSubmissionData(multiInstanceSpec, 123)), - "{\"message\":\"application build 4, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); + .screwdriverIdentity(SCREWDRIVER_ID) + .data(createApplicationSubmissionData(multiInstanceSpec, 123)), + "{\"message\":\"application build 4, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); // DELETE submitted build, to mark it as non-deployable tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/submit/2", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"Marked build '2' as non-deployable\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Marked build '2' as non-deployable\"}"); // GET deployment job overview, after triggering system and staging test jobs. assertEquals(2, tester.controller().applications().deploymentTrigger().triggerReadyJobs().triggered()); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job", GET) - .userIdentity(USER_ID), - new File("jobs.json")); + .userIdentity(USER_ID), + new File("jobs.json")); // GET deployment job overview for whole application. tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/deployment", GET) - .userIdentity(USER_ID), - new File("deployment-overview.json")); + .userIdentity(USER_ID), + new File("deployment-overview.json")); // GET system test job overview. tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test", GET) - .userIdentity(USER_ID), - new File("system-test-job.json")); + .userIdentity(USER_ID), + new File("system-test-job.json")); // GET system test run 1 details. tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test/run/1", GET) - .userIdentity(USER_ID), - new File("system-test-details.json")); + .userIdentity(USER_ID), + new File("system-test-details.json")); // DELETE a running job to have it aborted. tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test", DELETE) - .userIdentity(USER_ID), - "{\"message\":\"Aborting run 2 of staging-test for tenant1.application1.instance1\"}"); + .userIdentity(USER_ID), + "{\"message\":\"Aborting run 2 of staging-test for tenant1.application1.instance1\"}"); // GET compile version for specific major deploymentTester.controllerTester().upgradeSystem(Version.fromString("7.0")); deploymentTester.controllerTester().flagSource().withListFlag(PermanentFlags.INCOMPATIBLE_VERSIONS.id(), List.of("*"), String.class); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/compile-version", GET) - .userIdentity(USER_ID).properties(Map.of("allowMajor", "7")), - "{\"compileVersion\":\"7.0.0\"}"); + .userIdentity(USER_ID).properties(Map.of("allowMajor", "7")), + "{\"compileVersion\":\"7.0.0\"}"); // OPTIONS return 200 OK tester.assertResponse(request("/application/v4/", Request.Method.OPTIONS) - .userIdentity(USER_ID), - ""); + .userIdentity(USER_ID), + ""); addNotifications(TenantName.from("tenant1")); addNotifications(TenantName.from("tenant2")); @@ -902,14 +902,14 @@ public class ApplicationApiTest extends ControllerContainerTest { // DELETE the application which no longer has any deployments tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", DELETE) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"message\":\"Deleted application tenant1.application1\"}"); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"message\":\"Deleted application tenant1.application1\"}"); // DELETE an empty tenant tester.assertResponse(request("/application/v4/tenant/tenant1", DELETE).userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"message\":\"Deleted tenant tenant1\"}"); + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"message\":\"Deleted tenant tenant1\"}"); // The tenant is not found tester.assertResponse(request("/application/v4/tenant/tenant1", GET).userIdentity(USER_ID) @@ -947,7 +947,7 @@ public class ApplicationApiTest extends ControllerContainerTest { } @Test - public void testRotationOverride() { + void testRotationOverride() { // Setup createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); var westZone = ZoneId.from("prod", "us-west-1"); @@ -965,60 +965,60 @@ public class ApplicationApiTest extends ControllerContainerTest { // Invalid application fails tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/environment/prod/region/us-west-1/instance/default/global-rotation", GET) - .userIdentity(USER_ID), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"tenant2.application2 not found\"}", - 400); + .userIdentity(USER_ID), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"tenant2.application2 not found\"}", + 400); // Invalid deployment fails tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/global-rotation", GET) - .userIdentity(USER_ID), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"application 'tenant1.application1.instance1' has no deployment in prod.us-central-1\"}", - 404); + .userIdentity(USER_ID), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"application 'tenant1.application1.instance1' has no deployment in prod.us-central-1\"}", + 404); // Change status of non-existing deployment fails tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/global-rotation/override", PUT) - .userIdentity(USER_ID) - .data("{\"reason\":\"unit-test\"}"), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"application 'tenant1.application1.instance1' has no deployment in prod.us-central-1\"}", - 404); + .userIdentity(USER_ID) + .data("{\"reason\":\"unit-test\"}"), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"application 'tenant1.application1.instance1' has no deployment in prod.us-central-1\"}", + 404); // GET global rotation status tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/global-rotation", GET) - .userIdentity(USER_ID), - new File("global-rotation.json")); + .userIdentity(USER_ID), + new File("global-rotation.json")); // GET global rotation override status tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/global-rotation/override", GET) - .userIdentity(USER_ID), - new File("global-rotation-get.json")); + .userIdentity(USER_ID), + new File("global-rotation-get.json")); // SET global rotation override status tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/global-rotation/override", PUT) - .userIdentity(USER_ID) - .data("{\"reason\":\"unit-test\"}"), - new File("global-rotation-put.json")); + .userIdentity(USER_ID) + .data("{\"reason\":\"unit-test\"}"), + new File("global-rotation-put.json")); // Status of routing policy is changed assertGlobalRouting(app.deploymentIdIn(westZone), RoutingStatus.Value.out, RoutingStatus.Agent.tenant); // DELETE global rotation override status tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/global-rotation/override", DELETE) - .userIdentity(USER_ID) - .data("{\"reason\":\"unit-test\"}"), - new File("global-rotation-delete.json")); + .userIdentity(USER_ID) + .data("{\"reason\":\"unit-test\"}"), + new File("global-rotation-delete.json")); assertGlobalRouting(app.deploymentIdIn(westZone), RoutingStatus.Value.in, RoutingStatus.Agent.tenant); // SET global rotation override status by operator addUserToHostedOperatorRole(HostedAthenzIdentities.from(HOSTED_VESPA_OPERATOR)); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/global-rotation/override", PUT) - .userIdentity(HOSTED_VESPA_OPERATOR) - .data("{\"reason\":\"unit-test\"}"), - new File("global-rotation-put.json")); + .userIdentity(HOSTED_VESPA_OPERATOR) + .data("{\"reason\":\"unit-test\"}"), + new File("global-rotation-put.json")); assertGlobalRouting(app.deploymentIdIn(westZone), RoutingStatus.Value.out, RoutingStatus.Agent.operator); } @Test - public void multiple_endpoints() { + void multiple_endpoints() { // Setup createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() @@ -1036,34 +1036,34 @@ public class ApplicationApiTest extends ControllerContainerTest { // GET global rotation status without specifying endpointId fails tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/global-rotation", GET) - .userIdentity(USER_ID), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"application 'tenant1.application1.instance1' has multiple rotations. Query parameter 'endpointId' must be given\"}", - 400); + .userIdentity(USER_ID), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"application 'tenant1.application1.instance1' has multiple rotations. Query parameter 'endpointId' must be given\"}", + 400); // GET global rotation status for us-west-1 in default endpoint tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/global-rotation", GET) - .properties(Map.of("endpointId", "default")) - .userIdentity(USER_ID), - "{\"bcpStatus\":{\"rotationStatus\":\"UNKNOWN\"}}", - 200); + .properties(Map.of("endpointId", "default")) + .userIdentity(USER_ID), + "{\"bcpStatus\":{\"rotationStatus\":\"UNKNOWN\"}}", + 200); // GET global rotation status for us-west-1 in eu endpoint tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/global-rotation", GET) - .properties(Map.of("endpointId", "eu")) - .userIdentity(USER_ID), - "{\"bcpStatus\":{\"rotationStatus\":\"UNKNOWN\"}}", - 200); + .properties(Map.of("endpointId", "eu")) + .userIdentity(USER_ID), + "{\"bcpStatus\":{\"rotationStatus\":\"UNKNOWN\"}}", + 200); // GET global rotation status for eu-west-1 in eu endpoint tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/eu-west-1/global-rotation", GET) - .properties(Map.of("endpointId", "eu")) - .userIdentity(USER_ID), - "{\"bcpStatus\":{\"rotationStatus\":\"UNKNOWN\"}}", - 200); + .properties(Map.of("endpointId", "eu")) + .userIdentity(USER_ID), + "{\"bcpStatus\":{\"rotationStatus\":\"UNKNOWN\"}}", + 200); } @Test - public void testDeployWithApplicationPackage() { + void testDeployWithApplicationPackage() { // Setup addUserToHostedOperatorRole(HostedAthenzIdentities.from(HOSTED_VESPA_OPERATOR)); deploymentTester.controllerTester().upgradeController(new Version("6.2")); @@ -1071,22 +1071,22 @@ public class ApplicationApiTest extends ControllerContainerTest { // POST (deploy) a system application with an application package MultiPartStreamer noAppEntity = createApplicationDeployData(Optional.empty()); tester.assertResponse(request("/application/v4/tenant/hosted-vespa/application/routing/environment/prod/region/us-central-1/instance/default/deploy", POST) - .data(noAppEntity) - .userIdentity(HOSTED_VESPA_OPERATOR), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Deployment of system applications during a system upgrade is not allowed\"}", - 400); + .data(noAppEntity) + .userIdentity(HOSTED_VESPA_OPERATOR), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Deployment of system applications during a system upgrade is not allowed\"}", + 400); deploymentTester.controllerTester() - .upgradeSystem(deploymentTester.controller().readVersionStatus().controllerVersion().get() - .versionNumber()); + .upgradeSystem(deploymentTester.controller().readVersionStatus().controllerVersion().get() + .versionNumber()); tester.assertResponse(request("/application/v4/tenant/hosted-vespa/application/routing/environment/prod/region/us-central-1/instance/default/deploy", POST) - .data(noAppEntity) - .userIdentity(HOSTED_VESPA_OPERATOR), - new File("deploy-result.json")); + .data(noAppEntity) + .userIdentity(HOSTED_VESPA_OPERATOR), + new File("deploy-result.json")); } @Test - public void testRemovingAllDeployments() { + void testRemovingAllDeployments() { createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .instances("instance1") @@ -1116,100 +1116,100 @@ public class ApplicationApiTest extends ControllerContainerTest { } @Test - public void testErrorResponses() { + void testErrorResponses() { createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); // PUT (update) non-existing tenant returns 403 as tenant access cannot be determined when the tenant does not exist tester.assertResponse(request("/application/v4/tenant/tenant1", PUT) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), - accessDenied, - 403); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), + accessDenied, + 403); // GET non-existing tenant tester.assertResponse(request("/application/v4/tenant/tenant1", GET) - .userIdentity(USER_ID), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"Tenant 'tenant1' does not exist\"}", - 404); + .userIdentity(USER_ID), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"Tenant 'tenant1' does not exist\"}", + 404); // GET non-existing tenant's applications tester.assertResponse(request("/application/v4/tenant/tenant1/application", GET) - .userIdentity(USER_ID), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"Tenant 'tenant1' does not exist\"}", - 404); + .userIdentity(USER_ID), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"Tenant 'tenant1' does not exist\"}", + 404); // GET non-existing application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", GET) - .userIdentity(USER_ID), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"tenant1.application1 not found\"}", - 404); + .userIdentity(USER_ID), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"tenant1.application1 not found\"}", + 404); // GET non-existing deployment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-east/instance/default", GET) - .userIdentity(USER_ID), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"tenant1.application1 not found\"}", - 404); + .userIdentity(USER_ID), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"tenant1.application1 not found\"}", + 404); // POST (add) a tenant tester.assertResponse(request("/application/v4/tenant/tenant1", POST) - .userIdentity(USER_ID) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") - .oAuthCredentials(OKTA_CREDENTIALS), - new File("tenant-without-applications.json")); + .userIdentity(USER_ID) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") + .oAuthCredentials(OKTA_CREDENTIALS), + new File("tenant-without-applications.json")); // POST (add) another tenant under the same domain tester.assertResponse(request("/application/v4/tenant/tenant2", POST) - .userIdentity(USER_ID) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not create tenant 'tenant2': The Athens domain 'domain1' is already connected to tenant 'tenant1'\"}", - 400); + .userIdentity(USER_ID) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not create tenant 'tenant2': The Athens domain 'domain1' is already connected to tenant 'tenant1'\"}", + 400); // Add the same tenant again tester.assertResponse(request("/application/v4/tenant/tenant1", POST) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Tenant 'tenant1' already exists\"}", - 400); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Tenant 'tenant1' already exists\"}", + 400); // POST (add) an Athenz tenant with underscore in name tester.assertResponse(request("/application/v4/tenant/my_tenant_2", POST) - .userIdentity(USER_ID) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"New tenant or application names must start with a letter, may contain no more than 20 characters, and may only contain lowercase letters, digits or dashes, but no double-dashes.\"}", - 400); + .userIdentity(USER_ID) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"New tenant or application names must start with a letter, may contain no more than 20 characters, and may only contain lowercase letters, digits or dashes, but no double-dashes.\"}", + 400); // POST (add) an Athenz tenant with a reserved name tester.assertResponse(request("/application/v4/tenant/hosted-vespa", POST) - .userIdentity(USER_ID) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Tenant 'hosted-vespa' already exists\"}", - 400); + .userIdentity(USER_ID) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Tenant 'hosted-vespa' already exists\"}", + 400); // POST (create) an (empty) application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", POST) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - new File("instance-reference.json")); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + new File("instance-reference.json")); // Create the same application again tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", POST) - .oAuthCredentials(OKTA_CREDENTIALS) - .userIdentity(USER_ID), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not create 'tenant1.application1.instance1': Instance already exists\"}", - 400); + .oAuthCredentials(OKTA_CREDENTIALS) + .userIdentity(USER_ID), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not create 'tenant1.application1.instance1': Instance already exists\"}", + 400); ConfigServerMock configServer = tester.serviceRegistry().configServerMock(); configServer.throwOnNextPrepare(new ConfigServerException(ConfigServerException.ErrorCode.INVALID_APPLICATION_PACKAGE, "Failed to prepare application", "Invalid application package")); // GET non-existent application package tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/package", GET).userIdentity(HOSTED_VESPA_OPERATOR), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"no application package has been submitted for tenant1.application1\"}", - 404); + "{\"error-code\":\"NOT_FOUND\",\"message\":\"no application package has been submitted for tenant1.application1\"}", + 404); // GET non-existent application package of specific build addScrewdriverUserToDeployRole(SCREWDRIVER_ID, ATHENZ_TENANT_DOMAIN, ApplicationName.from("application1")); @@ -1218,63 +1218,63 @@ public class ApplicationApiTest extends ControllerContainerTest { .data(createApplicationSubmissionData(applicationPackageInstance1, 1000)), "{\"message\":\"application build 1, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/package", GET) - .properties(Map.of("build", "42")) - .userIdentity(HOSTED_VESPA_OPERATOR), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"No build 42 found for tenant1.application1\"}", - 404); + .properties(Map.of("build", "42")) + .userIdentity(HOSTED_VESPA_OPERATOR), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"No build 42 found for tenant1.application1\"}", + 404); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/deployment", DELETE).userIdentity(USER_ID).oAuthCredentials(OKTA_CREDENTIALS), "{\"message\":\"All deployments removed\"}"); // GET non-existent application package of invalid build tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/package", GET) - .properties(Map.of("build", "foobar")) - .userIdentity(HOSTED_VESPA_OPERATOR), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"invalid value for request parameter 'build': For input string: \\\"foobar\\\"\"}", - 400); - + .properties(Map.of("build", "foobar")) + .userIdentity(HOSTED_VESPA_OPERATOR), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"invalid value for request parameter 'build': For input string: \\\"foobar\\\"\"}", + 400); + // POST (deploy) an application to legacy deploy path MultiPartStreamer entity = createApplicationDeployData(applicationPackageInstance1); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/dev/region/us-east-1/instance/instance1/deploy", POST) - .data(entity) - .userIdentity(USER_ID), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Deployment of tenant1.application1.instance1 is not supported through this API\"}", 400); + .data(entity) + .userIdentity(USER_ID), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Deployment of tenant1.application1.instance1 is not supported through this API\"}", 400); // DELETE tenant which has an application tester.assertResponse(request("/application/v4/tenant/tenant1", DELETE) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not delete tenant 'tenant1': This tenant has active applications\"}", - 400); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not delete tenant 'tenant1': This tenant has active applications\"}", + 400); // DELETE application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", DELETE) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"message\":\"Deleted instance tenant1.application1.instance1\"}"); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"message\":\"Deleted instance tenant1.application1.instance1\"}"); // DELETE application again - should produce 404 tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", DELETE) - .oAuthCredentials(OKTA_CREDENTIALS) - .userIdentity(USER_ID), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"Could not delete instance 'tenant1.application1.instance1': Instance not found\"}", - 404); + .oAuthCredentials(OKTA_CREDENTIALS) + .userIdentity(USER_ID), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"Could not delete instance 'tenant1.application1.instance1': Instance not found\"}", + 404); // DELETE and forget an application as non-operator tester.assertResponse(request("/application/v4/tenant/tenant1", DELETE).properties(Map.of("forget", "true")) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"error-code\":\"FORBIDDEN\",\"message\":\"Only operators can forget a tenant\"}", - 403); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"error-code\":\"FORBIDDEN\",\"message\":\"Only operators can forget a tenant\"}", + 403); // DELETE tenant tester.assertResponse(request("/application/v4/tenant/tenant1", DELETE) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"message\":\"Deleted tenant tenant1\"}"); + .userIdentity(USER_ID) + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"message\":\"Deleted tenant tenant1\"}"); // DELETE tenant again returns 403 as tenant access cannot be determined when the tenant does not exist tester.assertResponse(request("/application/v4/tenant/tenant1", DELETE) - .userIdentity(USER_ID), - accessDenied, - 403); + .userIdentity(USER_ID), + accessDenied, + 403); // Create legacy tenant name containing underscores tester.controller().curator().writeTenant(new AthenzTenant(TenantName.from("my_tenant"), ATHENZ_TENANT_DOMAIN, @@ -1282,116 +1282,116 @@ public class ApplicationApiTest extends ControllerContainerTest { // POST (add) a Athenz tenant with dashes duplicates existing one with underscores tester.assertResponse(request("/application/v4/tenant/my-tenant", POST) - .userIdentity(USER_ID) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Tenant 'my-tenant' already exists\"}", - 400); + .userIdentity(USER_ID) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Tenant 'my-tenant' already exists\"}", + 400); } @Test - public void testAuthorization() { + void testAuthorization() { UserId authorizedUser = USER_ID; UserId unauthorizedUser = new UserId("othertenant"); - + // Mutation without an user is disallowed tester.assertResponse(request("/application/v4/tenant/tenant1", POST) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), - "{\n \"message\" : \"Not authenticated\"\n}", - 401); + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), + "{\n \"message\" : \"Not authenticated\"\n}", + 401); // ... but read methods are allowed for authenticated user tester.assertResponse(request("/application/v4/tenant/", GET) - .userIdentity(USER_ID) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), - "[]", - 200); + .userIdentity(USER_ID) + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}"), + "[]", + 200); createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); // Creating a tenant for an Athens domain the user is not admin for is disallowed tester.assertResponse(request("/application/v4/tenant/tenant1", POST) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") - .oAuthCredentials(OKTA_CREDENTIALS) - .userIdentity(unauthorizedUser), - "{\"error-code\":\"FORBIDDEN\",\"message\":\"The user 'user.othertenant' is not admin in Athenz domain 'domain1'\"}", - 403); + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") + .oAuthCredentials(OKTA_CREDENTIALS) + .userIdentity(unauthorizedUser), + "{\"error-code\":\"FORBIDDEN\",\"message\":\"The user 'user.othertenant' is not admin in Athenz domain 'domain1'\"}", + 403); // (Create it with the right tenant id) tester.assertResponse(request("/application/v4/tenant/tenant1", POST) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") - .userIdentity(authorizedUser) - .oAuthCredentials(OKTA_CREDENTIALS), - new File("tenant-without-applications.json"), - 200); + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") + .userIdentity(authorizedUser) + .oAuthCredentials(OKTA_CREDENTIALS), + new File("tenant-without-applications.json"), + 200); // Creating an application for an Athens domain the user is not admin for is disallowed tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", POST) - .userIdentity(unauthorizedUser) - .oAuthCredentials(OKTA_CREDENTIALS), - accessDenied, - 403); + .userIdentity(unauthorizedUser) + .oAuthCredentials(OKTA_CREDENTIALS), + accessDenied, + 403); // (Create it with the right tenant id) tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", POST) - .userIdentity(authorizedUser) - .oAuthCredentials(OKTA_CREDENTIALS), - new File("instance-reference.json"), - 200); + .userIdentity(authorizedUser) + .oAuthCredentials(OKTA_CREDENTIALS), + new File("instance-reference.json"), + 200); // Deploy to an authorized zone by a user tenant is disallowed MultiPartStreamer entity = createApplicationDeployData(applicationPackageDefault); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/deploy", POST) - .data(entity) - .userIdentity(USER_ID), - accessDenied, - 403); + .data(entity) + .userIdentity(USER_ID), + accessDenied, + 403); // Deleting an application for an Athens domain the user is not admin for is disallowed tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", DELETE) - .userIdentity(unauthorizedUser), - accessDenied, - 403); + .userIdentity(unauthorizedUser), + accessDenied, + 403); // Create another instance under the application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/default", POST) - .userIdentity(authorizedUser) - .oAuthCredentials(OKTA_CREDENTIALS), - new File("instance-reference-default.json"), - 200); + .userIdentity(authorizedUser) + .oAuthCredentials(OKTA_CREDENTIALS), + new File("instance-reference-default.json"), + 200); // (Deleting the application with the right tenant id) tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", DELETE) - .userIdentity(authorizedUser) - .oAuthCredentials(OKTA_CREDENTIALS), - "{\"message\":\"Deleted application tenant1.application1\"}", - 200); + .userIdentity(authorizedUser) + .oAuthCredentials(OKTA_CREDENTIALS), + "{\"message\":\"Deleted application tenant1.application1\"}", + 200); // Updating a tenant for an Athens domain the user is not admin for is disallowed tester.assertResponse(request("/application/v4/tenant/tenant1", PUT) - .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") - .userIdentity(unauthorizedUser), - accessDenied, - 403); - + .data("{\"athensDomain\":\"domain1\", \"property\":\"property1\"}") + .userIdentity(unauthorizedUser), + accessDenied, + 403); + // Change Athens domain createAthenzDomainWithAdmin(new AthenzDomain("domain2"), USER_ID); tester.assertResponse(request("/application/v4/tenant/tenant1", PUT) - .data("{\"athensDomain\":\"domain2\", \"property\":\"property1\"}") - .userIdentity(authorizedUser) - .oAuthCredentials(OKTA_CREDENTIALS), - new File("tenant1.json"), - 200); + .data("{\"athensDomain\":\"domain2\", \"property\":\"property1\"}") + .userIdentity(authorizedUser) + .oAuthCredentials(OKTA_CREDENTIALS), + new File("tenant1.json"), + 200); // Deleting a tenant for an Athens domain the user is not admin for is disallowed tester.assertResponse(request("/application/v4/tenant/tenant1", DELETE) - .userIdentity(unauthorizedUser), - accessDenied, - 403); + .userIdentity(unauthorizedUser), + accessDenied, + 403); } @Test - public void athenz_service_must_be_allowed_to_launch_and_be_under_tenant_domain() { + void athenz_service_must_be_allowed_to_launch_and_be_under_tenant_domain() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .upgradePolicy("default") .athenzIdentity(com.yahoo.config.provision.AthenzDomain.from("another.domain"), com.yahoo.config.provision.AthenzService.from("service")) @@ -1407,10 +1407,10 @@ public class ApplicationApiTest extends ControllerContainerTest { allowLaunchOfService(new com.yahoo.vespa.athenz.api.AthenzService(new AthenzDomain("another.domain"), "service")); // Submit a package with a service under a different Athenz domain from that of the tenant tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/submit/", POST) - .data(createApplicationSubmissionData(applicationPackage, 123)) - .screwdriverIdentity(screwdriverId), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Athenz domain in deployment.xml: [another.domain] must match tenant domain: [domain1]\"}", - 400); + .data(createApplicationSubmissionData(applicationPackage, 123)) + .screwdriverIdentity(screwdriverId), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Athenz domain in deployment.xml: [another.domain] must match tenant domain: [domain1]\"}", + 400); // Set the correct domain in the application package, but do not yet allow Vespa to launch the service. applicationPackage = new ApplicationPackageBuilder() @@ -1420,22 +1420,22 @@ public class ApplicationApiTest extends ControllerContainerTest { .build(); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/submit", POST) - .data(createApplicationSubmissionData(applicationPackage, 123)) - .screwdriverIdentity(screwdriverId), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Not allowed to launch Athenz service domain1.service\"}", - 400); + .data(createApplicationSubmissionData(applicationPackage, 123)) + .screwdriverIdentity(screwdriverId), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Not allowed to launch Athenz service domain1.service\"}", + 400); // Allow Vespa to launch the Athenz service. allowLaunchOfService(new com.yahoo.vespa.athenz.api.AthenzService(ATHENZ_TENANT_DOMAIN, "service")); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/submit/", POST) - .data(createApplicationSubmissionData(applicationPackage, 123)) - .screwdriverIdentity(screwdriverId), - "{\"message\":\"application build 1, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); + .data(createApplicationSubmissionData(applicationPackage, 123)) + .screwdriverIdentity(screwdriverId), + "{\"message\":\"application build 1, source revision of repository 'repository1', branch 'master' with commit 'commit1', by a@b, built against 6.1 at 1970-01-01T00:00:01Z\"}"); } @Test - public void personal_deployment_with_athenz_service_requires_user_is_admin() { + void personal_deployment_with_athenz_service_requires_user_is_admin() { // Setup UserId tenantAdmin = new UserId("tenant-admin"); UserId userId = new UserId("new-user"); @@ -1450,26 +1450,26 @@ public class ApplicationApiTest extends ControllerContainerTest { MultiPartStreamer entity = createApplicationDeployData(applicationPackage); // POST (deploy) an application to dev through a deployment job, with user instance and a proper tenant tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/new-user/deploy/dev-us-east-1", POST) - .data(entity) - .userIdentity(userId), - accessDenied, - 403); + .data(entity) + .userIdentity(userId), + accessDenied, + 403); // Add "new-user" to the admin role, to allow service launches. tester.athenzClientFactory().getSetup() .domains.get(ATHENZ_TENANT_DOMAIN) - .admin(HostedAthenzIdentities.from(userId)); + .admin(HostedAthenzIdentities.from(userId)); // POST (deploy) an application to dev through a deployment job tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/new-user/deploy/dev-us-east-1", POST) - .data(entity) - .userIdentity(userId), - "{\"message\":\"Deployment started in run 1 of dev-us-east-1 for tenant1.application1.new-user. This may take about 15 minutes the first time.\",\"run\":1}"); + .data(entity) + .userIdentity(userId), + "{\"message\":\"Deployment started in run 1 of dev-us-east-1 for tenant1.application1.new-user. This may take about 15 minutes the first time.\",\"run\":1}"); } - @Test // Deploy to sandbox tenant launching a service from another domain. - public void developers_can_deploy_when_privileged() { + @Test + void developers_can_deploy_when_privileged() { // Create an athenz domain where the developer is not yet authorized UserId tenantAdmin = new UserId("tenant-admin"); createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, tenantAdmin); @@ -1503,7 +1503,7 @@ public class ApplicationApiTest extends ControllerContainerTest { // Allow developer launch privilege to domain1.service. Deployment now completes. AthenzDbMock.Domain domainMock = tester.athenzClientFactory().getSetup().getOrCreateDomain(ATHENZ_TENANT_DOMAIN); - domainMock.withPolicy("launch-" +developer.id(), "user." + developer.id(), "launch", "service.service"); + domainMock.withPolicy("launch-" + developer.id(), "user." + developer.id(), "launch", "service.service"); tester.assertResponse(request("/application/v4/tenant/sandbox/application/myapp/instance/default/deploy/dev-us-east-1", POST) @@ -1526,25 +1526,25 @@ public class ApplicationApiTest extends ControllerContainerTest { // POST (deploy) an application package as content type application/zip — not multipart tester.assertResponse(request("/application/v4/tenant/sandbox/application/myapp/instance/default/deploy/dev-us-east-1", POST) - .data(applicationPackageInstance1.zippedContent()) - .contentType("application/zip") - .userIdentity(developer2), - "{\"message\":\"Deployment started in run 3 of dev-us-east-1 for sandbox.myapp. This may take about 15 minutes the first time.\",\"run\":3}"); + .data(applicationPackageInstance1.zippedContent()) + .contentType("application/zip") + .userIdentity(developer2), + "{\"message\":\"Deployment started in run 3 of dev-us-east-1 for sandbox.myapp. This may take about 15 minutes the first time.\",\"run\":3}"); // POST (deploy) an application package not as content type application/zip — not multipart — is disallowed tester.assertResponse(request("/application/v4/tenant/sandbox/application/myapp/instance/default/deploy/dev-us-east-1", POST) - .data(applicationPackageInstance1.zippedContent()) - .contentType("application/gzip") - .userIdentity(developer2), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Expected a multipart or application/zip message, but got Content-Type: application/gzip\"}", 400); + .data(applicationPackageInstance1.zippedContent()) + .contentType("application/gzip") + .userIdentity(developer2), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Expected a multipart or application/zip message, but got Content-Type: application/gzip\"}", 400); } @Test - public void applicationWithRoutingPolicy() { + void applicationWithRoutingPolicy() { var app = deploymentTester.newDeploymentContext(createTenantAndApplication()); var zone = ZoneId.from(Environment.prod, RegionName.from("us-west-1")); deploymentTester.controllerTester().zoneRegistry().setRoutingMethod(ZoneApiMock.from(zone), - RoutingMethod.exclusive); + RoutingMethod.exclusive); ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .athenzIdentity(com.yahoo.config.provision.AthenzDomain.from("domain"), AthenzService.from("service")) .instances("instance1") @@ -1555,22 +1555,22 @@ public class ApplicationApiTest extends ControllerContainerTest { // GET application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", GET) - .userIdentity(USER_ID), - new File("instance-with-routing-policy.json")); + .userIdentity(USER_ID), + new File("instance-with-routing-policy.json")); // GET deployment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/instance1", GET) - .userIdentity(USER_ID), - new File("deployment-with-routing-policy.json")); + .userIdentity(USER_ID), + new File("deployment-with-routing-policy.json")); // GET deployment tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/instance1", GET) - .userIdentity(USER_ID), - new File("deployment-without-shared-endpoints.json")); + .userIdentity(USER_ID), + new File("deployment-without-shared-endpoints.json")); } @Test - public void support_access() { + void support_access() { var app = deploymentTester.newDeploymentContext(createTenantAndApplication()); var zone = ZoneId.from(Environment.prod, RegionName.from("us-west-1")); deploymentTester.controllerTester().zoneRegistry().setRoutingMethod(ZoneApiMock.from(zone), RoutingMethod.exclusive); @@ -1601,15 +1601,15 @@ public class ApplicationApiTest extends ControllerContainerTest { // Grant access to support user X509Certificate support_cert = grantCertificate(now, now.plusSeconds(3600)); - String grantPayload= "{\n" + - " \"applicationId\": \"tenant1:application1:instance1\",\n" + - " \"zone\": \"prod.us-west-1\",\n" + - " \"certificate\":\""+X509CertificateUtils.toPem(support_cert)+ "\"\n" + - "}"; - tester.assertResponse(request("/controller/v1/access/grants/"+HOSTED_VESPA_OPERATOR.id(), POST) - .data(grantPayload) - .userIdentity(HOSTED_VESPA_OPERATOR), - "{\"message\":\"Operator user.johnoperator granted access and job production-us-west-1 triggered\"}"); + String grantPayload = "{\n" + + " \"applicationId\": \"tenant1:application1:instance1\",\n" + + " \"zone\": \"prod.us-west-1\",\n" + + " \"certificate\":\"" + X509CertificateUtils.toPem(support_cert) + "\"\n" + + "}"; + tester.assertResponse(request("/controller/v1/access/grants/" + HOSTED_VESPA_OPERATOR.id(), POST) + .data(grantPayload) + .userIdentity(HOSTED_VESPA_OPERATOR), + "{\"message\":\"Operator user.johnoperator granted access and job production-us-west-1 triggered\"}"); // GET shows grant String grantResponse = allowedResponse.replaceAll("\"grants\":\\[]", @@ -1631,7 +1631,7 @@ public class ApplicationApiTest extends ControllerContainerTest { // DELETE removes access String disallowedResponse = grantResponse .replaceAll("ALLOWED\".*?}", "NOT_ALLOWED\"}") - .replace("history\":[", "history\":[{\"state\":\"disallowed\",\"at\":\""+ serializeInstant(now) +"\",\"by\":\"user.myuser\"},"); + .replace("history\":[", "history\":[{\"state\":\"disallowed\",\"at\":\"" + serializeInstant(now) + "\",\"by\":\"user.myuser\"},"); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-west-1/access/support", DELETE) .userIdentity(USER_ID), disallowedResponse, 200 @@ -1646,7 +1646,7 @@ public class ApplicationApiTest extends ControllerContainerTest { } @Test - public void create_application_on_deploy() { + void create_application_on_deploy() { // Setup createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); addUserToHostedOperatorRole(HostedAthenzIdentities.from(HOSTED_VESPA_OPERATOR)); @@ -1668,7 +1668,7 @@ public class ApplicationApiTest extends ControllerContainerTest { tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/deploy/dev-us-east-1/", POST) .data(entity) .oAuthCredentials(OKTA_CREDENTIALS) - + .userIdentity(USER_ID), "{\"message\":\"Deployment started in run 1 of dev-us-east-1 for tenant1.application1.instance1. This may take about 15 minutes the first time.\",\"run\":1}"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/CliApiHandlerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/CliApiHandlerTest.java index 5a4d47e0db5..4166ce8b81e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/CliApiHandlerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/CliApiHandlerTest.java @@ -3,8 +3,8 @@ package com.yahoo.vespa.hosted.controller.restapi.application; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; /** * @author mpolden @@ -13,13 +13,13 @@ public class CliApiHandlerTest extends ControllerContainerTest { private ContainerTester tester; - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, "src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/"); } @Test - public void root() { + void root() { tester.assertResponse(authenticatedRequest("http://localhost:8080/cli/v1/"), "{\"minVersion\":\"7.547.18\"}"); } 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 d2698afdc48..233b460333e 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 @@ -15,7 +15,7 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.notification.Notification.Type; import com.yahoo.vespa.hosted.controller.notification.NotificationSource; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.ByteArrayOutputStream; import java.net.URI; @@ -40,7 +40,7 @@ import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.deploymentF import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.installationFailed; import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.running; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author jonmv @@ -49,7 +49,7 @@ import static org.junit.Assert.assertEquals; public class JobControllerApiHandlerHelperTest { @Test - public void testResponses() { + void testResponses() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .stagingTest() .blockChange(true, true, "mon,tue", "7-13", "UTC") @@ -100,7 +100,7 @@ public class JobControllerApiHandlerHelperTest { // Revision 3 starts. app.submit(applicationPackage) - .runJob(systemTest).runJob(stagingTest); + .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(app.instanceId(), productionUsCentral1).get().status()); @@ -147,7 +147,7 @@ public class JobControllerApiHandlerHelperTest { } @Test - public void testDevResponses() { + void testDevResponses() { DeploymentTester tester = new DeploymentTester(); var app = tester.newDeploymentContext(); tester.clock().setInstant(Instant.EPOCH); @@ -167,7 +167,7 @@ public class JobControllerApiHandlerHelperTest { } @Test - public void testResponsesWithDirectDeployment() { + void testResponsesWithDirectDeployment() { var tester = new DeploymentTester(); var app = tester.newDeploymentContext(); tester.clock().setInstant(Instant.EPOCH); @@ -176,11 +176,11 @@ public class JobControllerApiHandlerHelperTest { // Deploy directly to production zone, like integration tests. tester.controller().jobController().deploy(tester.instance().id(), productionUsWest1, Optional.empty(), applicationPackage); assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.controller(), app.instanceId(), URI.create("https://some.url:43/root/")), - "jobs-direct-deployment.json"); + "jobs-direct-deployment.json"); } @Test - public void testResponsesWithDryRunDeployment() { + void testResponsesWithDryRunDeployment() { var tester = new DeploymentTester(); var app = tester.newDeploymentContext(); tester.clock().setInstant(Instant.EPOCH); @@ -189,7 +189,7 @@ public class JobControllerApiHandlerHelperTest { // Deploy directly to production zone, like integration tests, with dryRun. tester.controller().jobController().deploy(tester.instance().id(), productionUsWest1, Optional.empty(), applicationPackage, true); assertResponse(JobControllerApiHandlerHelper.jobTypeResponse(tester.controller(), app.instanceId(), URI.create("https://some.url:43/root/")), - "jobs-direct-deployment.json"); + "jobs-direct-deployment.json"); } private void assertResponse(HttpResponse response, String fileName) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParserTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParserTest.java index 12a0a00713c..37f4c19e27a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParserTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParserTest.java @@ -7,16 +7,16 @@ import com.yahoo.jdisc.Request; import com.yahoo.jdisc.ResourceReference; import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.service.CurrentContainer; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.Map; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author bratseth @@ -24,25 +24,25 @@ import static org.junit.Assert.fail; public class MultipartParserTest { @Test - public void parser() { + void parser() { String data = "Content-Type: multipart/form-data; boundary=AaB03x\r\n" + - "\r\n" + - "--AaB03x\r\n" + - "Content-Disposition: form-data; name=\"submit-name\"\r\n" + - "\r\n" + - "Larry\r\n" + - "--AaB03x\r\n" + - "Content-Disposition: form-data; name=\"submit-address\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "House 1\r\n" + - "--AaB03x\r\n" + - "Content-Disposition: form-data; name=\"files\"; filename=\"file1.txt\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - "... contents of file1.txt ...\r\n" + - "--AaB03x--\r\n"; + "\r\n" + + "--AaB03x\r\n" + + "Content-Disposition: form-data; name=\"submit-name\"\r\n" + + "\r\n" + + "Larry\r\n" + + "--AaB03x\r\n" + + "Content-Disposition: form-data; name=\"submit-address\"\r\n" + + "Content-Type: text/plain\r\n" + + "\r\n" + + "House 1\r\n" + + "--AaB03x\r\n" + + "Content-Disposition: form-data; name=\"files\"; filename=\"file1.txt\"\r\n" + + "Content-Type: text/plain\r\n" + + "\r\n" + + "... contents of file1.txt ...\r\n" + + "--AaB03x--\r\n"; Map<String, byte[]> parts = parse(data, Long.MAX_VALUE); assertEquals(3, parts.size()); assertTrue(parts.containsKey("submit-name")); @@ -53,22 +53,22 @@ public class MultipartParserTest { } @Test - public void max_length() { + void max_length() { String part1 = "Larry"; String part2 = "House 1"; String data = "Content-Type: multipart/form-data; boundary=AaB03x\r\n" + - "\r\n" + - "--AaB03x\r\n" + - "Content-Disposition: form-data; name=\"submit-name\"\r\n" + - "\r\n" + - part1 + "\r\n" + - "--AaB03x\r\n" + - "Content-Disposition: form-data; name=\"submit-address\"\r\n" + - "Content-Type: text/plain\r\n" + - "\r\n" + - part2 + "\r\n" + - "--AaB03x--\r\n"; + "\r\n" + + "--AaB03x\r\n" + + "Content-Disposition: form-data; name=\"submit-name\"\r\n" + + "\r\n" + + part1 + "\r\n" + + "--AaB03x\r\n" + + "Content-Disposition: form-data; name=\"submit-address\"\r\n" + + "Content-Type: text/plain\r\n" + + "\r\n" + + part2 + "\r\n" + + "--AaB03x--\r\n"; parse(data, part1.length() + part2.length()); try { parse(data, part1.length() + part2.length() - 1); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java index de3968727d6..3a539987443 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java @@ -7,7 +7,7 @@ import com.yahoo.vespa.athenz.api.AthenzDomain; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.File; @@ -19,7 +19,7 @@ public class AthenzApiTest extends ControllerContainerTest { private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/"; @Test - public void testAthenzApi() { + void testAthenzApi() { ContainerTester tester = new ContainerTester(container, responseFiles); ControllerTester controllerTester = new ControllerTester(tester); @@ -38,19 +38,19 @@ public class AthenzApiTest extends ControllerContainerTest { // GET root tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/"), - new File("root.json")); + new File("root.json")); // GET Athenz domains tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/domains"), - new File("athensDomain-list.json")); + new File("athensDomain-list.json")); // GET properties tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/properties/"), - new File("property-list.json")); + new File("property-list.json")); // POST user signup tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/user", "", Request.Method.POST), - "{\"message\":\"User 'bob' added to admin role of 'vespa.vespa.tenants.sandbox'\"}"); + "{\"message\":\"User 'bob' added to admin role of 'vespa.vespa.tenants.sandbox'\"}"); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java index 38ebe030e8e..aa9cb57f541 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java @@ -12,9 +12,8 @@ import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerCloudTest; import com.yahoo.vespa.hosted.controller.security.Auth0Credentials; import com.yahoo.vespa.hosted.controller.security.CloudTenantSpec; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.File; import java.math.BigDecimal; @@ -30,8 +29,8 @@ import static com.yahoo.application.container.handler.Request.Method.DELETE; import static com.yahoo.application.container.handler.Request.Method.GET; import static com.yahoo.application.container.handler.Request.Method.PATCH; import static com.yahoo.application.container.handler.Request.Method.POST; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author olaa @@ -47,7 +46,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { private ContainerTester tester; - @Before + @BeforeEach public void setup() { tester = new ContainerTester(container, responseFiles); billingController = (MockBillingController) tester.serviceRegistry().billingController(); @@ -79,32 +78,32 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - public void list_plans() { + void list_plans() { var listPlansRequest = request("/billing/v1/plans", GET) .roles(Role.hostedAccountant()); tester.assertResponse(listPlansRequest, "{\"plans\":[{\"id\":\"trial\",\"name\":\"Free Trial - for testing purposes\"},{\"id\":\"paid\",\"name\":\"Paid Plan - for testing purposes\"},{\"id\":\"none\",\"name\":\"None Plan - for testing purposes\"}]}"); } @Test - public void setting_and_deleting_instrument() { + void setting_and_deleting_instrument() { assertTrue(billingController.getDefaultInstrument(tenant).isEmpty()); var instrumentRequest = request("/billing/v1/tenant/tenant1/instrument", PATCH) .data("{\"active\": \"id-1\"}") .roles(tenantRole); - tester.assertResponse(instrumentRequest,"OK"); + tester.assertResponse(instrumentRequest, "OK"); assertEquals("id-1", billingController.getDefaultInstrument(tenant).get().getId()); var deleteInstrumentRequest = request("/billing/v1/tenant/tenant1/instrument/id-1", DELETE) .roles(tenantRole); - tester.assertResponse(deleteInstrumentRequest,"OK"); + tester.assertResponse(deleteInstrumentRequest, "OK"); assertTrue(billingController.getDefaultInstrument(tenant).isEmpty()); } @Test - public void response_list_bills() { + void response_list_bills() { var bill = createBill(); billingController.addBill(tenant, bill, true); @@ -117,7 +116,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - public void test_bill_creation() { + void test_bill_creation() { var bills = billingController.getBillsForTenant(tenant); assertEquals(0, bills.size()); @@ -141,7 +140,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - public void adding_and_listing_line_item() { + void adding_and_listing_line_item() { var requestBody = "{" + "\"description\":\"some description\"," + @@ -155,7 +154,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { tester.assertResponse(request, "{\"message\":\"Added line item for tenant tenant1\"}"); var lineItems = billingController.getUnusedLineItems(tenant); - Assert.assertEquals(1, lineItems.size()); + assertEquals(1, lineItems.size()); Bill.LineItem lineItem = lineItems.get(0); assertEquals("some description", lineItem.description()); assertEquals(new BigDecimal("123.45"), lineItem.amount()); @@ -167,7 +166,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - public void adding_new_status() { + void adding_new_status() { billingController.addBill(tenant, createBill(), true); var requestBody = "{\"status\":\"DONE\"}"; @@ -181,7 +180,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - public void list_all_unbilled_items() { + void list_all_unbilled_items() { tester.controller().tenants().create(new CloudTenantSpec(tenant, ""), new Auth0Credentials(() -> "foo", Set.of(Role.hostedOperator()))); tester.controller().tenants().create(new CloudTenantSpec(tenant2, ""), new Auth0Credentials(() -> "foo", Set.of(Role.hostedOperator()))); @@ -198,7 +197,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - public void setting_plans() { + void setting_plans() { var planRequest = request("/billing/v1/tenant/tenant1/plan", PATCH) .data("{\"plan\": \"new-plan\"}") .roles(tenantRole); @@ -207,7 +206,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - public void csv_export() { + void csv_export() { var bill = createBill(); billingController.addBill(tenant, bill, true); var csvRequest = request("/billing/v1/invoice/export", GET).roles(financeAdmin); @@ -215,7 +214,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - public void patch_collection_method() { + void patch_collection_method() { test_patch_collection_with_field_name("collectionMethod"); test_patch_collection_with_field_name("collection"); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java index 58701732515..7c3f0e51b92 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java @@ -10,8 +10,8 @@ import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerCloudTest; import com.yahoo.vespa.hosted.controller.security.Auth0Credentials; import com.yahoo.vespa.hosted.controller.security.CloudTenantSpec; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.Set; @@ -37,7 +37,7 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest { private MockBillingController billingController; private ContainerTester tester; - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responseFiles); tester.controller().tenants().create(new CloudTenantSpec(tenant, ""), new Auth0Credentials(() -> "foo", Set.of(Role.hostedOperator()))); @@ -68,13 +68,13 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest { } @Test - public void require_tenant_info() { + void require_tenant_info() { var request = request("/billing/v2/tenant/" + tenant.value()).roles(tenantReader); tester.assertResponse(request, "{\"tenant\":\"tenant1\",\"plan\":{\"id\":\"trial\",\"name\":\"Free Trial - for testing purposes\"},\"collection\":\"AUTO\"}"); } @Test - public void require_admin_for_update_plan() { + void require_admin_for_update_plan() { var request = request("/billing/v2/tenant/" + tenant.value(), Request.Method.PATCH) .data("{\"plan\": \"paid\"}"); @@ -86,7 +86,7 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest { } @Test - public void require_accountant_for_update_collection() { + void require_accountant_for_update_collection() { var request = request("/billing/v2/tenant/" + tenant.value(), Request.Method.PATCH) .data("{\"collection\": \"INVOICE\"}"); @@ -99,13 +99,13 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest { } @Test - public void require_tenant_usage() { + void require_tenant_usage() { var request = request("/billing/v2/tenant/" + tenant + "/usage").roles(tenantReader); tester.assertResponse(request, "{\"from\":\"2021-04-13\",\"to\":\"2021-04-13\",\"total\":\"0.00\",\"items\":[]}"); } @Test - public void require_tenant_invoice() { + void require_tenant_invoice() { var listRequest = request("/billing/v2/tenant/" + tenant + "/bill").roles(tenantReader); tester.assertResponse(listRequest, "{\"invoices\":[{\"id\":\"id-1\",\"from\":\"2020-05-23\",\"to\":\"2020-05-28\",\"total\":\"123.00\",\"status\":\"OPEN\"}]}"); @@ -115,7 +115,7 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest { } @Test - public void require_accountant_summary() { + void require_accountant_summary() { var tenantRequest = request("/billing/v2/accountant").roles(tenantReader); tester.assertResponse(tenantRequest, "{\n" + " \"code\" : 403,\n" + @@ -128,13 +128,13 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest { } @Test - public void require_accountant_tenant_preview() { + void require_accountant_tenant_preview() { var accountantRequest = request("/billing/v2/accountant/preview/tenant/tenant1").roles(Role.hostedAccountant()); tester.assertResponse(accountantRequest, "{\"id\":\"empty\",\"from\":\"2021-04-13\",\"to\":\"2021-04-12\",\"total\":\"0.00\",\"status\":\"OPEN\",\"statusHistory\":[{\"at\":\"2021-04-13T00:00:00Z\",\"status\":\"OPEN\"}],\"items\":[]}"); } @Test - public void require_accountant_tenant_bill() { + void require_accountant_tenant_bill() { var accountantRequest = request("/billing/v2/accountant/preview/tenant/tenant1", Request.Method.POST) .roles(Role.hostedAccountant()) .data("{\"from\": \"2020-05-01\",\"to\": \"2020-06-01\"}"); @@ -142,7 +142,7 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest { } @Test - public void require_list_of_all_plans() { + void require_list_of_all_plans() { var accountantRequest = request("/billing/v2/accountant/plans") .roles(Role.hostedAccountant()); tester.assertResponse(accountantRequest, "{\"plans\":[{\"id\":\"trial\",\"name\":\"Free Trial - for testing purposes\"},{\"id\":\"paid\",\"name\":\"Paid Plan - for testing purposes\"},{\"id\":\"none\",\"name\":\"None Plan - for testing purposes\"}]}"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandlerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandlerTest.java index ea2c303d3f6..de2bf70997a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandlerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandlerTest.java @@ -13,8 +13,8 @@ import com.yahoo.vespa.hosted.controller.api.integration.vcmr.HostAction; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.VespaChangeRequest; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.File; import java.time.Instant; @@ -22,7 +22,7 @@ import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class ChangeManagementApiHandlerTest extends ControllerContainerTest { @@ -32,7 +32,7 @@ public class ChangeManagementApiHandlerTest extends ControllerContainerTest { private ContainerTester tester; - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responses); addUserToHostedOperatorRole(operator); @@ -42,26 +42,26 @@ public class ChangeManagementApiHandlerTest extends ControllerContainerTest { } @Test - public void test_api() { + void test_api() { assertFile(new Request("http://localhost:8080/changemanagement/v1/assessment", "{\"zone\":\"prod.us-east-3\", \"hosts\": [\"host1\"]}", Request.Method.POST), "initial.json"); assertFile(new Request("http://localhost:8080/changemanagement/v1/assessment", "{\"zone\":\"prod.us-east-3\", \"switches\": [\"switch1\"]}", Request.Method.POST), "initial.json"); assertFile(new Request("http://localhost:8080/changemanagement/v1/vcmr"), "vcmrs.json"); } @Test - public void deletes_vcmr() { + void deletes_vcmr() { assertEquals(1, tester.controller().curator().readChangeRequests().size()); assertFile(new Request("http://localhost:8080/changemanagement/v1/vcmr/" + changeRequestId, "", Request.Method.DELETE), "vcmr.json"); assertEquals(0, tester.controller().curator().readChangeRequests().size()); } @Test - public void get_vcmr() { + void get_vcmr() { assertFile(new Request("http://localhost:8080/changemanagement/v1/vcmr/" + changeRequestId, "", Request.Method.GET), "vcmr.json"); } @Test - public void patch_vcmr() { + void patch_vcmr() { var payload = "{" + "\"approval\": \"REJECTED\"," + "\"status\": \"COMPLETED\"," + diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandlerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandlerTest.java index ce6f713a13d..8bda8ba0d59 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandlerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandlerTest.java @@ -10,15 +10,15 @@ import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.proxy.ProxyRequest; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.File; import java.net.URI; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; /** * @author freva @@ -35,7 +35,7 @@ public class ConfigServerApiHandlerTest extends ControllerContainerTest { private ContainerTester tester; private ConfigServerProxyMock proxy; - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responseFiles); tester.serviceRegistry().zoneRegistry() @@ -45,14 +45,14 @@ public class ConfigServerApiHandlerTest extends ControllerContainerTest { } @Test - public void test_requests() { + void test_requests() { // GET /configserver/v1 tester.assertResponse(operatorRequest("http://localhost:8080/configserver/v1"), new File("root.json")); // GET /configserver/v1/nodes/v2 tester.assertResponse(operatorRequest("http://localhost:8080/configserver/v1/prod/us-north-1/nodes/v2"), - "ok"); + "ok"); assertLastRequest("https://cfg.prod.us-north-1.test.vip:4443/", "GET"); // GET /configserver/v1/nodes/v2/node/?recursive=true @@ -82,11 +82,11 @@ public class ConfigServerApiHandlerTest extends ControllerContainerTest { assertLastRequest("https://cfg.dev.aws-us-north-2.test.vip:4443/", "PATCH"); assertEquals("{\"currentRestartGeneration\": 1}", proxy.lastRequestBody().get()); - assertFalse("Actions are logged to audit log", tester.controller().auditLogger().readLog().entries().isEmpty()); + assertFalse(tester.controller().auditLogger().readLog().entries().isEmpty(), "Actions are logged to audit log"); } @Test - public void test_allowed_apis() { + void test_allowed_apis() { // GET /configserver/v1/prod/us-north-1 tester.assertResponse(() -> operatorRequest("http://localhost:8080/configserver/v1/prod/us-north-1/"), "{\"error-code\":\"FORBIDDEN\",\"message\":\"Cannot access path '/' through /configserver/v1, following APIs are permitted: /flags/v1/, /nodes/v2/, /orchestrator/v1/\"}", @@ -98,33 +98,33 @@ public class ConfigServerApiHandlerTest extends ControllerContainerTest { } @Test - public void test_invalid_requests() { + void test_invalid_requests() { // POST /configserver/v1/prod/us-north-34/nodes/v2 tester.assertResponse(() -> operatorRequest("http://localhost:8080/configserver/v1/prod/us-north-42/nodes/v2", - "", Request.Method.POST), + "", Request.Method.POST), "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such zone: prod.us-north-42\"}", 400); assertFalse(proxy.lastReceived().isPresent()); } @Test - public void non_operators_are_forbidden() { + void non_operators_are_forbidden() { // Read request tester.assertResponse(() -> authenticatedRequest("http://localhost:8080/configserver/v1/prod/us-north-1/nodes/v2/node"), "{\n" + - " \"code\" : 403,\n" + - " \"message\" : \"Access denied\"\n" + - "}", 403); + " \"code\" : 403,\n" + + " \"message\" : \"Access denied\"\n" + + "}", 403); // Write request tester.assertResponse(() -> authenticatedRequest("http://localhost:8080/configserver/v1/prod/us-north-1/nodes/v2/node", "", Request.Method.POST), "{\n" + - " \"code\" : 403,\n" + - " \"message\" : \"Access denied\"\n" + - "}", 403); + " \"code\" : 403,\n" + + " \"message\" : \"Access denied\"\n" + + "}", 403); } @Test - public void unauthenticated_request_are_unauthorized() { + void unauthenticated_request_are_unauthorized() { { // Read request Request request = new Request("http://localhost:8080/configserver/v1/prod/us-north-1/nodes/v2/node", "", Request.Method.GET); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java index 5936c135af9..fa652af18f3 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java @@ -17,8 +17,8 @@ import com.yahoo.vespa.hosted.controller.auditlog.AuditLogger; import com.yahoo.vespa.hosted.controller.integration.NodeRepositoryMock; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; import java.io.File; @@ -27,7 +27,7 @@ import java.time.Duration; import java.time.Instant; import java.util.List; -import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertFalse; /** * @author bratseth @@ -38,42 +38,42 @@ public class ControllerApiTest extends ControllerContainerTest { private ContainerTester tester; - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responseFiles); } @Test - public void testControllerApi() { + void testControllerApi() { tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/", "", Request.Method.GET), new File("root.json")); ((InMemoryFlagSource) tester.controller().flagSource()).withListFlag(PermanentFlags.INACTIVE_MAINTENANCE_JOBS.id(), List.of("DeploymentExpirer"), String.class); // GET a list of all maintenance jobs tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/maintenance/", "", Request.Method.GET), - new File("maintenance.json")); + new File("maintenance.json")); } @Test - public void testStats() { - var mock = (NodeRepositoryMock)tester.controller().serviceRegistry().configServer().nodeRepository(); + void testStats() { + var mock = (NodeRepositoryMock) tester.controller().serviceRegistry().configServer().nodeRepository(); mock.putApplication(ZoneId.from("prod", "us-west-1"), - new Application(ApplicationId.fromFullString("t1.a1.i1"), List.of())); + new Application(ApplicationId.fromFullString("t1.a1.i1"), List.of())); mock.putApplication(ZoneId.from("prod", "us-west-1"), - new Application(ApplicationId.fromFullString("t2.a2.i2"), List.of())); + new Application(ApplicationId.fromFullString("t2.a2.i2"), List.of())); mock.putApplication(ZoneId.from("prod", "us-east-3"), - new Application(ApplicationId.fromFullString("t1.a1.i1"), List.of())); + new Application(ApplicationId.fromFullString("t1.a1.i1"), List.of())); tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/stats", "", Request.Method.GET), - new File("stats.json")); + new File("stats.json")); } @Test - public void testUpgraderApi() { + void testUpgraderApi() { // Get current configuration tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/jobs/upgrader", "", Request.Method.GET), - "{\"upgradesPerMinute\":0.125,\"confidenceOverrides\":[]}", - 200); + "{\"upgradesPerMinute\":0.125,\"confidenceOverrides\":[]}", + 200); // Set invalid configuration tester.assertResponse( @@ -123,11 +123,11 @@ public class ControllerApiTest extends ControllerContainerTest { "{\"upgradesPerMinute\":42.0,\"confidenceOverrides\":[{\"6.43\":\"broken\"}]}", 200); - assertFalse("Actions are logged to audit log", tester.controller().auditLogger().readLog().entries().isEmpty()); + assertFalse(tester.controller().auditLogger().readLog().entries().isEmpty(), "Actions are logged to audit log"); } @Test - public void testAuditLogApi() { + void testAuditLogApi() { ManualClock clock = new ManualClock(Instant.parse("2019-03-01T12:13:14.00Z")); AuditLogger logger = new AuditLogger(tester.controller().curator(), clock); @@ -153,13 +153,13 @@ public class ControllerApiTest extends ControllerContainerTest { } @Test - public void testMeteringApi() { + void testMeteringApi() { ApplicationId applicationId = ApplicationId.from("tenant", "app", "instance"); Instant timestamp = Instant.ofEpochMilli(123456789); ZoneId zoneId = ZoneId.defaultId(); List<ResourceSnapshot> snapshots = List.of( - new ResourceSnapshot(applicationId, 12,48,1200, NodeResources.Architecture.arm64, timestamp, zoneId), - new ResourceSnapshot(applicationId, 24, 96,2400, NodeResources.Architecture.x86_64, timestamp, zoneId) + new ResourceSnapshot(applicationId, 12, 48, 1200, NodeResources.Architecture.arm64, timestamp, zoneId), + new ResourceSnapshot(applicationId, 24, 96, 2400, NodeResources.Architecture.x86_64, timestamp, zoneId) ); tester.controller().serviceRegistry().resourceDatabase().writeResourceSnapshots(snapshots); tester.assertResponse( @@ -169,24 +169,24 @@ public class ControllerApiTest extends ControllerContainerTest { } @Test - public void testApproveMembership() { + void testApproveMembership() { ApplicationId applicationId = ApplicationId.from("tenant", "app", "instance"); DeploymentId deployment = new DeploymentId(applicationId, ZoneId.defaultId()); String requestBody = "{\n" + - " \"applicationId\": \"" + deployment.applicationId().serializedForm() + "\",\n" + - " \"zone\": \"" + deployment.zoneId().value() + "\"\n" + - "}"; + " \"applicationId\": \"" + deployment.applicationId().serializedForm() + "\",\n" + + " \"zone\": \"" + deployment.zoneId().value() + "\"\n" + + "}"; MockAccessControlService accessControlService = (MockAccessControlService) tester.serviceRegistry().accessControlService(); - tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/access/requests/"+hostedOperator.getName(), requestBody, Request.Method.POST), - "{\"message\":\"Unable to approve membership request\"}", 400); + tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/access/requests/" + hostedOperator.getName(), requestBody, Request.Method.POST), + "{\"message\":\"Unable to approve membership request\"}", 400); accessControlService.addPendingMember(hostedOperator); - tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/access/requests/"+hostedOperator.getName(), requestBody, Request.Method.POST), - "{\"message\":\"Unable to approve membership request\"}", 400); + tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/access/requests/" + hostedOperator.getName(), requestBody, Request.Method.POST), + "{\"message\":\"Unable to approve membership request\"}", 400); tester.controller().supportAccess().allow(deployment, tester.controller().clock().instant().plus(Duration.ofHours(1)), "tenantx"); - tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/access/requests/"+hostedOperator.getName(), requestBody, Request.Method.POST), - "{\"members\":[\"user.alice\"]}"); + tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/access/requests/" + hostedOperator.getName(), requestBody, Request.Method.POST), + "{\"members\":[\"user.alice\"]}"); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiTest.java index d99239e8f23..5dd57b09af4 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiTest.java @@ -9,7 +9,7 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.nio.file.Files; @@ -24,30 +24,30 @@ public class BadgeApiTest extends ControllerContainerTest { private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/"; @Test - public void testBadgeApi() throws IOException { + void testBadgeApi() throws IOException { ContainerTester tester = new ContainerTester(container, responseFiles); DeploymentTester deploymentTester = new DeploymentTester(new ControllerTester(tester)); deploymentTester.controllerTester().upgradeSystem(Version.fromString("6.1")); var application = deploymentTester.newDeploymentContext("tenant", "application", "default"); ApplicationPackage applicationPackage = new ApplicationPackageBuilder().parallel("us-west-1", "aws-us-east-1a") - .test("us-west-1") - .region("ap-southeast-1") - .test("ap-southeast-1") - .region("eu-west-1") - .test("eu-west-1") - .build(); + .test("us-west-1") + .region("ap-southeast-1") + .test("ap-southeast-1") + .region("eu-west-1") + .test("eu-west-1") + .build(); application.submit(applicationPackage).deploy(); application.submit(applicationPackage) - .runJob(DeploymentContext.systemTest) - .runJob(DeploymentContext.stagingTest) - .runJob(DeploymentContext.productionUsWest1) - .runJob(DeploymentContext.productionAwsUsEast1a) - .runJob(DeploymentContext.testUsWest1) - .runJob(DeploymentContext.productionApSoutheast1) - .failDeployment(DeploymentContext.testApSoutheast1); + .runJob(DeploymentContext.systemTest) + .runJob(DeploymentContext.stagingTest) + .runJob(DeploymentContext.productionUsWest1) + .runJob(DeploymentContext.productionAwsUsEast1a) + .runJob(DeploymentContext.testUsWest1) + .runJob(DeploymentContext.productionApSoutheast1) + .failDeployment(DeploymentContext.testApSoutheast1); application.submit(applicationPackage) - .failTests(DeploymentContext.systemTest, true) - .runJob(DeploymentContext.stagingTest); + .failTests(DeploymentContext.systemTest, true) + .runJob(DeploymentContext.stagingTest); for (int i = 0; i < 31; i++) if ((i & 1) == 0) application.failDeployment(DeploymentContext.productionUsWest1); @@ -58,27 +58,27 @@ public class BadgeApiTest extends ControllerContainerTest { tester.controller().applications().deploymentTrigger().reTrigger(application.instanceId(), DeploymentContext.testEuWest1, "reason"); tester.assertResponse(authenticatedRequest("http://localhost:8080/badge/v1/tenant/application/default"), - Files.readString(Paths.get(responseFiles + "overview.svg")), 200); + Files.readString(Paths.get(responseFiles + "overview.svg")), 200); tester.assertResponse(authenticatedRequest("http://localhost:8080/badge/v1/tenant/application/default/production-us-west-1?historyLength=0"), - Files.readString(Paths.get(responseFiles + "single-running.svg")), 200); + Files.readString(Paths.get(responseFiles + "single-running.svg")), 200); tester.assertResponse(authenticatedRequest("http://localhost:8080/badge/v1/tenant/application/default/system-test"), - Files.readString(Paths.get(responseFiles + "running-test.svg")), 200); + Files.readString(Paths.get(responseFiles + "running-test.svg")), 200); tester.assertResponse(authenticatedRequest("http://localhost:8080/badge/v1/tenant/application/default/production-us-west-1?historyLength=32"), - Files.readString(Paths.get(responseFiles + "history.svg")), 200); + Files.readString(Paths.get(responseFiles + "history.svg")), 200); // New change not reflected before cache entry expires. tester.serviceRegistry().clock().advance(Duration.ofSeconds(59)); application.runJob(DeploymentContext.productionUsWest1); tester.assertResponse(authenticatedRequest("http://localhost:8080/badge/v1/tenant/application/default/production-us-west-1?historyLength=32"), - Files.readString(Paths.get(responseFiles + "history.svg")), 200); + Files.readString(Paths.get(responseFiles + "history.svg")), 200); // Cached entry refreshed after a minute. tester.serviceRegistry().clock().advance(Duration.ofSeconds(1)); tester.assertResponse(authenticatedRequest("http://localhost:8080/badge/v1/tenant/application/default/production-us-west-1?historyLength=32"), - Files.readString(Paths.get(responseFiles + "history2.svg")), 200); + Files.readString(Paths.get(responseFiles + "history2.svg")), 200); tester.assertResponse(authenticatedRequest("http://localhost:8080/badge/v1/tenant/application/default/production-us-west-1?historyLength=0"), - Files.readString(Paths.get(responseFiles + "single-done.svg")), 200); + Files.readString(Paths.get(responseFiles + "single-done.svg")), 200); } } 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 d837b9e8264..7ee5f6db9b9 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 @@ -15,7 +15,7 @@ import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; import com.yahoo.vespa.hosted.controller.versions.NodeVersion; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.File; import java.util.ArrayList; @@ -30,7 +30,7 @@ public class DeploymentApiTest extends ControllerContainerTest { private final static String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/"; @Test - public void testDeploymentApi() { + void testDeploymentApi() { ContainerTester tester = new ContainerTester(container, responseFiles); DeploymentTester deploymentTester = new DeploymentTester(new ControllerTester(tester)); Version version = Version.fromString("4.9"); @@ -43,8 +43,8 @@ public class DeploymentApiTest extends ControllerContainerTest { .region("us-west-1") .build(); ApplicationPackage emptyPackage = new ApplicationPackageBuilder().instances("default") - .allow(ValidationId.deploymentRemoval) - .build(); + .allow(ValidationId.deploymentRemoval) + .build(); // Deploy application without any declared jobs on the oldest version. var oldAppWithoutDeployment = deploymentTester.newDeploymentContext("tenant4", "application4", "default"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/AthenzRoleFilterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/AthenzRoleFilterTest.java index 577aab0ade6..877ca4a99d2 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/AthenzRoleFilterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/AthenzRoleFilterTest.java @@ -15,13 +15,13 @@ import com.yahoo.vespa.hosted.controller.api.integration.athenz.AthenzClientFact import com.yahoo.vespa.hosted.controller.api.integration.athenz.AthenzDbMock; import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.athenz.HostedAthenzIdentities; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.net.URI; import java.util.Set; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author jonmv @@ -48,7 +48,7 @@ public class AthenzRoleFilterTest { private AthenzRoleFilter filter; - @Before + @BeforeEach public void setup() { ControllerTester tester = new ControllerTester(); filter = new AthenzRoleFilter(new AthenzClientFactoryMock(tester.athenzDb()), @@ -67,70 +67,70 @@ public class AthenzRoleFilterTest { } @Test - public void testTranslations() throws Exception { + void testTranslations() throws Exception { // Hosted operators are always members of the hostedOperator role. assertEquals(Set.of(Role.hostedOperator(), Role.systemFlagsDeployer(), Role.systemFlagsDryrunner(), Role.paymentProcessor(), Role.hostedAccountant(), Role.hostedSupporter()), - filter.roles(HOSTED_OPERATOR, NO_CONTEXT_PATH)); + filter.roles(HOSTED_OPERATOR, NO_CONTEXT_PATH)); assertEquals(Set.of(Role.hostedOperator(), Role.systemFlagsDeployer(), Role.systemFlagsDryrunner(), Role.paymentProcessor(), Role.hostedAccountant(), Role.hostedSupporter()), - filter.roles(HOSTED_OPERATOR, TENANT_CONTEXT_PATH)); + filter.roles(HOSTED_OPERATOR, TENANT_CONTEXT_PATH)); assertEquals(Set.of(Role.hostedOperator(), Role.systemFlagsDeployer(), Role.systemFlagsDryrunner(), Role.paymentProcessor(), Role.hostedAccountant(), Role.hostedSupporter()), - filter.roles(HOSTED_OPERATOR, APPLICATION_CONTEXT_PATH)); + filter.roles(HOSTED_OPERATOR, APPLICATION_CONTEXT_PATH)); // Tenant admins are members of the athenzTenantAdmin role within their tenant subtree. assertEquals(Set.of(Role.everyone()), - filter.roles(TENANT_PIPELINE, NO_CONTEXT_PATH)); + filter.roles(TENANT_PIPELINE, NO_CONTEXT_PATH)); assertEquals(Set.of(Role.athenzTenantAdmin(TENANT)), - filter.roles(TENANT_ADMIN, TENANT_CONTEXT_PATH)); + filter.roles(TENANT_ADMIN, TENANT_CONTEXT_PATH)); assertEquals(Set.of(Role.athenzTenantAdmin(TENANT)), - filter.roles(TENANT_ADMIN, APPLICATION_CONTEXT_PATH)); + filter.roles(TENANT_ADMIN, APPLICATION_CONTEXT_PATH)); assertEquals(Set.of(Role.athenzTenantAdmin(TENANT)), - filter.roles(TENANT_ADMIN, TENANT2_CONTEXT_PATH)); + filter.roles(TENANT_ADMIN, TENANT2_CONTEXT_PATH)); assertEquals(Set.of(Role.athenzTenantAdmin(TENANT)), - filter.roles(TENANT_ADMIN, APPLICATION2_CONTEXT_PATH)); + filter.roles(TENANT_ADMIN, APPLICATION2_CONTEXT_PATH)); // Build services are members of the buildService role within their application subtree. assertEquals(Set.of(Role.everyone()), - filter.roles(TENANT_PIPELINE, NO_CONTEXT_PATH)); + filter.roles(TENANT_PIPELINE, NO_CONTEXT_PATH)); assertEquals(Set.of(Role.everyone()), - filter.roles(TENANT_PIPELINE, TENANT_CONTEXT_PATH)); + filter.roles(TENANT_PIPELINE, TENANT_CONTEXT_PATH)); assertEquals(Set.of(Role.buildService(TENANT, APPLICATION)), - filter.roles(TENANT_PIPELINE, APPLICATION_CONTEXT_PATH)); + filter.roles(TENANT_PIPELINE, APPLICATION_CONTEXT_PATH)); assertEquals(Set.of(Role.everyone()), - filter.roles(TENANT_PIPELINE, APPLICATION2_CONTEXT_PATH)); + filter.roles(TENANT_PIPELINE, APPLICATION2_CONTEXT_PATH)); // Principals member of both tenantPipeline and tenantAdmin roles get correct roles assertEquals(Set.of(Role.athenzTenantAdmin(TENANT)), - filter.roles(TENANT_ADMIN_AND_PIPELINE, TENANT_CONTEXT_PATH)); + filter.roles(TENANT_ADMIN_AND_PIPELINE, TENANT_CONTEXT_PATH)); assertEquals(Set.of(Role.athenzTenantAdmin(TENANT), Role.buildService(TENANT, APPLICATION)), - filter.roles(TENANT_ADMIN_AND_PIPELINE, APPLICATION_CONTEXT_PATH)); + filter.roles(TENANT_ADMIN_AND_PIPELINE, APPLICATION_CONTEXT_PATH)); // Users have nothing special under their instance assertEquals(Set.of(Role.everyone()), - filter.roles(USER, INSTANCE_CONTEXT_PATH)); + filter.roles(USER, INSTANCE_CONTEXT_PATH)); // Unprivileged users are just members of the everyone role. assertEquals(Set.of(Role.everyone()), - filter.roles(USER, NO_CONTEXT_PATH)); + filter.roles(USER, NO_CONTEXT_PATH)); assertEquals(Set.of(Role.everyone()), - filter.roles(USER, TENANT_CONTEXT_PATH)); + filter.roles(USER, TENANT_CONTEXT_PATH)); assertEquals(Set.of(Role.everyone()), - filter.roles(USER, APPLICATION_CONTEXT_PATH)); + filter.roles(USER, APPLICATION_CONTEXT_PATH)); assertEquals(Set.of(Role.everyone()), - filter.roles(USER, INSTANCE2_CONTEXT_PATH)); + filter.roles(USER, INSTANCE2_CONTEXT_PATH)); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilterTest.java index be3a50c38b0..64dce08e735 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilterTest.java @@ -11,7 +11,7 @@ import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.api.role.SecurityContext; import com.yahoo.vespa.hosted.controller.restapi.ApplicationRequestToDiscFilterRequestWrapper; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.io.UncheckedIOException; @@ -20,9 +20,9 @@ import java.util.Set; import static com.yahoo.container.jdisc.RequestHandlerTestDriver.MockResponseHandler; import static com.yahoo.jdisc.http.HttpResponse.Status.FORBIDDEN; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author bjorncs @@ -33,7 +33,7 @@ public class ControllerAuthorizationFilterTest { private static final ObjectMapper mapper = new ObjectMapper(); @Test - public void operator() { + void operator() { ControllerTester tester = new ControllerTester(); SecurityContext securityContext = new SecurityContext(() -> "operator", Set.of(Role.hostedOperator())); ControllerAuthorizationFilter filter = createFilter(tester); @@ -44,7 +44,7 @@ public class ControllerAuthorizationFilterTest { } @Test - public void supporter() { + void supporter() { ControllerTester tester = new ControllerTester(); SecurityContext securityContext = new SecurityContext(() -> "operator", Set.of(Role.hostedSupporter())); ControllerAuthorizationFilter filter = createFilter(tester); @@ -54,7 +54,7 @@ public class ControllerAuthorizationFilterTest { } @Test - public void unprivileged() { + void unprivileged() { ControllerTester tester = new ControllerTester(); SecurityContext securityContext = new SecurityContext(() -> "user", Set.of(Role.everyone())); ControllerAuthorizationFilter filter = createFilter(tester); @@ -65,7 +65,7 @@ public class ControllerAuthorizationFilterTest { } @Test - public void unprivilegedInPublic() { + void unprivilegedInPublic() { ControllerTester tester = new ControllerTester(SystemName.Public); SecurityContext securityContext = new SecurityContext(() -> "user", Set.of(Role.everyone())); @@ -76,7 +76,7 @@ public class ControllerAuthorizationFilterTest { } @Test - public void hostedDeveloper() { + void hostedDeveloper() { ControllerTester tester = new ControllerTester(); TenantName tenantName = TenantName.defaultName(); SecurityContext securityContext = new SecurityContext(() -> "user", Set.of(Role.hostedDeveloper(tenantName))); @@ -88,14 +88,14 @@ public class ControllerAuthorizationFilterTest { } private static void assertIsAllowed(Optional<AuthorizationResponse> response) { - assertFalse("Expected no response from filter, but got \"" + - response.map(r -> r.message + "\" (" + r.statusCode + ")").orElse(""), - response.isPresent()); + assertFalse(response.isPresent(), + "Expected no response from filter, but got \"" + + response.map(r -> r.message + "\" (" + r.statusCode + ")").orElse("")); } private static void assertIsForbidden(Optional<AuthorizationResponse> response) { - assertTrue("Expected a response from filter", response.isPresent()); - assertEquals("Invalid status code", FORBIDDEN, response.get().statusCode); + assertTrue(response.isPresent(), "Expected a response from filter"); + assertEquals(FORBIDDEN, response.get().statusCode, "Invalid status code"); } private static ControllerAuthorizationFilter createFilter(ControllerTester tester) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/LastLoginUpdateFilterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/LastLoginUpdateFilterTest.java index c7071cfb68c..b85c93a5d90 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/LastLoginUpdateFilterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/LastLoginUpdateFilterTest.java @@ -8,7 +8,7 @@ import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.api.role.SecurityContext; import com.yahoo.vespa.hosted.controller.restapi.ApplicationRequestToDiscFilterRequestWrapper; import com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.Set; @@ -16,7 +16,7 @@ import java.util.Set; import static com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo.UserLevel.administrator; import static com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo.UserLevel.developer; import static com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo.UserLevel.user; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class LastLoginUpdateFilterTest { @@ -27,7 +27,7 @@ public class LastLoginUpdateFilterTest { private final LastLoginUpdateFilter filter = new LastLoginUpdateFilter(tester.controller()); @Test - public void updateLastLoginTimeTest() { + void updateLastLoginTimeTest() { tester.createTenant(tenant1.value()); tester.createTenant(tenant2.value()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java index 9024d7c8e7e..9ff79213983 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java @@ -20,8 +20,8 @@ import com.yahoo.vespa.hosted.controller.tenant.ArchiveAccess; import com.yahoo.vespa.hosted.controller.tenant.CloudTenant; import com.yahoo.vespa.hosted.controller.tenant.LastLoginInfo; import com.yahoo.vespa.hosted.controller.tenant.TenantInfo; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -34,8 +34,8 @@ import java.util.List; import java.util.Optional; import java.util.Set; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; public class SignatureFilterTest { @@ -63,7 +63,7 @@ public class SignatureFilterTest { private SignatureFilter filter; private RequestSigner signer; - @Before + @BeforeEach public void setup() { tester = new ControllerTester(); applications = tester.controller().applications(); @@ -82,12 +82,12 @@ public class SignatureFilterTest { } @Test - public void testFilter() { + void testFilter() { // Unsigned request gets no role. HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://host:123/path/./..//..%2F?query=empty&%3F=%26")); byte[] emptyBody = new byte[0]; verifySecurityContext(requestOf(request.copy().method("GET", HttpRequest.BodyPublishers.ofByteArray(emptyBody)).build(), emptyBody), - null); + null); // Signed request gets no role when no key is stored for the application. verifySecurityContext(requestOf(signer.signed(request.copy(), Method.GET, InputStream::nullInputStream), emptyBody), @@ -97,42 +97,42 @@ public class SignatureFilterTest { applications.lockApplicationOrThrow(appId, application -> applications.store(application.withDeployKey(otherPublicKey))); // Signed request gets no role when no key is stored for the application. verifySecurityContext(requestOf(signer.signed(request.copy(), Method.GET, InputStream::nullInputStream), emptyBody), - null); + null); // Signed request gets a headless role when a matching key is stored for the application. applications.lockApplicationOrThrow(appId, application -> applications.store(application.withDeployKey(publicKey))); verifySecurityContext(requestOf(signer.signed(request.copy(), Method.GET, InputStream::nullInputStream), emptyBody), - new SecurityContext(new SimplePrincipal("headless@my-tenant.my-app"), - Set.of(Role.reader(id.tenant()), - Role.headless(id.tenant(), id.application())), - tester.clock().instant())); + new SecurityContext(new SimplePrincipal("headless@my-tenant.my-app"), + Set.of(Role.reader(id.tenant()), + Role.headless(id.tenant(), id.application())), + tester.clock().instant())); // Signed POST request with X-Key header gets a headless role. byte[] hiBytes = new byte[]{0x48, 0x69}; verifySecurityContext(requestOf(signer.signed(request.copy(), Method.POST, () -> new ByteArrayInputStream(hiBytes)), hiBytes), - new SecurityContext(new SimplePrincipal("headless@my-tenant.my-app"), - Set.of(Role.reader(id.tenant()), - Role.headless(id.tenant(), id.application())), - tester.clock().instant())); + new SecurityContext(new SimplePrincipal("headless@my-tenant.my-app"), + Set.of(Role.reader(id.tenant()), + Role.headless(id.tenant(), id.application())), + tester.clock().instant())); // Signed request gets a developer role when a matching developer key is stored for the tenant. tester.curator().writeTenant(new CloudTenant(appId.tenant(), - Instant.EPOCH, - LastLoginInfo.EMPTY, - Optional.empty(), - ImmutableBiMap.of(publicKey, () -> "user"), - TenantInfo.empty(), - List.of(), - new ArchiveAccess())); + Instant.EPOCH, + LastLoginInfo.EMPTY, + Optional.empty(), + ImmutableBiMap.of(publicKey, () -> "user"), + TenantInfo.empty(), + List.of(), + new ArchiveAccess())); verifySecurityContext(requestOf(signer.signed(request.copy(), Method.POST, () -> new ByteArrayInputStream(hiBytes)), hiBytes), - new SecurityContext(new SimplePrincipal("user"), - Set.of(Role.reader(id.tenant()), - Role.developer(id.tenant())), - tester.clock().instant())); + new SecurityContext(new SimplePrincipal("user"), + Set.of(Role.reader(id.tenant()), + Role.developer(id.tenant())), + tester.clock().instant())); // Unsigned requests still get no roles. verifySecurityContext(requestOf(request.copy().method("GET", HttpRequest.BodyPublishers.ofByteArray(emptyBody)).build(), emptyBody), - null); + null); } private void verifySecurityContext(DiscFilterRequest request, SecurityContext securityContext) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/flags/AuditedFlagsApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/flags/AuditedFlagsApiTest.java index 6d8826f6e48..ee89f506f17 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/flags/AuditedFlagsApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/flags/AuditedFlagsApiTest.java @@ -7,10 +7,10 @@ import com.yahoo.vespa.athenz.api.AthenzUser; import com.yahoo.vespa.hosted.controller.auditlog.AuditLog; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author mpolden @@ -22,24 +22,24 @@ public class AuditedFlagsApiTest extends ControllerContainerTest { private ContainerTester tester; - @Before + @BeforeEach public void before() { addUserToHostedOperatorRole(operator); tester = new ContainerTester(container, responses); } @Test - public void test_audit_logging() { + void test_audit_logging() { var body = "{\n" + - " \"id\": \"id1\",\n" + - " \"rules\": [\n" + - " {\n" + - " \"value\": true\n" + - " }\n" + - " ]\n" + - "}"; + " \"id\": \"id1\",\n" + + " \"rules\": [\n" + + " {\n" + + " \"value\": true\n" + + " }\n" + + " ]\n" + + "}"; assertResponse(new Request("http://localhost:8080/flags/v1/data/id1?force=true", body, Request.Method.PUT), - "", 200); + "", 200); var log = tester.controller().auditLogger().readLog(); assertEquals(1, log.entries().size()); var entry = log.entries().get(0); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiTest.java index 96b08006790..fabae508057 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiTest.java @@ -8,7 +8,7 @@ import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerCloudTest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.Set; @@ -18,7 +18,7 @@ import java.util.Set; public class HorizonApiTest extends ControllerContainerCloudTest { @Test - public void only_operators_and_flag_enabled_tenants_allowed() { + void only_operators_and_flag_enabled_tenants_allowed() { ContainerTester tester = new ContainerTester(container, ""); TenantName tenantName = TenantName.defaultName(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java index 62ec8f4222c..d0d169720d0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java @@ -5,7 +5,7 @@ import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; import com.yahoo.slime.JsonFormat; import com.yahoo.slime.SlimeUtils; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -16,7 +16,7 @@ import java.util.Set; import static com.yahoo.slime.SlimeUtils.jsonToSlimeOrThrow; import static com.yahoo.slime.SlimeUtils.toJsonBytes; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author valerijf @@ -24,7 +24,7 @@ import static org.junit.Assert.assertEquals; public class TsdbQueryRewriterTest { @Test - public void rewrites_query() throws IOException { + void rewrites_query() throws IOException { assertRewrite("filters-complex.json", "filters-complex.expected.json", Set.of(TenantName.from("tenant2")), false); assertRewrite("filter-in-execution-graph.json", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiTest.java index 15e7a804143..6ddc58feaea 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiTest.java @@ -21,15 +21,15 @@ import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; import com.yahoo.vespa.hosted.controller.versions.OsVersionStatus; import org.intellij.lang.annotations.Language; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.File; import java.time.Duration; import java.time.Instant; import java.util.List; -import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertFalse; /** * @author mpolden @@ -52,7 +52,7 @@ public class OsApiTest extends ControllerContainerTest { return SystemName.cd; } - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responses); tester.serviceRegistry().clock().setInstant(Instant.ofEpochMilli(1234)); @@ -69,7 +69,7 @@ public class OsApiTest extends ControllerContainerTest { } @Test - public void test_api() { + void test_api() { // No versions available yet assertResponse(new Request("http://localhost:8080/os/v1/"), "{\"versions\":[]}", 200); @@ -77,9 +77,9 @@ public class OsApiTest extends ControllerContainerTest { upgradeAndUpdateStatus(); // Upgrade OS to a different version in each cloud assertResponse(new Request("http://localhost:8080/os/v1/", "{\"version\": \"7.5.2\", \"cloud\": \"cloud1\", \"upgradeBudget\": \"PT0S\"}", Request.Method.PATCH), - "{\"message\":\"Set target OS version for cloud 'cloud1' to 7.5.2 with upgrade budget PT0S\"}", 200); + "{\"message\":\"Set target OS version for cloud 'cloud1' to 7.5.2 with upgrade budget PT0S\"}", 200); assertResponse(new Request("http://localhost:8080/os/v1/", "{\"version\": \"8.2.1\", \"cloud\": \"cloud2\", \"upgradeBudget\": \"PT24H\"}", Request.Method.PATCH), - "{\"message\":\"Set target OS version for cloud 'cloud2' to 8.2.1 with upgrade budget PT24H\"}", 200); + "{\"message\":\"Set target OS version for cloud 'cloud2' to 8.2.1 with upgrade budget PT24H\"}", 200); // Status is updated after some zones are upgraded upgradeAndUpdateStatus(); @@ -93,49 +93,49 @@ public class OsApiTest extends ControllerContainerTest { // Downgrade with force is permitted assertResponse(new Request("http://localhost:8080/os/v1/", "{\"version\": \"7.5.1\", \"cloud\": \"cloud1\", \"force\": true, \"upgradeBudget\": \"PT0S\"}", Request.Method.PATCH), - "{\"message\":\"Set target OS version for cloud 'cloud1' to 7.5.1 with upgrade budget PT0S\"}", 200); + "{\"message\":\"Set target OS version for cloud 'cloud1' to 7.5.1 with upgrade budget PT0S\"}", 200); // Clear target for a given cloud assertResponse(new Request("http://localhost:8080/os/v1/", "{\"version\": null, \"cloud\": \"cloud2\"}", Request.Method.PATCH), - "{\"message\":\"Cleared target OS version for cloud 'cloud2'\"}", 200); + "{\"message\":\"Cleared target OS version for cloud 'cloud2'\"}", 200); // Error: Missing fields assertResponse(new Request("http://localhost:8080/os/v1/", "{\"version\": \"7.6\"}", Request.Method.PATCH), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Field 'cloud' is required\"}", 400); + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Field 'cloud' is required\"}", 400); assertResponse(new Request("http://localhost:8080/os/v1/", "{\"cloud\": \"cloud1\"}", Request.Method.PATCH), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Field 'version' is required\"}", 400); + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Field 'version' is required\"}", 400); // Error: Invalid versions assertResponse(new Request("http://localhost:8080/os/v1/", "{\"version\": \"0.0.0\", \"cloud\": \"cloud1\", \"upgradeBudget\": \"PT0S\"}", Request.Method.PATCH), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid version '0.0.0'\"}", 400); + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid version '0.0.0'\"}", 400); assertResponse(new Request("http://localhost:8080/os/v1/", "{\"version\": \"foo\", \"cloud\": \"cloud1\", \"upgradeBudget\": \"PT0S\"}", Request.Method.PATCH), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid version 'foo': For input string: \\\"foo\\\"\"}", 400); + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid version 'foo': For input string: \\\"foo\\\"\"}", 400); // Error: Invalid cloud assertResponse(new Request("http://localhost:8080/os/v1/", "{\"version\": \"7.6\", \"cloud\": \"foo\", \"upgradeBudget\": \"PT0S\"}", Request.Method.PATCH), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Cloud 'foo' does not exist in this system\"}", 400); + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Cloud 'foo' does not exist in this system\"}", 400); // Error: Downgrade OS assertResponse(new Request("http://localhost:8080/os/v1/", "{\"version\": \"7.4.1\", \"cloud\": \"cloud1\", \"upgradeBudget\": \"PT0S\"}", Request.Method.PATCH), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Cannot downgrade cloud 'cloud1' to version 7.4.1\"}", 400); + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Cannot downgrade cloud 'cloud1' to version 7.4.1\"}", 400); // Request firmware checks in all zones. assertResponse(new Request("http://localhost:8080/os/v1/firmware/", "", Request.Method.POST), - "{\"message\":\"Requested firmware checks in prod.us-east-3, prod.us-west-1, prod.eu-west-1.\"}", 200); + "{\"message\":\"Requested firmware checks in prod.us-east-3, prod.us-west-1, prod.eu-west-1.\"}", 200); // Cancel firmware checks in all prod zones. assertResponse(new Request("http://localhost:8080/os/v1/firmware/prod/", "", Request.Method.DELETE), - "{\"message\":\"Cancelled firmware checks in prod.us-east-3, prod.us-west-1, prod.eu-west-1.\"}", 200); + "{\"message\":\"Cancelled firmware checks in prod.us-east-3, prod.us-west-1, prod.eu-west-1.\"}", 200); // Request firmware checks in prod.us-east-3. assertResponse(new Request("http://localhost:8080/os/v1/firmware/prod/us-east-3", "", Request.Method.POST), - "{\"message\":\"Requested firmware checks in prod.us-east-3.\"}", 200); + "{\"message\":\"Requested firmware checks in prod.us-east-3.\"}", 200); // Error: Cancel firmware checks in an empty set of zones. assertResponse(new Request("http://localhost:8080/os/v1/firmware/dev/", "", Request.Method.DELETE), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"No zones at path '/os/v1/firmware/dev/'\"}", 404); + "{\"error-code\":\"NOT_FOUND\",\"message\":\"No zones at path '/os/v1/firmware/dev/'\"}", 404); - assertFalse("Actions are logged to audit log", tester.controller().auditLogger().readLog().entries().isEmpty()); + assertFalse(tester.controller().auditLogger().readLog().entries().isEmpty(), "Actions are logged to audit log"); } private void upgradeAndUpdateStatus() { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiTest.java index ea7ec7c1589..cb402d700e2 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiTest.java @@ -14,13 +14,13 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.File; import java.util.List; -import static org.junit.Assert.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; /** * @author mpolden @@ -32,7 +32,7 @@ public class RoutingApiTest extends ControllerContainerTest { private ContainerTester tester; private DeploymentTester deploymentTester; - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responseFiles); deploymentTester = new DeploymentTester(new ControllerTester(tester)); @@ -40,7 +40,7 @@ public class RoutingApiTest extends ControllerContainerTest { } @Test - public void discovery() { + void discovery() { // Deploy var context = deploymentTester.newDeploymentContext("t1", "a1", "default"); var westZone = ZoneId.from("prod", "us-west-1"); @@ -54,34 +54,34 @@ public class RoutingApiTest extends ControllerContainerTest { // GET root tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/", "", - Request.Method.GET), - new File("discovery/root.json")); + Request.Method.GET), + new File("discovery/root.json")); // GET tenant tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/t1", "", - Request.Method.GET), - new File("discovery/tenant.json")); + Request.Method.GET), + new File("discovery/tenant.json")); // GET application tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/t1/application/a1/", - "", - Request.Method.GET), - new File("discovery/application.json")); + "", + Request.Method.GET), + new File("discovery/application.json")); // GET instance tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/t1/application/a1/instance/default/", - "", - Request.Method.GET), - new File("discovery/instance.json")); + "", + Request.Method.GET), + new File("discovery/instance.json")); // GET environment tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/environment/", "", - Request.Method.GET), - new File("discovery/environment.json")); + Request.Method.GET), + new File("discovery/environment.json")); } @Test - public void recursion() { + void recursion() { var context1 = deploymentTester.newDeploymentContext("t1", "a1", "default"); var westZone = ZoneId.from("prod", "us-west-1"); var eastZone = ZoneId.from("prod", "us-east-3"); @@ -102,33 +102,33 @@ public class RoutingApiTest extends ControllerContainerTest { // GET tenant recursively tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/t1?recursive=true", "", - Request.Method.GET), - new File("recursion/tenant.json")); + Request.Method.GET), + new File("recursion/tenant.json")); // GET application recursively tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/t1/application/a1?recursive=true", "", - Request.Method.GET), - new File("recursion/application.json")); + Request.Method.GET), + new File("recursion/application.json")); // GET instance recursively tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/t1/application/a1/instance/default?recursive=true", "", - Request.Method.GET), - new File("recursion/application.json")); + Request.Method.GET), + new File("recursion/application.json")); // GET environment recursively tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/environment?recursive=true", "", - Request.Method.GET), - new File("recursion/environment.json")); + Request.Method.GET), + new File("recursion/environment.json")); } @Test - public void exclusive_routing() { + void exclusive_routing() { var context = deploymentTester.newDeploymentContext(); // Zones support direct routing var westZone = ZoneId.from("prod", "us-west-1"); var eastZone = ZoneId.from("prod", "us-east-3"); deploymentTester.controllerTester().zoneRegistry().exclusiveRoutingIn(ZoneApiMock.from(westZone), - ZoneApiMock.from(eastZone)); + ZoneApiMock.from(eastZone)); // Deploy application var applicationPackage = new ApplicationPackageBuilder() .athenzIdentity(AthenzDomain.from("domain"), AthenzService.from("service")) @@ -140,45 +140,45 @@ public class RoutingApiTest extends ControllerContainerTest { // GET initial deployment status tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("policy/deployment-status-initial.json")); + "", Request.Method.GET), + new File("policy/deployment-status-initial.json")); // POST sets deployment out tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/inactive/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.POST), - "{\"message\":\"Set global routing status for tenant.application in prod.us-west-1 to OUT\"}"); + "", Request.Method.POST), + "{\"message\":\"Set global routing status for tenant.application in prod.us-west-1 to OUT\"}"); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("policy/deployment-status-out.json")); + "", Request.Method.GET), + new File("policy/deployment-status-out.json")); // DELETE sets deployment in tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/inactive/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.DELETE), - "{\"message\":\"Set global routing status for tenant.application in prod.us-west-1 to IN\"}"); + "", Request.Method.DELETE), + "{\"message\":\"Set global routing status for tenant.application in prod.us-west-1 to IN\"}"); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("policy/deployment-status-in.json")); + "", Request.Method.GET), + new File("policy/deployment-status-in.json")); // GET initial zone status tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("policy/zone-status-initial.json")); + "", Request.Method.GET), + new File("policy/zone-status-initial.json")); // POST sets zone out tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/inactive/environment/prod/region/us-west-1", - "", Request.Method.POST), - "{\"message\":\"Set global routing status for deployments in prod.us-west-1 to OUT\"}"); + "", Request.Method.POST), + "{\"message\":\"Set global routing status for deployments in prod.us-west-1 to OUT\"}"); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("policy/zone-status-out.json")); + "", Request.Method.GET), + new File("policy/zone-status-out.json")); // DELETE sets zone in tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/inactive/environment/prod/region/us-west-1", - "", Request.Method.DELETE), - "{\"message\":\"Set global routing status for deployments in prod.us-west-1 to IN\"}"); + "", Request.Method.DELETE), + "{\"message\":\"Set global routing status for deployments in prod.us-west-1 to IN\"}"); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("policy/zone-status-in.json")); + "", Request.Method.GET), + new File("policy/zone-status-in.json")); // Endpoint is removed applicationPackage = new ApplicationPackageBuilder() @@ -191,12 +191,12 @@ public class RoutingApiTest extends ControllerContainerTest { // GET deployment status. Now empty as no routing policies have global endpoints tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - "{\"deployments\":[]}"); + "", Request.Method.GET), + "{\"deployments\":[]}"); } @Test - public void shared_routing() { + void shared_routing() { // Deploy application var context = deploymentTester.newDeploymentContext(); var westZone = ZoneId.from("prod", "us-west-1"); @@ -208,61 +208,61 @@ public class RoutingApiTest extends ControllerContainerTest { .build(); context.submit(applicationPackage).deploy(); - assertNotEquals("Rotation is assigned", List.of(), context.instance().rotations()); + assertNotEquals(List.of(), context.instance().rotations(), "Rotation is assigned"); // GET initial deployment status tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("rotation/deployment-status-initial.json")); + "", Request.Method.GET), + new File("rotation/deployment-status-initial.json")); // POST sets deployment out tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/inactive/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.POST), - "{\"message\":\"Set global routing status for tenant.application in prod.us-west-1 to OUT\"}"); + "", Request.Method.POST), + "{\"message\":\"Set global routing status for tenant.application in prod.us-west-1 to OUT\"}"); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("rotation/deployment-status-out.json")); + "", Request.Method.GET), + new File("rotation/deployment-status-out.json")); // DELETE sets deployment in tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/inactive/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.DELETE), - "{\"message\":\"Set global routing status for tenant.application in prod.us-west-1 to IN\"}"); + "", Request.Method.DELETE), + "{\"message\":\"Set global routing status for tenant.application in prod.us-west-1 to IN\"}"); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("rotation/deployment-status-in.json")); + "", Request.Method.GET), + new File("rotation/deployment-status-in.json")); // GET initial zone status tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("rotation/zone-status-initial.json")); + "", Request.Method.GET), + new File("rotation/zone-status-initial.json")); // POST sets zone out tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/inactive/environment/prod/region/us-west-1", - "", Request.Method.POST), - "{\"message\":\"Set global routing status for deployments in prod.us-west-1 to OUT\"}"); + "", Request.Method.POST), + "{\"message\":\"Set global routing status for deployments in prod.us-west-1 to OUT\"}"); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("rotation/zone-status-out.json")); + "", Request.Method.GET), + new File("rotation/zone-status-out.json")); // DELETE sets zone in tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/inactive/environment/prod/region/us-west-1", - "", Request.Method.DELETE), - "{\"message\":\"Set global routing status for deployments in prod.us-west-1 to IN\"}"); + "", Request.Method.DELETE), + "{\"message\":\"Set global routing status for deployments in prod.us-west-1 to IN\"}"); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("rotation/zone-status-in.json")); + "", Request.Method.GET), + new File("rotation/zone-status-in.json")); } @Test - public void mixed_routing_multiple_zones() { + void mixed_routing_multiple_zones() { var westZone = ZoneId.from("prod", "us-west-1"); var eastZone = ZoneId.from("prod", "us-east-3"); // One shared and one exclusive zone deploymentTester.controllerTester().zoneRegistry().setRoutingMethod(ZoneApiMock.from(westZone), - RoutingMethod.sharedLayer4); + RoutingMethod.sharedLayer4); deploymentTester.controllerTester().zoneRegistry().setRoutingMethod(ZoneApiMock.from(eastZone), - RoutingMethod.exclusive); + RoutingMethod.exclusive); // Deploy application var context = deploymentTester.newDeploymentContext(); @@ -277,23 +277,23 @@ public class RoutingApiTest extends ControllerContainerTest { // GET status for zone using sharedLayer4 routing tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - new File("rotation/deployment-status-initial.json")); + "", Request.Method.GET), + new File("rotation/deployment-status-initial.json")); // GET status for zone using exclusive routing tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-east-3", - "", Request.Method.GET), - "{\"deployments\":[{\"routingMethod\":\"exclusive\",\"instance\":\"tenant:application:default\"," + - "\"environment\":\"prod\",\"region\":\"us-east-3\",\"status\":\"in\",\"agent\":\"system\",\"changedAt\":0}]}"); + "", Request.Method.GET), + "{\"deployments\":[{\"routingMethod\":\"exclusive\",\"instance\":\"tenant:application:default\"," + + "\"environment\":\"prod\",\"region\":\"us-east-3\",\"status\":\"in\",\"agent\":\"system\",\"changedAt\":0}]}"); } @Test - public void invalid_requests() { + void invalid_requests() { // GET non-existent application tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/t1/application/a1/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"t1.a1 not found\"}", - 400); + "", Request.Method.GET), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"t1.a1 not found\"}", + 400); // GET, DELETE non-existent deployment var context = deploymentTester.newDeploymentContext(); @@ -303,23 +303,23 @@ public class RoutingApiTest extends ControllerContainerTest { .build(); context.submit(applicationPackage).deploy(); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.GET), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such deployment: tenant.application in prod.us-west-1\"}", - 400); + "", Request.Method.GET), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such deployment: tenant.application in prod.us-west-1\"}", + 400); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/inactive/tenant/tenant/application/application/instance/default/environment/prod/region/us-west-1", - "", Request.Method.DELETE), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such deployment: tenant.application in prod.us-west-1\"}", - 400); + "", Request.Method.DELETE), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such deployment: tenant.application in prod.us-west-1\"}", + 400); // GET non-existent zone tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/environment/prod/region/us-north-1", - "", Request.Method.GET), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such zone: prod.us-north-1\"}", - 400); + "", Request.Method.GET), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such zone: prod.us-north-1\"}", + 400); } @Test - public void endpoints_list() { + void endpoints_list() { var context = deploymentTester.newDeploymentContext("t1", "a1", "default"); var westZone = ZoneId.from("prod", "us-west-1"); var eastZone = ZoneId.from("prod", "us-east-3"); @@ -331,7 +331,7 @@ public class RoutingApiTest extends ControllerContainerTest { context.submit(applicationPackage).deploy(); tester.assertResponse(operatorRequest("http://localhost:8080/routing/v1/status/tenant/t1/application/a1/instance/default/endpoint", "", Request.Method.GET), - new File("endpoint/endpoints.json")); + new File("endpoint/endpoints.json")); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsDeployResultTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsDeployResultTest.java index c157cb3516f..36679e0dd91 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsDeployResultTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsDeployResultTest.java @@ -7,7 +7,7 @@ import com.yahoo.vespa.hosted.controller.api.systemflags.v1.FlagsTarget; import com.yahoo.vespa.hosted.controller.api.systemflags.v1.wire.WireSystemFlagsDeployResult; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.integration.ZoneRegistryMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.List; @@ -21,7 +21,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ public class SystemFlagsDeployResultTest { @Test - public void changes_and_errors_are_present_in_wire_format() { + void changes_and_errors_are_present_in_wire_format() { FlagsTarget controllerTarget = FlagsTarget.forController(SystemName.cd); FlagId flagOne = new FlagId("flagone"); FlagId flagTwo = new FlagId("flagtwo"); @@ -40,7 +40,7 @@ public class SystemFlagsDeployResultTest { } @Test - public void identical_errors_and_changes_from_multiple_targets_are_merged() { + void identical_errors_and_changes_from_multiple_targets_are_merged() { ZoneApiMock prodUsWest1Zone = ZoneApiMock.fromId("prod.us-west-1"); ZoneRegistryMock registry = new ZoneRegistryMock(SystemName.cd).setZones(prodUsWest1Zone); FlagsTarget prodUsWest1Target = FlagsTarget.forConfigServer(registry, prodUsWest1Zone.getId()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsDeployerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsDeployerTest.java index d92b0be0eb9..50354639f6f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsDeployerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsDeployerTest.java @@ -8,7 +8,7 @@ import com.yahoo.vespa.hosted.controller.api.systemflags.v1.FlagsTarget; import com.yahoo.vespa.hosted.controller.api.systemflags.v1.SystemFlagsDataArchive; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.integration.ZoneRegistryMock; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.io.UncheckedIOException; @@ -43,7 +43,7 @@ public class SystemFlagsDeployerTest { private final FlagsTarget prodUsEast3Target = FlagsTarget.forConfigServer(registry, prodUsEast3Zone.getId()); @Test - public void deploys_flag_data_to_targets() throws IOException { + void deploys_flag_data_to_targets() throws IOException { FlagsClient flagsClient = mock(FlagsClient.class); when(flagsClient.listFlagData(controllerTarget)).thenReturn(List.of()); when(flagsClient.listFlagData(prodUsWest1Target)).thenReturn(List.of(flagData("existing-prod.us-west-1.json"))); @@ -74,7 +74,7 @@ public class SystemFlagsDeployerTest { } @Test - public void dryrun_should_not_change_flags() throws IOException { + void dryrun_should_not_change_flags() throws IOException { FlagsClient flagsClient = mock(FlagsClient.class); when(flagsClient.listFlagData(controllerTarget)).thenReturn(List.of()); when(flagsClient.listDefinedFlags(controllerTarget)).thenReturn(List.of(new FlagId("my-flag"))); @@ -97,7 +97,7 @@ public class SystemFlagsDeployerTest { } @Test - public void creates_error_entries_in_result_if_flag_data_operations_fail() throws IOException { + void creates_error_entries_in_result_if_flag_data_operations_fail() throws IOException { FlagsClient flagsClient = mock(FlagsClient.class); UncheckedIOException exception = new UncheckedIOException(new IOException("I/O error message")); when(flagsClient.listFlagData(prodUsWest1Target)).thenThrow(exception); @@ -120,7 +120,7 @@ public class SystemFlagsDeployerTest { } @Test - public void creates_error_entry_for_invalid_flag_archive() throws IOException { + void creates_error_entry_for_invalid_flag_archive() throws IOException { FlagsClient flagsClient = mock(FlagsClient.class); FlagData defaultData = flagData("flags/my-flag/main.json"); SystemFlagsDataArchive archive = new SystemFlagsDataArchive.Builder() @@ -135,7 +135,7 @@ public class SystemFlagsDeployerTest { } @Test - public void creates_error_entry_for_flag_data_of_undefined_flag() throws IOException { + void creates_error_entry_for_flag_data_of_undefined_flag() throws IOException { FlagData prodUsEast3Data = flagData("flags/my-flag/main.prod.us-east-3.json"); FlagsClient flagsClient = mock(FlagsClient.class); when(flagsClient.listFlagData(prodUsEast3Target)) @@ -154,7 +154,7 @@ public class SystemFlagsDeployerTest { } @Test - public void creates_warning_entry_for_existing_flag_data_for_undefined_flag() throws IOException { + void creates_warning_entry_for_existing_flag_data_for_undefined_flag() throws IOException { FlagData prodUsEast3Data = flagData("flags/my-flag/main.prod.us-east-3.json"); FlagsClient flagsClient = mock(FlagsClient.class); when(flagsClient.listFlagData(prodUsEast3Target)) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiOnPremTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiOnPremTest.java index 1cd4b5e5541..f7e270b3c68 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiOnPremTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiOnPremTest.java @@ -11,7 +11,7 @@ import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.jdisc.http.filter.security.misc.User; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.File; import java.util.HashMap; @@ -26,7 +26,7 @@ public class UserApiOnPremTest extends ControllerContainerTest { private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/responses/"; @Test - public void userMetadataOnPremTest() { + void userMetadataOnPremTest() { try (Flags.Replacer ignored = Flags.clearFlagsForTesting(PermanentFlags.MAX_TRIAL_TENANTS.id(), PermanentFlags.ENABLE_PUBLIC_SIGNUP_FLOW.id())) { ContainerTester tester = new ContainerTester(container, responseFiles); ControllerTester controller = new ControllerTester(tester); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiTest.java index 1bb409b9906..3e9f6256134 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiTest.java @@ -14,7 +14,7 @@ import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerCloudTest; import com.yahoo.vespa.hosted.controller.tenant.Tenant; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.File; import java.util.Set; @@ -22,7 +22,7 @@ import java.util.Set; import static com.yahoo.application.container.handler.Request.Method.DELETE; import static com.yahoo.application.container.handler.Request.Method.POST; import static com.yahoo.application.container.handler.Request.Method.PUT; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author jonmv @@ -42,7 +42,7 @@ public class UserApiTest extends ControllerContainerCloudTest { @Test - public void testUserManagement() { + void testUserManagement() { ContainerTester tester = new ContainerTester(container, responseFiles); assertEquals(SystemName.Public, tester.controller().system()); Set<Role> operator = Set.of(Role.hostedOperator()); @@ -51,25 +51,25 @@ public class UserApiTest extends ControllerContainerCloudTest { // GET at application/v4 root fails as it's not public read. tester.assertResponse(request("/application/v4/"), - accessDenied, 403); + accessDenied, 403); // GET at application/v4/tenant succeeds for operators. tester.assertResponse(request("/application/v4/tenant") - .roles(operator), - "[]"); + .roles(operator), + "[]"); // POST a tenant is not available to everyone. tester.assertResponse(request("/application/v4/tenant/my-tenant", POST) - .data("{\"token\":\"hello\"}"), - "{\"error-code\":\"FORBIDDEN\",\"message\":\"You are not currently permitted to create tenants. Please contact the Vespa team to request access.\"}", 403); + .data("{\"token\":\"hello\"}"), + "{\"error-code\":\"FORBIDDEN\",\"message\":\"You are not currently permitted to create tenants. Please contact the Vespa team to request access.\"}", 403); // POST a tenant is available to operators. tester.assertResponse(request("/application/v4/tenant/my-tenant", POST) - .roles(operator) - .principal("administrator@tenant") - .user(new User("administrator@tenant", "administrator", "admin", "picture")) - .data("{\"token\":\"hello\"}"), - new File("tenant-without-applications.json")); + .roles(operator) + .principal("administrator@tenant") + .user(new User("administrator@tenant", "administrator", "admin", "picture")) + .data("{\"token\":\"hello\"}"), + new File("tenant-without-applications.json")); // GET at tenant/info with contact information. tester.assertResponse(request("/application/v4/tenant/my-tenant/info") @@ -79,97 +79,97 @@ public class UserApiTest extends ControllerContainerCloudTest { // GET at user/v1 root fails as no access control is defined there. tester.assertResponse(request("/user/v1/"), - accessDenied, 403); + accessDenied, 403); // POST a hosted operator role is not allowed. tester.assertResponse(request("/user/v1/tenant/my-tenant", POST) - .roles(Set.of(Role.administrator(id.tenant()))) - .data("{\"user\":\"evil@evil\",\"roleName\":\"hostedOperator\"}"), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Malformed or illegal role name 'hostedOperator'.\"}", 400); + .roles(Set.of(Role.administrator(id.tenant()))) + .data("{\"user\":\"evil@evil\",\"roleName\":\"hostedOperator\"}"), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Malformed or illegal role name 'hostedOperator'.\"}", 400); // POST a tenant developer is available to the tenant owner. tester.assertResponse(request("/user/v1/tenant/my-tenant", POST) - .roles(Set.of(Role.administrator(id.tenant()))) - .data("{\"user\":\"developer@tenant\",\"roles\":[\"developer\",\"reader\"]}"), - "{\"message\":\"user 'developer@tenant' is now a member of role 'developer' of 'my-tenant', role 'reader' of 'my-tenant'\"}"); + .roles(Set.of(Role.administrator(id.tenant()))) + .data("{\"user\":\"developer@tenant\",\"roles\":[\"developer\",\"reader\"]}"), + "{\"message\":\"user 'developer@tenant' is now a member of role 'developer' of 'my-tenant', role 'reader' of 'my-tenant'\"}"); // POST a tenant admin is not available to a tenant developer. tester.assertResponse(request("/user/v1/tenant/my-tenant", POST) - .roles(Set.of(Role.developer(id.tenant()))) - .data("{\"user\":\"developer@tenant\",\"roleName\":\"administrator\"}"), - accessDenied, 403); + .roles(Set.of(Role.developer(id.tenant()))) + .data("{\"user\":\"developer@tenant\",\"roleName\":\"administrator\"}"), + accessDenied, 403); // POST a headless for a non-existent application fails. tester.assertResponse(request("/user/v1/tenant/my-tenant/application/my-app", POST) - .roles(Set.of(Role.administrator(TenantName.from("my-tenant")))) - .data("{\"user\":\"headless@app\",\"roleName\":\"headless\"}"), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"role 'headless' of 'my-app' owned by 'my-tenant' not found\"}", 400); + .roles(Set.of(Role.administrator(TenantName.from("my-tenant")))) + .data("{\"user\":\"headless@app\",\"roleName\":\"headless\"}"), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"role 'headless' of 'my-app' owned by 'my-tenant' not found\"}", 400); // POST an application is allowed for a tenant developer. tester.assertResponse(request("/application/v4/tenant/my-tenant/application/my-app", POST) - .principal("developer@tenant") - .roles(Set.of(Role.developer(id.tenant()))), - new File("application-created.json")); + .principal("developer@tenant") + .roles(Set.of(Role.developer(id.tenant()))), + new File("application-created.json")); // POST an application is not allowed under a different tenant. tester.assertResponse(request("/application/v4/tenant/other-tenant/application/my-app", POST) - .roles(Set.of(Role.administrator(id.tenant()))), - accessDenied, 403); + .roles(Set.of(Role.administrator(id.tenant()))), + accessDenied, 403); // POST a tenant role is not allowed to an application. tester.assertResponse(request("/user/v1/tenant/my-tenant/application/my-app", POST) - .roles(Set.of(Role.hostedOperator())) - .data("{\"user\":\"developer@app\",\"roleName\":\"developer\"}"), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Malformed or illegal role name 'developer'.\"}", 400); + .roles(Set.of(Role.hostedOperator())) + .data("{\"user\":\"developer@app\",\"roleName\":\"developer\"}"), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Malformed or illegal role name 'developer'.\"}", 400); // GET tenant role information is available to readers. tester.assertResponse(request("/user/v1/tenant/my-tenant") - .roles(Set.of(Role.reader(id.tenant()))), - new File("tenant-roles.json")); + .roles(Set.of(Role.reader(id.tenant()))), + new File("tenant-roles.json")); // GET application role information is available to tenant administrators. tester.assertResponse(request("/user/v1/tenant/my-tenant/application/my-app") - .roles(Set.of(Role.administrator(id.tenant()))), - new File("application-roles.json")); + .roles(Set.of(Role.administrator(id.tenant()))), + new File("application-roles.json")); // POST a pem deploy key tester.assertResponse(request("/application/v4/tenant/my-tenant/application/my-app/key", POST) - .roles(Set.of(Role.developer(id.tenant()))) - .data("{\"key\":\"" + pemPublicKey + "\"}"), - new File("first-deploy-key.json")); + .roles(Set.of(Role.developer(id.tenant()))) + .data("{\"key\":\"" + pemPublicKey + "\"}"), + new File("first-deploy-key.json")); // POST a pem developer key tester.assertResponse(request("/application/v4/tenant/my-tenant/key", POST) - .principal("joe@dev") - .roles(Set.of(Role.developer(id.tenant()))) - .data("{\"key\":\"" + pemPublicKey + "\"}"), - new File("first-developer-key.json")); + .principal("joe@dev") + .roles(Set.of(Role.developer(id.tenant()))) + .data("{\"key\":\"" + pemPublicKey + "\"}"), + new File("first-developer-key.json")); // POST the same pem developer key for a different user is forbidden tester.assertResponse(request("/application/v4/tenant/my-tenant/key", POST) - .principal("operator@tenant") - .roles(Set.of(Role.developer(id.tenant()))) - .data("{\"key\":\"" + pemPublicKey + "\"}"), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Key "+ quotedPemPublicKey + " is already owned by joe@dev\"}", - 400); + .principal("operator@tenant") + .roles(Set.of(Role.developer(id.tenant()))) + .data("{\"key\":\"" + pemPublicKey + "\"}"), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Key " + quotedPemPublicKey + " is already owned by joe@dev\"}", + 400); // POST in a different pem developer key tester.assertResponse(request("/application/v4/tenant/my-tenant/key", POST) - .principal("developer@tenant") - .roles(Set.of(Role.developer(id.tenant()))) - .data("{\"key\":\"" + otherPemPublicKey + "\"}"), - new File("both-developer-keys.json")); + .principal("developer@tenant") + .roles(Set.of(Role.developer(id.tenant()))) + .data("{\"key\":\"" + otherPemPublicKey + "\"}"), + new File("both-developer-keys.json")); // GET tenant information with keys tester.assertResponse(request("/application/v4/tenant/my-tenant/") - .roles(Set.of(Role.reader(id.tenant()))), - new File("tenant-with-keys.json")); + .roles(Set.of(Role.reader(id.tenant()))), + new File("tenant-with-keys.json")); // DELETE a pem developer key tester.assertResponse(request("/application/v4/tenant/my-tenant/key", DELETE) - .roles(Set.of(Role.developer(id.tenant()))) - .data("{\"key\":\"" + pemPublicKey + "\"}"), - new File("second-developer-key.json")); + .roles(Set.of(Role.developer(id.tenant()))) + .data("{\"key\":\"" + pemPublicKey + "\"}"), + new File("second-developer-key.json")); // PUT in a new secret store for the tenant tester.assertResponse(request("/application/v4/tenant/my-tenant/secret-store/secret-foo", PUT) @@ -187,33 +187,33 @@ public class UserApiTest extends ControllerContainerCloudTest { // DELETE an application is available to developers. tester.assertResponse(request("/application/v4/tenant/my-tenant/application/my-app", DELETE) - .roles(Set.of(Role.developer(id.tenant()))), - "{\"message\":\"Deleted application my-tenant.my-app\"}"); + .roles(Set.of(Role.developer(id.tenant()))), + "{\"message\":\"Deleted application my-tenant.my-app\"}"); // DELETE a tenant role is available to tenant admins. // DELETE the developer role clears any developer key. tester.assertResponse(request("/user/v1/tenant/my-tenant", DELETE) - .roles(Set.of(Role.administrator(id.tenant()))) - .data("{\"user\":\"developer@tenant\",\"roles\":[\"developer\",\"reader\"]}"), - "{\"message\":\"user 'developer@tenant' is no longer a member of role 'developer' of 'my-tenant', role 'reader' of 'my-tenant'\"}"); + .roles(Set.of(Role.administrator(id.tenant()))) + .data("{\"user\":\"developer@tenant\",\"roles\":[\"developer\",\"reader\"]}"), + "{\"message\":\"user 'developer@tenant' is no longer a member of role 'developer' of 'my-tenant', role 'reader' of 'my-tenant'\"}"); // DELETE the last tenant owner is not allowed. tester.assertResponse(request("/user/v1/tenant/my-tenant", DELETE) - .roles(operator) - .data("{\"user\":\"administrator@tenant\",\"roleName\":\"administrator\"}"), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Can't remove the last administrator of a tenant.\"}", 400); + .roles(operator) + .data("{\"user\":\"administrator@tenant\",\"roleName\":\"administrator\"}"), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Can't remove the last administrator of a tenant.\"}", 400); // DELETE the tenant is not allowed tester.assertResponse(request("/application/v4/tenant/my-tenant", DELETE) - .roles(Set.of(Role.developer(id.tenant()))), - "{\n" + - " \"code\" : 403,\n" + - " \"message\" : \"Access denied\"\n" + - "}", 403); + .roles(Set.of(Role.developer(id.tenant()))), + "{\n" + + " \"code\" : 403,\n" + + " \"message\" : \"Access denied\"\n" + + "}", 403); } @Test - public void userMetadataTest() { + void userMetadataTest() { try (Flags.Replacer ignored = Flags.clearFlagsForTesting(PermanentFlags.MAX_TRIAL_TENANTS.id(), PermanentFlags.ENABLE_PUBLIC_SIGNUP_FLOW.id())) { ContainerTester tester = new ContainerTester(container, responseFiles); ((InMemoryFlagSource) tester.controller().flagSource()) @@ -262,7 +262,7 @@ public class UserApiTest extends ControllerContainerCloudTest { } @Test - public void maxTrialTenants() { + void maxTrialTenants() { try (Flags.Replacer ignored = Flags.clearFlagsForTesting(PermanentFlags.MAX_TRIAL_TENANTS.id(), PermanentFlags.ENABLE_PUBLIC_SIGNUP_FLOW.id())) { ContainerTester tester = new ContainerTester(container, responseFiles); ((InMemoryFlagSource) tester.controller().flagSource()) @@ -280,7 +280,7 @@ public class UserApiTest extends ControllerContainerCloudTest { } @Test - public void supportTenant() { + void supportTenant() { try (Flags.Replacer ignored = Flags.clearFlagsForTesting(PermanentFlags.MAX_TRIAL_TENANTS.id(), PermanentFlags.ENABLE_PUBLIC_SIGNUP_FLOW.id())) { ContainerTester tester = new ContainerTester(container, responseFiles); ((InMemoryFlagSource) tester.controller().flagSource()) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserFlagsSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserFlagsSerializerTest.java index 8625628b74e..ed7d02d0047 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserFlagsSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserFlagsSerializerTest.java @@ -14,7 +14,7 @@ import com.yahoo.vespa.flags.JsonNodeRawFlag; import com.yahoo.vespa.flags.json.Condition; import com.yahoo.vespa.flags.json.FlagData; import com.yahoo.vespa.flags.json.Rule; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -36,7 +36,7 @@ import static com.yahoo.vespa.flags.FetchVector.Dimension.TENANT_ID; public class UserFlagsSerializerTest { @Test - public void user_flag_test() throws IOException { + void user_flag_test() throws IOException { String email1 = "alice@domain.tld"; String email2 = "bob@domain.tld"; @@ -56,33 +56,33 @@ public class UserFlagsSerializerTest { rule("[\"value2\"]", condition(CONSOLE_USER_EMAIL, Condition.Type.WHITELIST, email2)), rule("[\"value1\",\"value3\"]", condition(APPLICATION_ID, Condition.Type.BLACKLIST, "tenant1:video:default", "tenant1:video:default", "tenant2:music:default"))), flagData("jackson-id", rule("{\"integer\":456,\"string\":\"xyz\"}", condition(CONSOLE_USER_EMAIL, Condition.Type.WHITELIST, email1), condition(TENANT_ID, Condition.Type.WHITELIST, "tenant1", "tenant3"))) - ).collect(Collectors.toMap(FlagData::id, fd -> fd)); + ).collect(Collectors.toMap(FlagData::id, fd -> fd)); // double-id is not here as it does not have CONSOLE_USER_EMAIL dimension assertUserFlags("{\"flags\":[" + - "{\"id\":\"int-id\",\"rules\":[{\"value\":456}]}," + // Default from DB - "{\"id\":\"jackson-id\",\"rules\":[{\"conditions\":[{\"type\":\"whitelist\",\"dimension\":\"tenant\"}],\"value\":{\"integer\":456,\"string\":\"xyz\"}},{\"value\":{\"integer\":123,\"string\":\"abc\"}}]}," + // Resolved for email - // Resolved for email, but conditions are empty since this user is not authorized for any tenants - "{\"id\":\"list-id\",\"rules\":[{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\"}],\"value\":[\"value1\"]},{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\"}],\"value\":[\"value1\",\"value3\"]},{\"value\":[\"a\"]}]}," + - "{\"id\":\"string-id\",\"rules\":[{\"value\":\"value1\"}]}]}", // resolved for email + "{\"id\":\"int-id\",\"rules\":[{\"value\":456}]}," + // Default from DB + "{\"id\":\"jackson-id\",\"rules\":[{\"conditions\":[{\"type\":\"whitelist\",\"dimension\":\"tenant\"}],\"value\":{\"integer\":456,\"string\":\"xyz\"}},{\"value\":{\"integer\":123,\"string\":\"abc\"}}]}," + // Resolved for email + // Resolved for email, but conditions are empty since this user is not authorized for any tenants + "{\"id\":\"list-id\",\"rules\":[{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\"}],\"value\":[\"value1\"]},{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\"}],\"value\":[\"value1\",\"value3\"]},{\"value\":[\"a\"]}]}," + + "{\"id\":\"string-id\",\"rules\":[{\"value\":\"value1\"}]}]}", // resolved for email flagData, Set.of(), false, email1); // Same as the first one, but user is authorized for tenant1 assertUserFlags("{\"flags\":[" + - "{\"id\":\"int-id\",\"rules\":[{\"value\":456}]}," + // Default from DB - "{\"id\":\"jackson-id\",\"rules\":[{\"conditions\":[{\"type\":\"whitelist\",\"dimension\":\"tenant\",\"values\":[\"tenant1\"]}],\"value\":{\"integer\":456,\"string\":\"xyz\"}},{\"value\":{\"integer\":123,\"string\":\"abc\"}}]}," + // Resolved for email - // Resolved for email, but conditions have filtered out tenant2 - "{\"id\":\"list-id\",\"rules\":[{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\",\"values\":[\"tenant1:video:default\",\"tenant1:video:default\"]}],\"value\":[\"value1\"]},{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\",\"values\":[\"tenant1:video:default\",\"tenant1:video:default\"]}],\"value\":[\"value1\",\"value3\"]},{\"value\":[\"a\"]}]}," + - "{\"id\":\"string-id\",\"rules\":[{\"value\":\"value1\"}]}]}", // resolved for email + "{\"id\":\"int-id\",\"rules\":[{\"value\":456}]}," + // Default from DB + "{\"id\":\"jackson-id\",\"rules\":[{\"conditions\":[{\"type\":\"whitelist\",\"dimension\":\"tenant\",\"values\":[\"tenant1\"]}],\"value\":{\"integer\":456,\"string\":\"xyz\"}},{\"value\":{\"integer\":123,\"string\":\"abc\"}}]}," + // Resolved for email + // Resolved for email, but conditions have filtered out tenant2 + "{\"id\":\"list-id\",\"rules\":[{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\",\"values\":[\"tenant1:video:default\",\"tenant1:video:default\"]}],\"value\":[\"value1\"]},{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\",\"values\":[\"tenant1:video:default\",\"tenant1:video:default\"]}],\"value\":[\"value1\",\"value3\"]},{\"value\":[\"a\"]}]}," + + "{\"id\":\"string-id\",\"rules\":[{\"value\":\"value1\"}]}]}", // resolved for email flagData, Set.of("tenant1"), false, email1); // As operator no conditions are filtered, but the email precondition is applied assertUserFlags("{\"flags\":[" + - "{\"id\":\"int-id\",\"rules\":[{\"value\":456}]}," + // Default from DB - "{\"id\":\"jackson-id\",\"rules\":[{\"value\":{\"integer\":123,\"string\":\"abc\"}}]}," + // Default from code, no DB values match - // Includes last value from DB which is not conditioned on email and the default from code - "{\"id\":\"list-id\",\"rules\":[{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\",\"values\":[\"tenant1:video:default\",\"tenant1:video:default\",\"tenant2:music:default\"]}],\"value\":[\"value1\",\"value3\"]},{\"value\":[\"a\"]}]}," + - "{\"id\":\"string-id\",\"rules\":[{\"value\":\"default value\"}]}]}", // Default from code + "{\"id\":\"int-id\",\"rules\":[{\"value\":456}]}," + // Default from DB + "{\"id\":\"jackson-id\",\"rules\":[{\"value\":{\"integer\":123,\"string\":\"abc\"}}]}," + // Default from code, no DB values match + // Includes last value from DB which is not conditioned on email and the default from code + "{\"id\":\"list-id\",\"rules\":[{\"conditions\":[{\"type\":\"blacklist\",\"dimension\":\"application\",\"values\":[\"tenant1:video:default\",\"tenant1:video:default\",\"tenant2:music:default\"]}],\"value\":[\"value1\",\"value3\"]},{\"value\":[\"a\"]}]}," + + "{\"id\":\"string-id\",\"rules\":[{\"value\":\"default value\"}]}]}", // Default from code flagData, Set.of(), true, "operator@domain.tld"); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiTest.java index fcf8402d23c..5d5e310503d 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiTest.java @@ -8,8 +8,8 @@ import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerCloudTest; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.File; import java.util.List; @@ -31,7 +31,7 @@ public class ZoneApiTest extends ControllerContainerCloudTest { private ContainerTester tester; - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responseFiles); tester.serviceRegistry().zoneRegistry() @@ -40,30 +40,30 @@ public class ZoneApiTest extends ControllerContainerCloudTest { } @Test - public void test_requests() { + void test_requests() { // GET /zone/v1 tester.assertResponse(request("/zone/v1") - .roles(everyone), - new File("root.json")); + .roles(everyone), + new File("root.json")); // GET /zone/v1/environment/prod tester.assertResponse(request("/zone/v1/environment/prod") - .roles(everyone), - new File("prod.json")); + .roles(everyone), + new File("prod.json")); // GET /zone/v1/environment/dev/default tester.assertResponse(request("/zone/v1/environment/dev/default") - .roles(everyone), - new File("default-for-region.json")); + .roles(everyone), + new File("default-for-region.json")); } @Test - public void test_invalid_requests() { + void test_invalid_requests() { // GET /zone/v1/environment/prod/default: No default region tester.assertResponse(request("/zone/v1/environment/prod/default") - .roles(everyone), - new File("no-default-region.json"), - 400); + .roles(everyone), + new File("no-default-region.json"), + 400); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java index fd39c13707b..81484f05d1e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java @@ -11,15 +11,15 @@ import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.proxy.ProxyRequest; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.File; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mpolden @@ -36,7 +36,7 @@ public class ZoneApiTest extends ControllerContainerTest { private ContainerTester tester; private ConfigServerProxyMock proxy; - @Before + @BeforeEach public void before() { tester = new ContainerTester(container, responseFiles); tester.serviceRegistry().zoneRegistry() @@ -46,53 +46,53 @@ public class ZoneApiTest extends ControllerContainerTest { } @Test - public void test_requests() { + void test_requests() { // GET /zone/v2 tester.assertResponse(authenticatedRequest("http://localhost:8080/zone/v2"), - new File("root.json")); + new File("root.json")); // GET /zone/v2/prod/us-north-1 tester.assertResponse(authenticatedRequest("http://localhost:8080/zone/v2/prod/us-north-1"), - "ok"); + "ok"); assertLastRequest(ZoneId.from("prod", "us-north-1"), 1, "GET"); // GET /zone/v2/nodes/v2/node/?recursive=true tester.assertResponse(authenticatedRequest("http://localhost:8080/zone/v2/prod/us-north-1/nodes/v2/node/?recursive=true"), - "ok"); + "ok"); assertLastRequest(ZoneId.from("prod", "us-north-1"), 1, "GET"); // POST /zone/v2/dev/us-north-2/nodes/v2/command/restart?hostname=node1 tester.assertResponse(operatorRequest("http://localhost:8080/zone/v2/dev/aws-us-north-2/nodes/v2/command/restart?hostname=node1", - "", Method.POST), - "ok"); + "", Method.POST), + "ok"); // PUT /zone/v2/prod/us-north-1/nodes/v2/state/dirty/node1 tester.assertResponse(operatorRequest("http://localhost:8080/zone/v2/prod/us-north-1/nodes/v2/state/dirty/node1", - "", Method.PUT), "ok"); + "", Method.PUT), "ok"); assertLastRequest(ZoneId.from("prod", "us-north-1"), 1, "PUT"); // DELETE /zone/v2/prod/us-north-1/nodes/v2/node/node1 tester.assertResponse(operatorRequest("http://localhost:8080/zone/v2/prod/us-north-1/nodes/v2/node/node1", - "", Method.DELETE), "ok"); + "", Method.DELETE), "ok"); assertLastRequest(ZoneId.from("prod", "us-north-1"), 1, "DELETE"); // PATCH /zone/v2/prod/us-north-1/nodes/v2/node/node1 tester.assertResponse(operatorRequest("http://localhost:8080/zone/v2/dev/aws-us-north-2/nodes/v2/node/node1", - "{\"currentRestartGeneration\": 1}", - Method.PATCH), "ok"); + "{\"currentRestartGeneration\": 1}", + Method.PATCH), "ok"); assertLastRequest(ZoneId.from("dev", "aws-us-north-2"), 1, "PATCH"); assertEquals("{\"currentRestartGeneration\": 1}", proxy.lastRequestBody().get()); - assertFalse("Actions are logged to audit log", tester.controller().auditLogger().readLog().entries().isEmpty()); + assertFalse(tester.controller().auditLogger().readLog().entries().isEmpty(), "Actions are logged to audit log"); } @Test - public void test_invalid_requests() { + void test_invalid_requests() { // POST /zone/v2/prod/us-north-34/nodes/v2 tester.assertResponse(operatorRequest("http://localhost:8080/zone/v2/prod/us-north-42/nodes/v2", - "", Method.POST), - new File("unknown-zone.json"), 400); + "", Method.POST), + new File("unknown-zone.json"), 400); assertFalse(proxy.lastReceived().isPresent()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java index c0fb9b3d8c7..c5d74e0b01d 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java @@ -32,7 +32,7 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.rotation.config.RotationsConfig; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -47,9 +47,9 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author mortent @@ -67,7 +67,7 @@ public class RoutingPoliciesTest { .build(); @Test - public void global_routing_policies() { + void global_routing_policies() { var tester = new RoutingPoliciesTester(); var context1 = tester.newDeploymentContext("tenant1", "app1", "default"); var context2 = tester.newDeploymentContext("tenant1", "app2", "default"); @@ -87,9 +87,9 @@ public class RoutingPoliciesTest { tester.assertTargets(context1.instanceId(), EndpointId.of("r0"), 0, zone1, zone2); tester.assertTargets(context1.instanceId(), EndpointId.of("r1"), 0, zone1); tester.assertTargets(context1.instanceId(), EndpointId.of("r2"), 1, zone1, zone2); - assertEquals("Routing policy count is equal to cluster count", - numberOfDeployments * clustersPerZone, - tester.policiesOf(context1.instance().id()).size()); + assertEquals(numberOfDeployments * clustersPerZone, + tester.policiesOf(context1.instance().id()).size(), + "Routing policy count is equal to cluster count"); // Applications gains a new deployment ApplicationPackage applicationPackage2 = applicationPackageBuilder() @@ -144,13 +144,13 @@ public class RoutingPoliciesTest { tester.assertTargets(context1.instanceId(), EndpointId.of("r2"), 0); var policies = tester.policiesOf(context1.instanceId()); assertEquals(clustersPerZone * numberOfDeployments, policies.size()); - assertTrue("Rotation membership is removed from all policies", - policies.asList().stream().allMatch(policy -> policy.instanceEndpoints().isEmpty())); - assertEquals("Rotations for " + context2.application() + " are not removed", 1, tester.aliasDataOf(endpoint4).size()); + assertTrue(policies.asList().stream().allMatch(policy -> policy.instanceEndpoints().isEmpty()), + "Rotation membership is removed from all policies"); + assertEquals(1, tester.aliasDataOf(endpoint4).size(), "Rotations for " + context2.application() + " are not removed"); } @Test - public void global_routing_policies_with_duplicate_region() { + void global_routing_policies_with_duplicate_region() { var tester = new RoutingPoliciesTester(); var context = tester.newDeploymentContext("tenant1", "app1", "default"); int clustersPerZone = 2; @@ -168,40 +168,40 @@ public class RoutingPoliciesTest { context.submit(applicationPackage).deferLoadBalancerProvisioningIn(Environment.prod).deploy(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone1, zone3, zone4); tester.assertTargets(context.instanceId(), EndpointId.of("r1"), 1, zone1, zone3, zone4); - assertEquals("Routing policy count is equal to cluster count", - numberOfDeployments * clustersPerZone, - tester.policiesOf(context.instance().id()).size()); + assertEquals(numberOfDeployments * clustersPerZone, + tester.policiesOf(context.instance().id()).size(), + "Routing policy count is equal to cluster count"); // A zone in shared region is set out tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone4), RoutingStatus.Value.out, - RoutingStatus.Agent.tenant); + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); // Weight of inactive zone is set to zero tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, ImmutableMap.of(zone1, 1L, - zone3, 1L, - zone4, 0L)); + zone3, 1L, + zone4, 0L)); // Other zone in shared region is set out. Entire record group for the region is removed as all zones in the // region are out (weight sum = 0) tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone3), RoutingStatus.Value.out, - RoutingStatus.Agent.tenant); + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, ImmutableMap.of(zone1, 1L)); // Everything is set back in tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone3), RoutingStatus.Value.in, - RoutingStatus.Agent.tenant); + RoutingStatus.Agent.tenant); tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone4), RoutingStatus.Value.in, - RoutingStatus.Agent.tenant); + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, ImmutableMap.of(zone1, 1L, - zone3, 1L, - zone4, 1L)); + zone3, 1L, + zone4, 1L)); } @Test - public void global_routing_policies_legacy_global_service_id() { + void global_routing_policies_legacy_global_service_id() { var tester = new RoutingPoliciesTester(); var context = tester.newDeploymentContext("tenant1", "app1", "default"); int clustersPerZone = 2; @@ -216,13 +216,13 @@ public class RoutingPoliciesTest { // Creates alias records context.submit(applicationPackage).deferLoadBalancerProvisioningIn(Environment.prod).deploy(); tester.assertTargets(context.instanceId(), EndpointId.defaultId(), 0, zone1, zone2); - assertEquals("Routing policy count is equal to cluster count", - numberOfDeployments * clustersPerZone, - tester.policiesOf(context.instance().id()).size()); + assertEquals(numberOfDeployments * clustersPerZone, + tester.policiesOf(context.instance().id()).size(), + "Routing policy count is equal to cluster count"); } @Test - public void zone_routing_policies() { + void zone_routing_policies() { zone_routing_policies(false); zone_routing_policies(true); } @@ -313,12 +313,12 @@ public class RoutingPoliciesTest { "c1.app1.tenant1.us-central-1.vespa.oath.cloud" ); assertEquals(expectedRecords, tester.recordNames()); - assertTrue("Removes stale routing policies " + context2.application(), tester.routingPolicies().read(context2.instanceId()).isEmpty()); - assertEquals("Keeps routing policies for " + context1.application(), 4, tester.routingPolicies().read(context1.instanceId()).size()); + assertTrue(tester.routingPolicies().read(context2.instanceId()).isEmpty(), "Removes stale routing policies " + context2.application()); + assertEquals(4, tester.routingPolicies().read(context1.instanceId()).size(), "Keeps routing policies for " + context1.application()); } @Test - public void zone_routing_policies_without_dns_update() { + void zone_routing_policies_without_dns_update() { var tester = new RoutingPoliciesTester(new DeploymentTester(), false); var context = tester.newDeploymentContext("tenant1", "app1", "default"); tester.provisionLoadBalancers(1, context.instanceId(), true, zone1, zone2); @@ -329,7 +329,7 @@ public class RoutingPoliciesTest { } @Test - public void global_routing_policies_in_rotationless_system() { + void global_routing_policies_in_rotationless_system() { var tester = new RoutingPoliciesTester(SystemName.Public); var context = tester.newDeploymentContext("tenant1", "app1", "default"); List<ZoneId> prodZones = tester.controllerTester().controller().zoneRegistry().zones().all().in(Environment.prod).ids(); @@ -345,13 +345,13 @@ public class RoutingPoliciesTest { context.submit(applicationPackage).deferLoadBalancerProvisioningIn(Environment.prod).deploy(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone1); - assertTrue("No rotations assigned", context.application().instances().values().stream() - .map(Instance::rotations) - .allMatch(List::isEmpty)); + assertTrue(context.application().instances().values().stream() + .map(Instance::rotations) + .allMatch(List::isEmpty), "No rotations assigned"); } @Test - public void global_routing_policies_in_public() { + void global_routing_policies_in_public() { var tester = new RoutingPoliciesTester(SystemName.Public); var context = tester.newDeploymentContext("tenant1", "app1", "default"); List<ZoneId> prodZones = tester.controllerTester().controller().zoneRegistry().zones().all().in(Environment.prod).ids(); @@ -367,19 +367,19 @@ public class RoutingPoliciesTest { context.submit(applicationPackage).deploy(); tester.assertTargets(context.instanceId(), EndpointId.defaultId(), - ClusterSpec.Id.from("default"), 0, - Map.of(zone1, 1L, zone2, 1L)); - assertEquals("Registers expected DNS names", - Set.of("app1.tenant1.aws-eu-west-1.w.vespa-app.cloud", - "app1.tenant1.aws-eu-west-1a.z.vespa-app.cloud", - "app1.tenant1.aws-us-east-1.w.vespa-app.cloud", - "app1.tenant1.aws-us-east-1c.z.vespa-app.cloud", - "app1.tenant1.g.vespa-app.cloud"), - tester.recordNames()); + ClusterSpec.Id.from("default"), 0, + Map.of(zone1, 1L, zone2, 1L)); + assertEquals(Set.of("app1.tenant1.aws-eu-west-1.w.vespa-app.cloud", + "app1.tenant1.aws-eu-west-1a.z.vespa-app.cloud", + "app1.tenant1.aws-us-east-1.w.vespa-app.cloud", + "app1.tenant1.aws-us-east-1c.z.vespa-app.cloud", + "app1.tenant1.g.vespa-app.cloud"), + tester.recordNames(), + "Registers expected DNS names"); } @Test - public void manual_deployment_creates_routing_policy() { + void manual_deployment_creates_routing_policy() { // Empty application package is valid in manually deployed environments var tester = new RoutingPoliciesTester(); var context = tester.newDeploymentContext("tenant1", "app1", "default"); @@ -387,12 +387,12 @@ public class RoutingPoliciesTest { var zone = ZoneId.from("dev", "us-east-1"); var zoneApi = ZoneApiMock.from(zone.environment(), zone.region()); tester.controllerTester().serviceRegistry().zoneRegistry() - .setZones(zoneApi) - .exclusiveRoutingIn(zoneApi); + .setZones(zoneApi) + .exclusiveRoutingIn(zoneApi); // Deploy to dev context.runJob(zone, emptyApplicationPackage); - assertEquals("DeploymentSpec is not persisted", DeploymentSpec.empty, context.application().deploymentSpec()); + assertEquals(DeploymentSpec.empty, context.application().deploymentSpec(), "DeploymentSpec is not persisted"); context.flushDnsUpdates(); // Routing policy is created and DNS is updated @@ -401,7 +401,7 @@ public class RoutingPoliciesTest { } @Test - public void manual_deployment_creates_routing_policy_with_non_empty_spec() { + void manual_deployment_creates_routing_policy_with_non_empty_spec() { // Initial deployment var tester = new RoutingPoliciesTester(); var context = tester.newDeploymentContext("tenant1", "app1", "default"); @@ -415,7 +415,7 @@ public class RoutingPoliciesTest { var devContext = tester.newDeploymentContext(context.application().id().instance("user")); devContext.runJob(zone, applicationPackage); - assertEquals("DeploymentSpec is persisted", applicationPackage.deploymentSpec(), context.application().deploymentSpec()); + assertEquals(applicationPackage.deploymentSpec(), context.application().deploymentSpec(), "DeploymentSpec is persisted"); context.flushDnsUpdates(); // Routing policy is created and DNS is updated @@ -424,7 +424,7 @@ public class RoutingPoliciesTest { } @Test - public void reprovisioning_load_balancer_preserves_cname_record() { + void reprovisioning_load_balancer_preserves_cname_record() { var tester = new RoutingPoliciesTester(); var context = tester.newDeploymentContext("tenant1", "app1", "default"); @@ -449,23 +449,24 @@ public class RoutingPoliciesTest { // Load balancer for the same application is provisioned again, but with a different hostname var newHostname = HostName.of("new-hostname"); var loadBalancer = new LoadBalancer("LB-0-Z-" + zone1.value(), - context.instanceId(), - ClusterSpec.Id.from("c0"), - Optional.of(newHostname), - LoadBalancer.State.active, - Optional.of("dns-zone-1")); + context.instanceId(), + ClusterSpec.Id.from("c0"), + Optional.of(newHostname), + LoadBalancer.State.active, + Optional.of("dns-zone-1")); tester.controllerTester().configServer().putLoadBalancers(zone1, List.of(loadBalancer)); // Application redeployment preserves DNS record context.submit(applicationPackage).deferLoadBalancerProvisioningIn(Environment.prod).deploy(); assertEquals(expectedRecords, tester.recordNames()); assertEquals(1, tester.policiesOf(context.instanceId()).size()); - assertEquals("CNAME points to current load blancer", newHostname.value() + ".", - tester.cnameDataOf(expectedRecords.iterator().next()).get(0)); + assertEquals(newHostname.value() + ".", + tester.cnameDataOf(expectedRecords.iterator().next()).get(0), + "CNAME points to current load blancer"); } @Test - public void set_global_endpoint_status() { + void set_global_endpoint_status() { var tester = new RoutingPoliciesTester(); var context = tester.newDeploymentContext("tenant1", "app1", "default"); @@ -486,7 +487,7 @@ public class RoutingPoliciesTest { // Global routing status is overridden in one zone var changedAt = tester.controllerTester().clock().instant(); tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), RoutingStatus.Value.out, - RoutingStatus.Agent.tenant); + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); // Inactive zone is removed from global DNS record @@ -548,7 +549,7 @@ public class RoutingPoliciesTest { } @Test - public void set_zone_global_endpoint_status() { + void set_zone_global_endpoint_status() { var tester = new RoutingPoliciesTester(); var context1 = tester.newDeploymentContext("tenant1", "app1", "default"); var context2 = tester.newDeploymentContext("tenant2", "app2", "default"); @@ -573,12 +574,12 @@ public class RoutingPoliciesTest { tester.assertTargets(context2.instanceId(), EndpointId.defaultId(), 0, zone1); for (var context : contexts) { var policies = tester.routingPolicies().read(context.instanceId()); - assertTrue("Global routing status for policy remains " + RoutingStatus.Value.in, - policies.asList().stream() - .map(RoutingPolicy::status) - .map(RoutingPolicy.Status::routingStatus) - .map(RoutingStatus::value) - .allMatch(status -> status == RoutingStatus.Value.in)); + assertTrue(policies.asList().stream() + .map(RoutingPolicy::status) + .map(RoutingPolicy.Status::routingStatus) + .map(RoutingStatus::value) + .allMatch(status -> status == RoutingStatus.Value.in), + "Global routing status for policy remains " + RoutingStatus.Value.in); } var changedAt = tester.controllerTester().clock().instant(); var zonePolicy = tester.controllerTester().controller().curator().readZoneRoutingPolicy(zone2); @@ -604,7 +605,7 @@ public class RoutingPoliciesTest { } @Test - public void non_production_deployment_is_not_registered_in_global_endpoint() { + void non_production_deployment_is_not_registered_in_global_endpoint() { var tester = new RoutingPoliciesTester(SystemName.Public); // Configure the system to use the same region for test, staging and prod @@ -634,7 +635,7 @@ public class RoutingPoliciesTest { } @Test - public void changing_global_routing_status_never_removes_all_members() { + void changing_global_routing_status_never_removes_all_members() { var tester = new RoutingPoliciesTester(); var context = tester.newDeploymentContext("tenant1", "app1", "default"); @@ -652,20 +653,20 @@ public class RoutingPoliciesTest { // Global routing status is overridden for one deployment tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), RoutingStatus.Value.out, - RoutingStatus.Agent.tenant); + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone2); // Setting other deployment out implicitly sets all deployments in. Weight is set to zero, but that has no // impact on routing decisions when the weight sum is zero tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone2), RoutingStatus.Value.out, - RoutingStatus.Agent.tenant); + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, ImmutableMap.of(zone1, 0L, zone2, 0L)); // One inactive deployment is put back in. Global DNS record now points to the only active deployment tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone1), RoutingStatus.Value.in, - RoutingStatus.Agent.tenant); + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); tester.assertTargets(context.instanceId(), EndpointId.of("r0"), 0, zone1); @@ -682,7 +683,7 @@ public class RoutingPoliciesTest { // Inactive deployment is set in tester.routingPolicies().setRoutingStatus(context.deploymentIdIn(zone2), RoutingStatus.Value.in, - RoutingStatus.Agent.tenant); + RoutingStatus.Agent.tenant); context.flushDnsUpdates(); for (var policy : tester.routingPolicies().read(context.instanceId())) { assertSame(RoutingStatus.Value.in, policy.status().routingStatus().value()); @@ -691,7 +692,7 @@ public class RoutingPoliciesTest { } @Test - public void application_endpoint_routing_policy() { + void application_endpoint_routing_policy() { RoutingPoliciesTester tester = new RoutingPoliciesTester(); TenantAndApplicationId application = TenantAndApplicationId.from("tenant1", "app1"); ApplicationId betaInstance = application.instance("beta"); @@ -704,11 +705,11 @@ public class RoutingPoliciesTest { .region(zone1.region()) .region(zone2.region()) .applicationEndpoint("a0", "c0", "us-west-1", - Map.of(betaInstance.instance(), 2, - mainInstance.instance(), 8)) + Map.of(betaInstance.instance(), 2, + mainInstance.instance(), 8)) .applicationEndpoint("a1", "c1", "us-central-1", - Map.of(betaInstance.instance(), 4, - mainInstance.instance(), 6)) + Map.of(betaInstance.instance(), 4, + mainInstance.instance(), 6)) .build(); for (var zone : List.of(zone1, zone2)) { tester.provisionLoadBalancers(2, betaInstance, zone); @@ -724,11 +725,11 @@ public class RoutingPoliciesTest { DeploymentId betaZone2 = betaContext.deploymentIdIn(zone2); DeploymentId mainZone2 = mainContext.deploymentIdIn(zone2); tester.assertTargets(application, EndpointId.of("a0"), ClusterSpec.Id.from("c0"), 0, - Map.of(betaZone1, 2, - mainZone1, 8)); + Map.of(betaZone1, 2, + mainZone1, 8)); tester.assertTargets(application, EndpointId.of("a1"), ClusterSpec.Id.from("c1"), 1, - Map.of(betaZone2, 4, - mainZone2, 6)); + Map.of(betaZone2, 4, + mainZone2, 6)); // Weights are updated applicationPackage = applicationPackageBuilder() @@ -736,19 +737,19 @@ public class RoutingPoliciesTest { .region(zone1.region()) .region(zone2.region()) .applicationEndpoint("a0", "c0", "us-west-1", - Map.of(betaInstance.instance(), 3, - mainInstance.instance(), 7)) + Map.of(betaInstance.instance(), 3, + mainInstance.instance(), 7)) .applicationEndpoint("a1", "c1", "us-central-1", - Map.of(betaInstance.instance(), 1, - mainInstance.instance(), 9)) + Map.of(betaInstance.instance(), 1, + mainInstance.instance(), 9)) .build(); betaContext.submit(applicationPackage).deploy(); tester.assertTargets(application, EndpointId.of("a0"), ClusterSpec.Id.from("c0"), 0, - Map.of(betaZone1, 3, - mainZone1, 7)); + Map.of(betaZone1, 3, + mainZone1, 7)); tester.assertTargets(application, EndpointId.of("a1"), ClusterSpec.Id.from("c1"), 1, - Map.of(betaZone2, 1, - mainZone2, 9)); + Map.of(betaZone2, 1, + mainZone2, 9)); // An endpoint is removed applicationPackage = applicationPackageBuilder() @@ -756,21 +757,21 @@ public class RoutingPoliciesTest { .region(zone1.region()) .region(zone2.region()) .applicationEndpoint("a0", "c0", "us-west-1", - Map.of(betaInstance.instance(), 1)) + Map.of(betaInstance.instance(), 1)) .build(); betaContext.submit(applicationPackage).deploy(); // Application endpoints now point to a single instance tester.assertTargets(application, EndpointId.of("a0"), ClusterSpec.Id.from("c0"), 0, - Map.of(betaZone1, 1)); - assertTrue("Endpoint removed", - tester.controllerTester().controller().routing() - .readDeclaredEndpointsOf(application) - .named(EndpointId.of("a1")).isEmpty()); + Map.of(betaZone1, 1)); + assertTrue(tester.controllerTester().controller().routing() + .readDeclaredEndpointsOf(application) + .named(EndpointId.of("a1")).isEmpty(), + "Endpoint removed"); } @Test - public void application_endpoint_routing_status() { + void application_endpoint_routing_status() { RoutingPoliciesTester tester = new RoutingPoliciesTester(); TenantAndApplicationId application = TenantAndApplicationId.from("tenant1", "app1"); ApplicationId betaInstance = application.instance("beta"); @@ -782,8 +783,8 @@ public class RoutingPoliciesTest { .instances("beta,main") .region(zone1.region()) .applicationEndpoint("a0", "c0", "us-west-1", - Map.of(betaInstance.instance(), 2, - mainInstance.instance(), 8)) + Map.of(betaInstance.instance(), 2, + mainInstance.instance(), 8)) .build(); tester.provisionLoadBalancers(1, betaInstance, zone1); tester.provisionLoadBalancers(1, mainInstance, zone1); @@ -795,35 +796,35 @@ public class RoutingPoliciesTest { DeploymentId betaZone1 = betaContext.deploymentIdIn(zone1); DeploymentId mainZone1 = mainContext.deploymentIdIn(zone1); tester.assertTargets(application, EndpointId.of("a0"), ClusterSpec.Id.from("c0"), 0, - Map.of(betaZone1, 2, - mainZone1, 8)); + Map.of(betaZone1, 2, + mainZone1, 8)); // Changing routing status removes deployment from DNS tester.routingPolicies().setRoutingStatus(mainZone1, RoutingStatus.Value.out, RoutingStatus.Agent.tenant); betaContext.flushDnsUpdates(); tester.assertTargets(application, EndpointId.of("a0"), ClusterSpec.Id.from("c0"), 0, - Map.of(betaZone1, 2)); + Map.of(betaZone1, 2)); // Changing routing status for remaining deployment adds back all deployments, because removing all deployments // puts all IN tester.routingPolicies().setRoutingStatus(betaZone1, RoutingStatus.Value.out, RoutingStatus.Agent.tenant); betaContext.flushDnsUpdates(); tester.assertTargets(application, EndpointId.of("a0"), ClusterSpec.Id.from("c0"), 0, - Map.of(betaZone1, 2, - mainZone1, 8)); + Map.of(betaZone1, 2, + mainZone1, 8)); // Activating main deployment allows us to deactivate the beta deployment tester.routingPolicies().setRoutingStatus(mainZone1, RoutingStatus.Value.in, RoutingStatus.Agent.tenant); betaContext.flushDnsUpdates(); tester.assertTargets(application, EndpointId.of("a0"), ClusterSpec.Id.from("c0"), 0, - Map.of(mainZone1, 8)); + Map.of(mainZone1, 8)); // Activate all deployments again tester.routingPolicies().setRoutingStatus(betaZone1, RoutingStatus.Value.in, RoutingStatus.Agent.tenant); betaContext.flushDnsUpdates(); tester.assertTargets(application, EndpointId.of("a0"), ClusterSpec.Id.from("c0"), 0, - Map.of(betaZone1, 2, - mainZone1, 8)); + Map.of(betaZone1, 2, + mainZone1, 8)); } /** Returns an application package builder that satisfies requirements for a directly routed endpoint */ @@ -951,20 +952,21 @@ public class RoutingPoliciesTest { .named(endpointId) .targets(deployment) .cluster(cluster); - assertEquals("Expected a single endpoint with ID '" + endpointId + "'", 1, - applicationEndpoints.size()); + assertEquals(1, + applicationEndpoints.size(), + "Expected a single endpoint with ID '" + endpointId + "'"); String dnsName = applicationEndpoints.asList().get(0).dnsName(); deploymentsByDnsName.computeIfAbsent(dnsName, (k) -> new ArrayList<>()) .add(deployment); } - assertEquals("Found " + endpointId + " for " + application, 1, deploymentsByDnsName.size()); + assertEquals(1, deploymentsByDnsName.size(), "Found " + endpointId + " for " + application); deploymentsByDnsName.forEach((dnsName, deployments) -> { Set<String> weightedTargets = deployments.stream() .map(d -> "weighted/lb-" + loadBalancerId + "--" + d.applicationId().toFullString() + "--" + d.zoneId().value() + "/dns-zone-1/" + d.zoneId().value() + "/" + deploymentWeights.get(d)) .collect(Collectors.toSet()); - assertEquals(dnsName + " has expected targets", weightedTargets, aliasDataOf(dnsName)); + assertEquals(weightedTargets, aliasDataOf(dnsName), dnsName + " has expected targets"); }); } @@ -988,9 +990,9 @@ public class RoutingPoliciesTest { instance.toFullString() + "--" + z.value() + "/dns-zone-1/" + z.value() + "/" + zoneWeights.get(z)) .collect(Collectors.toSet()); - assertEquals("Region endpoint " + regionEndpoint + " points to load balancer", - weightedTargets, - aliasDataOf(regionEndpoint)); + assertEquals(weightedTargets, + aliasDataOf(regionEndpoint), + "Region endpoint " + regionEndpoint + " points to load balancer"); ZoneId zone = zonesInRegion.get(0); String latencyTarget = "latency/" + regionEndpoint + "/dns-zone-1/" + zone.value(); latencyTargets.add(latencyTarget); @@ -1002,8 +1004,7 @@ public class RoutingPoliciesTest { .primary() .map(Endpoint::dnsName) .orElse("<none>"); - assertEquals("Global endpoint " + globalEndpoint + " points to expected latency targets", - latencyTargets, Set.copyOf(aliasDataOf(globalEndpoint))); + assertEquals(latencyTargets, Set.copyOf(aliasDataOf(globalEndpoint)), "Global endpoint " + globalEndpoint + " points to expected latency targets"); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/rotation/RotationRepositoryTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/rotation/RotationRepositoryTest.java index 277c8e1ef85..7477b94e3f4 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/rotation/RotationRepositoryTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/rotation/RotationRepositoryTest.java @@ -13,7 +13,7 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.rotation.config.RotationsConfig; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.net.URI; import java.util.List; @@ -21,8 +21,8 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Oyvind Gronnesby @@ -53,21 +53,21 @@ public class RotationRepositoryTest { private final DeploymentContext application = tester.newDeploymentContext("tenant1", "app1", "default"); @Test - public void assigns_and_reuses_rotation() { + void assigns_and_reuses_rotation() { // Deploying assigns a rotation application.submit(applicationPackage).deploy(); Rotation expected = new Rotation(new RotationId("foo-1"), "foo-1.com"); assertEquals(List.of(expected.id()), rotationIds(application.instance().rotations())); assertEquals(URI.create("https://app1.tenant1.global.vespa.oath.cloud/"), - tester.controller().routing().readDeclaredEndpointsOf(application.instanceId()).direct().first().get().url()); + tester.controller().routing().readDeclaredEndpointsOf(application.instanceId()).direct().first().get().url()); try (RotationLock lock = repository.lock()) { List<AssignedRotation> rotations = repository.getOrAssignRotations(application.application().deploymentSpec(), - application.instance(), - lock); + application.instance(), + lock); assertSingleRotation(expected, rotations, repository); assertEquals(Set.of(RegionName.from("us-west-1"), RegionName.from("us-east-3")), - application.instance().rotations().get(0).regions()); + application.instance().rotations().get(0).regions()); } // Submitting once more assigns same rotation @@ -83,12 +83,12 @@ public class RotationRepositoryTest { .build(); application.submit(applicationPackage).deploy(); assertEquals(Set.of(RegionName.from("us-west-1"), RegionName.from("us-east-3"), - RegionName.from("us-central-1")), - application.instance().rotations().get(0).regions()); + RegionName.from("us-central-1")), + application.instance().rotations().get(0).regions()); } - + @Test - public void strips_whitespace_in_rotation_fqdn() { + void strips_whitespace_in_rotation_fqdn() { var tester = new DeploymentTester(new ControllerTester(rotationsConfigWhitespaces, SystemName.main)); RotationRepository repository = tester.controller().routing().rotations(); var application2 = tester.newDeploymentContext("tenant1", "app2", "default"); @@ -103,7 +103,7 @@ public class RotationRepositoryTest { } @Test - public void out_of_rotations() { + void out_of_rotations() { // Assigns 1 rotation application.submit(applicationPackage).deploy(); @@ -114,11 +114,11 @@ public class RotationRepositoryTest { // We're now out of rotations and next deployment fails var application3 = tester.newDeploymentContext("tenant3", "app3", "default"); application3.submit(applicationPackage) - .runJobExpectingFailure(DeploymentContext.systemTest, Optional.of("out of rotations")); + .runJobExpectingFailure(DeploymentContext.systemTest, Optional.of("out of rotations")); } @Test - public void too_few_zones() { + void too_few_zones() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .globalServiceId("foo") .region("us-east-3") @@ -127,7 +127,7 @@ public class RotationRepositoryTest { } @Test - public void no_rotation_assigned_for_application_without_service_id() { + void no_rotation_assigned_for_application_without_service_id() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .region("us-east-3") .region("us-west-1") @@ -137,7 +137,7 @@ public class RotationRepositoryTest { } @Test - public void prefixes_system_when_not_main() { + void prefixes_system_when_not_main() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .globalServiceId("foo") .region("cd-us-east-1") @@ -150,18 +150,18 @@ public class RotationRepositoryTest { ZoneApiMock.fromId("prod.cd-us-west-1")); DeploymentTester tester = new DeploymentTester(new ControllerTester(rotationsConfig, SystemName.cd)); tester.controllerTester().zoneRegistry() - .setZones(zones) - .setRoutingMethod(zones, RoutingMethod.sharedLayer4); + .setZones(zones) + .setRoutingMethod(zones, RoutingMethod.sharedLayer4); tester.configServer().bootstrap(tester.controllerTester().zoneRegistry().zones().all().ids(), SystemApplication.notController()); var application2 = tester.newDeploymentContext("tenant2", "app2", "default"); application2.submit(applicationPackage).deploy(); assertEquals(List.of(new RotationId("foo-1")), rotationIds(application2.instance().rotations())); assertEquals("https://cd.app2.tenant2.global.vespa.oath.cloud/", - tester.controller().routing().readDeclaredEndpointsOf(application2.instanceId()).primary().get().url().toString()); + tester.controller().routing().readDeclaredEndpointsOf(application2.instanceId()).primary().get().url().toString()); } @Test - public void multiple_instances_with_similar_global_service_id() { + void multiple_instances_with_similar_global_service_id() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .instances("instance1,instance2") .region("us-central-1") @@ -169,19 +169,19 @@ public class RotationRepositoryTest { .globalServiceId("global") .build(); var instance1 = tester.newDeploymentContext("tenant1", "application1", "instance1") - .submit(applicationPackage) - .deploy(); + .submit(applicationPackage) + .deploy(); var instance2 = tester.newDeploymentContext("tenant1", "application1", "instance2"); assertEquals(List.of(new RotationId("foo-1")), rotationIds(instance1.instance().rotations())); assertEquals(List.of(new RotationId("foo-2")), rotationIds(instance2.instance().rotations())); assertEquals(URI.create("https://instance1.application1.tenant1.global.vespa.oath.cloud/"), - tester.controller().routing().readDeclaredEndpointsOf(instance1.instanceId()).direct().first().get().url()); + tester.controller().routing().readDeclaredEndpointsOf(instance1.instanceId()).direct().first().get().url()); assertEquals(URI.create("https://instance2.application1.tenant1.global.vespa.oath.cloud/"), - tester.controller().routing().readDeclaredEndpointsOf(instance2.instanceId()).direct().first().get().url()); + tester.controller().routing().readDeclaredEndpointsOf(instance2.instanceId()).direct().first().get().url()); } @Test - public void multiple_instances_with_similar_endpoints() { + void multiple_instances_with_similar_endpoints() { ApplicationPackage applicationPackage = new ApplicationPackageBuilder() .instances("instance1,instance2") .region("us-central-1") @@ -189,17 +189,17 @@ public class RotationRepositoryTest { .endpoint("default", "foo", "us-central-1", "us-west-1") .build(); var instance1 = tester.newDeploymentContext("tenant1", "application1", "instance1") - .submit(applicationPackage) - .deploy(); + .submit(applicationPackage) + .deploy(); var instance2 = tester.newDeploymentContext("tenant1", "application1", "instance2"); assertEquals(List.of(new RotationId("foo-1")), rotationIds(instance1.instance().rotations())); assertEquals(List.of(new RotationId("foo-2")), rotationIds(instance2.instance().rotations())); assertEquals(URI.create("https://instance1.application1.tenant1.global.vespa.oath.cloud/"), - tester.controller().routing().readDeclaredEndpointsOf(instance1.instanceId()).direct().first().get().url()); + tester.controller().routing().readDeclaredEndpointsOf(instance1.instanceId()).direct().first().get().url()); assertEquals(URI.create("https://instance2.application1.tenant1.global.vespa.oath.cloud/"), - tester.controller().routing().readDeclaredEndpointsOf(instance2.instanceId()).direct().first().get().url()); + tester.controller().routing().readDeclaredEndpointsOf(instance2.instanceId()).direct().first().get().url()); } private void assertSingleRotation(Rotation expected, List<AssignedRotation> assignedRotations, RotationRepository repository) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/tls/SecureContainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/tls/SecureContainerTest.java index de268f34093..05a0aedb18b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/tls/SecureContainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/tls/SecureContainerTest.java @@ -9,19 +9,19 @@ import com.yahoo.component.ComponentId; import com.yahoo.security.KeyStoreBuilder; import com.yahoo.security.KeyStoreType; import com.yahoo.security.KeyStoreUtils; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Path; import java.security.KeyStore; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author mpolden @@ -30,28 +30,28 @@ public class SecureContainerTest { private JDisc container; - @Rule - public TemporaryFolder folder = new TemporaryFolder(); + @TempDir + public File folder; - @Before + @BeforeEach public void startContainer() { container = JDisc.fromServicesXml(servicesXml(writeKeyStore()), Networking.enable); } - @After + @AfterEach public void stopContainer() { container.close(); } @Test - public void test_https_request() { - assertNotNull("SslContextFactoryProvider is created", sslContextFactoryProvider()); + void test_https_request() { + assertNotNull(sslContextFactoryProvider(), "SslContextFactoryProvider is created"); assertResponse(Request.Method.GET, "/", 200); } private void assertResponse(Request.Method method, String path, int expectedStatusCode) { Response response = container.handleRequest(new Request("https://localhost:9999" + path, new byte[0], method)); - assertEquals("Status code", expectedStatusCode, response.getStatus()); + assertEquals(expectedStatusCode, response.getStatus(), "Status code"); } private ControllerSslContextFactoryProvider sslContextFactoryProvider() { @@ -83,7 +83,7 @@ public class SecureContainerTest { Keys.keyPair.getPrivate(), new char[0], Keys.certificate) .build(); try { - Path path = folder.newFile().toPath(); + Path path = File.createTempFile("junit", null, folder).toPath(); KeyStoreUtils.writeKeyStoreToFile(keyStore, path); return path; } catch (IOException e) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/MavenRepositoryClientTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/MavenRepositoryClientTest.java index 25dd72ae622..33b1792accb 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/MavenRepositoryClientTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/MavenRepositoryClientTest.java @@ -2,11 +2,11 @@ package com.yahoo.vespa.hosted.controller.versions; import com.yahoo.vespa.hosted.controller.api.integration.maven.ArtifactId; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.net.URI; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author jonmv @@ -14,10 +14,10 @@ import static org.junit.Assert.assertEquals; public class MavenRepositoryClientTest { @Test - public void testUri() { + void testUri() { assertEquals(URI.create("https://domain:123/base/group/id/artifact-id/maven-metadata.xml"), - MavenRepositoryClient.withArtifactPath(URI.create("https://domain:123/base/"), - new ArtifactId("group.id", "artifact-id"))); + MavenRepositoryClient.withArtifactPath(URI.create("https://domain:123/base/"), + new ArtifactId("group.id", "artifact-id"))); } } 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 7b045e508a9..18776be2dce 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 @@ -22,7 +22,7 @@ import com.yahoo.vespa.hosted.controller.deployment.Run; import com.yahoo.vespa.hosted.controller.persistence.CuratorDb; import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb; import com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Duration; import java.time.Instant; @@ -37,11 +37,11 @@ import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.pro import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.stagingTest; import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.systemTest; import static java.util.stream.Collectors.toSet; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test computing of version status @@ -100,8 +100,8 @@ public class VersionStatusTest { writeControllerVersion(controller3, Version.fromString("6.2"), db); VersionStatus versionStatus = VersionStatus.compute(tester.controller()); - assertEquals("Controller version is oldest version", Version.fromString("6.1"), - versionStatus.controllerVersion().get().versionNumber()); + assertEquals(Version.fromString("6.1"), + versionStatus.controllerVersion().get().versionNumber(), "Controller version is oldest version"); // Last controller upgrades writeControllerVersion(controller2, Version.fromString("6.2"), db); @@ -162,7 +162,7 @@ public class VersionStatusTest { tester.triggerJobs(); tester.controllerTester().computeVersionStatus(); List<VespaVersion> versions = tester.controller().readVersionStatus().versions(); - assertEquals("The two versions above exist", 2, versions.size()); + assertEquals(2, versions.size(), "The two versions above exist"); VespaVersion v1 = versions.get(0); assertEquals(version1, v1.versionNumber()); @@ -178,9 +178,9 @@ public class VersionStatusTest { context2.instanceId(), List.of(productionUsEast3), context3.instanceId(), List.of(productionUsWest1, productionUsEast3)), statistics1.productionSuccesses()); - assertEquals("No applications have active deployment jobs on version1.", + assertEquals( List.of(), - statistics1.runningUpgrade()); + statistics1.runningUpgrade(), "No applications have active deployment jobs on version1."); VespaVersion v2 = versions.get(1); assertEquals(version2, v2.versionNumber()); @@ -203,13 +203,13 @@ public class VersionStatusTest { } private static void assertJobsRun(String assertion, Map<ApplicationId, List<JobType>> jobs, List<Run> runs) { - assertEquals(assertion, - jobs.entrySet().stream() + assertEquals(jobs.entrySet().stream() .flatMap(entry -> entry.getValue().stream().map(type -> new JobId(entry.getKey(), type))) .collect(toSet()), runs.stream() .map(run -> run.id().job()) - .collect(toSet())); + .collect(toSet()), + assertion); } @Test @@ -273,8 +273,8 @@ public class VersionStatusTest { // Application without deployment var ignored0 = tester.newDeploymentContext("tenant1", "ignored0", "default"); - assertEquals("All applications running on this version: High", - Confidence.high, confidence(tester.controller(), version0)); + assertEquals( + Confidence.high, confidence(tester.controller(), version0), "All applications running on this version: High"); // New version is released Version version1 = new Version("6.3"); @@ -288,25 +288,25 @@ public class VersionStatusTest { .runJob(stagingTest) .failDeployment(productionUsWest1); tester.controllerTester().computeVersionStatus(); - assertEquals("One canary failed: Broken", - Confidence.broken, confidence(tester.controller(), version1)); + assertEquals( + Confidence.broken, confidence(tester.controller(), version1), "One canary failed: Broken"); // New version is released Version version2 = new Version("6.4"); tester.controllerTester().upgradeSystem(version2); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Confidence defaults to low for version with no applications", - Confidence.low, confidence(tester.controller(), version2)); + assertEquals( + Confidence.low, confidence(tester.controller(), version2), "Confidence defaults to low for version with no applications"); // All canaries upgrade successfully canary0.deployPlatform(version2); canary1.deployPlatform(version2); - assertEquals("Confidence for remains unchanged for version1: Broken", - Confidence.broken, confidence(tester.controller(), version1)); - assertEquals("Nothing has failed but not all canaries have upgraded: Low", - Confidence.low, confidence(tester.controller(), version2)); + assertEquals( + Confidence.broken, confidence(tester.controller(), version1), "Confidence for remains unchanged for version1: Broken"); + assertEquals( + Confidence.low, confidence(tester.controller(), version2), "Nothing has failed but not all canaries have upgraded: Low"); // Remaining canary upgrades to version2 which raises confidence to normal and more apps upgrade canary2.triggerJobs().jobAborted(systemTest).jobAborted(stagingTest); @@ -315,8 +315,8 @@ public class VersionStatusTest { tester.controllerTester().computeVersionStatus(); tester.upgrader().maintain(); tester.triggerJobs(); - assertEquals("Canaries have upgraded: Normal", - Confidence.normal, confidence(tester.controller(), version2)); + assertEquals( + Confidence.normal, confidence(tester.controller(), version2), "Canaries have upgraded: Normal"); default0.deployPlatform(version2); default1.deployPlatform(version2); default2.deployPlatform(version2); @@ -330,23 +330,23 @@ public class VersionStatusTest { // Remember confidence across restart tester.controllerTester().createNewController(); - assertEquals("Confidence remains unchanged for version0: High", - Confidence.high, confidence(tester.controller(), version0)); - assertEquals("All canaries deployed + < 90% of defaults: Normal", - Confidence.normal, confidence(tester.controller(), version2)); - assertTrue("Status for version without applications is removed", - tester.controller().readVersionStatus().versions().stream() - .noneMatch(vespaVersion -> vespaVersion.versionNumber().equals(version1))); + assertEquals( + Confidence.high, confidence(tester.controller(), version0), "Confidence remains unchanged for version0: High"); + assertEquals( + Confidence.normal, confidence(tester.controller(), version2), "All canaries deployed + < 90% of defaults: Normal"); + assertTrue(tester.controller().readVersionStatus().versions().stream() + .noneMatch(vespaVersion -> vespaVersion.versionNumber().equals(version1)), + "Status for version without applications is removed"); // Another default application upgrades, raising confidence to high default8.deployPlatform(version2); default9.deployPlatform(version2); tester.controllerTester().computeVersionStatus(); - assertEquals("Confidence remains unchanged for version0: High", - Confidence.high, confidence(tester.controller(), version0)); - assertEquals("90% of defaults deployed successfully: High", - VespaVersion.Confidence.high, confidence(tester.controller(), version2)); + assertEquals( + Confidence.high, confidence(tester.controller(), version0), "Confidence remains unchanged for version0: High"); + assertEquals( + VespaVersion.Confidence.high, confidence(tester.controller(), version2), "90% of defaults deployed successfully: High"); // A new version is released, all canaries upgrade successfully, but enough "default" apps fail to mark version // as broken @@ -366,12 +366,12 @@ public class VersionStatusTest { default3.failDeployment(stagingTest); tester.controllerTester().computeVersionStatus(); - assertEquals("Confidence remains unchanged for version0: High", - Confidence.high, confidence(tester.controller(), version0)); - assertEquals("Confidence remains unchanged for version2: High", - Confidence.high, confidence(tester.controller(), version2)); - assertEquals("40% of defaults failed: Broken", - VespaVersion.Confidence.broken, confidence(tester.controller(), version3)); + assertEquals( + Confidence.high, confidence(tester.controller(), version0), "Confidence remains unchanged for version0: High"); + assertEquals( + Confidence.high, confidence(tester.controller(), version2), "Confidence remains unchanged for version2: High"); + assertEquals( + VespaVersion.Confidence.broken, confidence(tester.controller(), version3), "40% of defaults failed: Broken"); // Test version order List<VespaVersion> versions = tester.controller().readVersionStatus().versions(); @@ -417,8 +417,8 @@ public class VersionStatusTest { .submit(appPackage) .deploy(); - assertEquals("All applications running on this version: High", - Confidence.high, confidence(tester.controller(), version0)); + assertEquals( + Confidence.high, confidence(tester.controller(), version0), "All applications running on this version: High"); // New version is released Version version1 = new Version("6.3"); @@ -430,59 +430,61 @@ public class VersionStatusTest { canary0.failDeployment(systemTest); canary0.abortJob(stagingTest); tester.controllerTester().computeVersionStatus(); - assertEquals("One canary failed: Broken", - Confidence.broken, confidence(tester.controller(), version1)); + assertEquals( + Confidence.broken, confidence(tester.controller(), version1), "One canary failed: Broken"); // New version is released Version version2 = new Version("6.4"); tester.controllerTester().upgradeSystem(version2); tester.upgrader().maintain(); - assertEquals("Confidence remains unchanged for version1 until app overrides old tests: Broken", - Confidence.broken, confidence(tester.controller(), version1)); - assertEquals("Confidence defaults to low for version with no applications", - Confidence.low, confidence(tester.controller(), version2)); + assertEquals( + Confidence.broken, confidence(tester.controller(), version1), "Confidence remains unchanged for version1 until app overrides old tests: Broken"); + assertEquals( + Confidence.low, confidence(tester.controller(), version2), "Confidence defaults to low for version with no applications"); assertEquals(version2, canary0.instance().change().platform().orElseThrow()); canary0.failDeployment(systemTest); canary0.abortJob(stagingTest); tester.controllerTester().computeVersionStatus(); - assertFalse("Previous version should be forgotten, as canary only had test jobs run on it", - tester.controller().readVersionStatus().versions().stream().anyMatch(version -> version.versionNumber().equals(version1))); + assertFalse( + tester.controller().readVersionStatus().versions().stream().anyMatch(version -> version.versionNumber().equals(version1)), + "Previous version should be forgotten, as canary only had test jobs run on it"); // App succeeds with tests, but fails production deployment canary0.runJob(systemTest) .runJob(stagingTest) .failDeployment(productionUsWest1); - assertEquals("One canary failed: Broken", - Confidence.broken, confidence(tester.controller(), version2)); + assertEquals( + Confidence.broken, confidence(tester.controller(), version2), "One canary failed: Broken"); // A new version is released, and the app again fails production deployment. Version version3 = new Version("6.5"); tester.controllerTester().upgradeSystem(version3); tester.upgrader().maintain(); - assertEquals("Confidence remains unchanged for version2: Broken", - Confidence.broken, confidence(tester.controller(), version2)); - assertEquals("Confidence defaults to low for version with no applications", - Confidence.low, confidence(tester.controller(), version3)); + assertEquals( + Confidence.broken, confidence(tester.controller(), version2), "Confidence remains unchanged for version2: Broken"); + assertEquals( + Confidence.low, confidence(tester.controller(), version3), "Confidence defaults to low for version with no applications"); assertEquals(version3, canary0.instance().change().platform().orElseThrow()); canary0.runJob(systemTest) .runJob(stagingTest) .failDeployment(productionUsWest1); tester.controllerTester().computeVersionStatus(); - assertEquals("Confidence remains unchanged for version2: Broken", - Confidence.broken, confidence(tester.controller(), version2)); - assertEquals("Canary broken, so confidence for version3: Broken", - Confidence.broken, confidence(tester.controller(), version3)); + assertEquals( + Confidence.broken, confidence(tester.controller(), version2), "Confidence remains unchanged for version2: Broken"); + assertEquals( + Confidence.broken, confidence(tester.controller(), version3), "Canary broken, so confidence for version3: Broken"); // App succeeds production deployment, clearing failure on version2 canary0.runJob(productionUsWest1); tester.controllerTester().computeVersionStatus(); - assertFalse("Previous version should be forgotten, as canary only had test jobs run on it", - tester.controller().readVersionStatus().versions().stream().anyMatch(version -> version.versionNumber().equals(version2))); - assertEquals("Canary OK, but not done upgrading, so confidence for version3: Low", - Confidence.low, confidence(tester.controller(), version3)); + assertFalse( + tester.controller().readVersionStatus().versions().stream().anyMatch(version -> version.versionNumber().equals(version2)), + "Previous version should be forgotten, as canary only had test jobs run on it"); + assertEquals( + Confidence.low, confidence(tester.controller(), version3), "Canary OK, but not done upgrading, so confidence for version3: Low"); } @Test @@ -512,8 +514,9 @@ public class VersionStatusTest { assertEquals(Confidence.high, confidence(tester.controller(), version1)); // Stale override was removed - assertFalse("Stale override removed", tester.controller().curator().readConfidenceOverrides() - .containsKey(version0)); + assertFalse( tester.controller().curator().readConfidenceOverrides() + .containsKey(version0), + "Stale override removed"); } @Test @@ -692,11 +695,11 @@ public class VersionStatusTest { private void assertOnVersion(Version version, ApplicationId instance, DeploymentTester tester) { var vespaVersion = tester.controller().readVersionStatus().version(version); - assertNotNull("Statistics for version " + version + " exist", vespaVersion); + assertNotNull(vespaVersion, "Statistics for version " + version + " exist"); var statistics = DeploymentStatistics.compute(List.of(version), tester.deploymentStatuses()).get(0); - assertTrue("Application is on version " + version, + assertTrue( Stream.of(statistics.productionSuccesses(), statistics.failingUpgrades(), statistics.runningUpgrade()) - .anyMatch(runs -> runs.stream().anyMatch(run -> run.id().application().equals(instance)))); + .anyMatch(runs -> runs.stream().anyMatch(run -> run.id().application().equals(instance))), "Application is on version " + version); } private static void writeControllerVersion(HostName hostname, Version version, CuratorDb db) { |