diff options
Diffstat (limited to 'config-model/src/test/java/com/yahoo/vespa')
25 files changed, 90 insertions, 130 deletions
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AccessControlFilterExcludeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AccessControlFilterExcludeValidatorTest.java index 4e88753b732..25053c536da 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AccessControlFilterExcludeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AccessControlFilterExcludeValidatorTest.java @@ -25,7 +25,6 @@ import java.io.IOException; import java.util.List; import java.util.Set; -import static com.yahoo.vespa.model.application.validation.ValidationTester.expect; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -57,8 +56,9 @@ public class AccessControlFilterExcludeValidatorTest { MapConfigModelRegistry.createFromList(new ModelBuilderAddingAccessControlFilter()), deployState); - expect(new AccessControlFilterExcludeValidator(), model, deployState, - "Application cluster container-cluster-with-access-control excludes paths from access control, this is not allowed and should be removed."); + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> new AccessControlFilterExcludeValidator().validate(model, deployState)); + String expectedMessage = "Application cluster container-cluster-with-access-control excludes paths from access control, this is not allowed and should be removed."; + assertEquals(expectedMessage, exception.getMessage()); } @Test @@ -69,8 +69,9 @@ public class AccessControlFilterExcludeValidatorTest { MapConfigModelRegistry.createFromList(new ModelBuilderAddingAccessControlFilter()), deployState); - ValidationTester.validate(new AccessControlFilterExcludeValidator(), model, deployState); - assertTrue(logOutput.toString().contains("Application cluster container-cluster-with-access-control excludes paths from access control, this is not allowed and should be removed.")); + new AccessControlFilterExcludeValidator().validate(model, deployState); + String expectedMessage = "Application cluster container-cluster-with-access-control excludes paths from access control, this is not allowed and should be removed."; + assertTrue(logOutput.toString().contains(expectedMessage)); } @Test @@ -79,7 +80,7 @@ public class AccessControlFilterExcludeValidatorTest { VespaModel model = new VespaModel( MapConfigModelRegistry.createFromList(new ModelBuilderAddingAccessControlFilter()), deployState); - ValidationTester.validate(new AccessControlFilterExcludeValidator(), model, deployState); + new AccessControlFilterExcludeValidator().validate(model, deployState); } @Test @@ -89,7 +90,7 @@ public class AccessControlFilterExcludeValidatorTest { MapConfigModelRegistry.createFromList(new ModelBuilderAddingAccessControlFilter()), deployState); - ValidationTester.validate(new AccessControlFilterExcludeValidator(), model, deployState); + new AccessControlFilterExcludeValidator().validate(model, deployState); } private static DeployState createDeployState(Zone zone, StringBuffer buffer, boolean allowExcludes) { @@ -111,6 +112,6 @@ public class AccessControlFilterExcludeValidatorTest { Cloud.Builder cloudBuilder = Cloud.builder().name(cloudName); if (cloudName == CloudName.AWS) cloudBuilder.account(CloudAccount.from("123456789012")); return new Zone(cloudBuilder.build(), systemName, Environment.prod, RegionName.defaultName()); - } + } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AccessControlFilterValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AccessControlFilterValidatorTest.java index 1bc59e118d4..aa42fbbf827 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AccessControlFilterValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AccessControlFilterValidatorTest.java @@ -39,7 +39,7 @@ public class AccessControlFilterValidatorTest { VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); try { - ValidationTester.validate(new AccessControlFilterValidator(), model, deployState); + new AccessControlFilterValidator().validate(model, deployState); fail(); } catch (IllegalArgumentException e) { assertEquals("The 'access-control' feature is not available in open-source Vespa.", e.getMessage()); @@ -53,7 +53,7 @@ public class AccessControlFilterValidatorTest { MapConfigModelRegistry.createFromList(new ModelBuilderAddingAccessControlFilter()), deployState); - ValidationTester.validate(new AccessControlFilterValidator(), model, deployState); + new AccessControlFilterValidator().validate(model, deployState); } private static DeployState createDeployState() { @@ -61,5 +61,4 @@ public class AccessControlFilterValidatorTest { .applicationPackage(new MockApplicationPackage.Builder().withServices(SERVICES_XML).build()) .build(); } - } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java index 1aca0c2fe47..f41cc266db3 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java @@ -3,7 +3,6 @@ package com.yahoo.vespa.model.application.validation; import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.deploy.DeployState; -import com.yahoo.vespa.model.application.validation.AbstractBundleValidator.JarContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -30,7 +29,7 @@ public class BundleValidatorTest { // Valid jar file JarFile ok = createTemporaryJarFile(tempDir, "ok"); BundleValidator bundleValidator = new BundleValidator(); - bundleValidator.validateJarFile(contextOf(DeployState.createTestState()), ok); + bundleValidator.validateJarFile(DeployState.createTestState(), ok); // No manifest validateWithException("nomanifest", "Non-existing or invalid manifest in nomanifest.jar"); @@ -40,7 +39,7 @@ public class BundleValidatorTest { try { JarFile jarFile = createTemporaryJarFile(tempDir, jarName); BundleValidator bundleValidator = new BundleValidator(); - bundleValidator.validateJarFile(contextOf(DeployState.createTestState()), jarFile); + bundleValidator.validateJarFile(DeployState.createTestState(), jarFile); assert (false); } catch (IllegalArgumentException e) { assertEquals(exceptionMessage, e.getMessage()); @@ -53,7 +52,7 @@ public class BundleValidatorTest { DeployState state = createDeployState(buffer); JarFile jarFile = createTemporaryJarFile(tempDir, "snapshot_bundle"); - new BundleValidator().validateJarFile(contextOf(state), jarFile); + new BundleValidator().validateJarFile(state, jarFile); assertTrue(buffer.toString().contains("Deploying snapshot bundle")); } @@ -63,7 +62,7 @@ public class BundleValidatorTest { DeployState state = createDeployState(buffer); BundleValidator validator = new BundleValidator(); JarFile jarFile = createTemporaryJarFile(tempDir, "import-warnings"); - validator.validateJarFile(contextOf(state), jarFile); + validator.validateJarFile(state, jarFile); String output = buffer.toString(); assertTrue(output .contains("JAR file 'import-warnings.jar' imports the packages [org.json] from 'org.json:json'. \n" + @@ -124,12 +123,5 @@ public class BundleValidatorTest { List.of("org.json", "version", "[0.0.0,1)", "org.eclipse.jetty.client.api", "version", "[9.4.46,10)")); } - private static JarContext contextOf(DeployState state) { - return new JarContext() { - @Override public void illegal(String error) { throw new IllegalArgumentException(error); } - @Override public void illegal(String error, Throwable cause) { throw new IllegalArgumentException(error, cause); } - @Override public DeployState deployState() { return state; } - }; - } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudDataPlaneFilterValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudDataPlaneFilterValidatorTest.java index 80ef81ee6d7..8acbf00a5a3 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudDataPlaneFilterValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudDataPlaneFilterValidatorTest.java @@ -71,7 +71,7 @@ public class CloudDataPlaneFilterValidatorTest { certFile2, List.of(createCertificate("bar")))); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new CloudDataPlaneFilterValidator(), model, deployState); + new CloudDataPlaneFilterValidator().validate(model, deployState); } @Test @@ -100,8 +100,11 @@ public class CloudDataPlaneFilterValidatorTest { certFile2, List.of(certificate))); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.expect(new CloudDataPlaneFilterValidator(), model, deployState, - "Duplicate certificate(s) detected in files: [%s, %s]. Certificate subject of duplicates: [%s]".formatted(certFile1, certFile2, certificate.getSubjectX500Principal().getName())); + IllegalArgumentException illegalArgumentException = Assertions.assertThrows(IllegalArgumentException.class, () -> + new CloudDataPlaneFilterValidator().validate(model, deployState)); + assertEquals( + "Duplicate certificate(s) detected in files: [%s, %s]. Certificate subject of duplicates: [%s]".formatted(certFile1, certFile2, certificate.getSubjectX500Principal().getName()), + illegalArgumentException.getMessage()); } @Test @@ -124,8 +127,11 @@ public class CloudDataPlaneFilterValidatorTest { Map.of(certFile1, List.of(certificate, certificate))); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.expect(new CloudDataPlaneFilterValidator(), model, deployState, - "Duplicate certificate(s) detected in files: [%s]. Certificate subject of duplicates: [%s]".formatted(certFile1, certificate.getSubjectX500Principal().getName())); + IllegalArgumentException illegalArgumentException = Assertions.assertThrows(IllegalArgumentException.class, () -> + new CloudDataPlaneFilterValidator().validate(model, deployState)); + assertEquals( + "Duplicate certificate(s) detected in files: [%s]. Certificate subject of duplicates: [%s]".formatted(certFile1, certificate.getSubjectX500Principal().getName()), + illegalArgumentException.getMessage()); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudHttpConnectorValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudHttpConnectorValidatorTest.java index 3be1cbd44e3..58aa0e8625e 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudHttpConnectorValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudHttpConnectorValidatorTest.java @@ -104,7 +104,7 @@ class CloudHttpConnectorValidatorTest { .endpoints(Set.of(new ContainerEndpoint("container", ApplicationClusterEndpoint.Scope.zone, List.of("c.example.com")))) .build(); var model = new VespaModel(new NullConfigModelRegistry(), state); - ValidationTester.validate(new CloudHttpConnectorValidator(), model, state); + new CloudHttpConnectorValidator().validate(model, state); } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidatorTest.java index ac5a08b1394..2aa678fd34b 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidatorTest.java @@ -67,7 +67,7 @@ class CloudUserFilterValidatorTest { .properties(new TestProperties().setHostedVespa(isHosted).setAllowUserFilters(false)) .build(); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new CloudUserFilterValidator(), model, deployState); + new CloudUserFilterValidator().validate(model, deployState); } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ContainerInCloudValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ContainerInCloudValidatorTest.java index b6484049eaf..43c51bea04a 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ContainerInCloudValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ContainerInCloudValidatorTest.java @@ -61,7 +61,7 @@ public class ContainerInCloudValidatorTest { } DeployState deployState = builder.build(); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new ContainerInCloudValidator(), model, deployState); + new ContainerInCloudValidator().validate(model, deployState); } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/DeploymentSpecValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/DeploymentSpecValidatorTest.java index c9b014d9301..4e388df3ef8 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/DeploymentSpecValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/DeploymentSpecValidatorTest.java @@ -63,7 +63,7 @@ public class DeploymentSpecValidatorTest { try { var deployState = builder.build(); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new DeploymentSpecValidator(), model, deployState); + new DeploymentSpecValidator().validate(model, deployState); fail("Did not get expected exception"); } catch (IllegalArgumentException e) { assertEquals(message, e.getMessage()); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/EndpointCertificateSecretsValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/EndpointCertificateSecretsValidatorTest.java index 3b6a559ce31..821ad1be8fa 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/EndpointCertificateSecretsValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/EndpointCertificateSecretsValidatorTest.java @@ -48,7 +48,7 @@ public class EndpointCertificateSecretsValidatorTest { DeployState deployState = deployState(servicesXml(), deploymentXml(), Optional.of(EndpointCertificateSecrets.missing(1))); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new EndpointCertificateSecretsValidator(), model, deployState); + new EndpointCertificateSecretsValidator().validate(model, deployState); }); assertTrue(exception.getMessage().contains("TLS enabled, but could not yet retrieve certificate version 1 for application default:default:default")); } @@ -58,7 +58,7 @@ public class EndpointCertificateSecretsValidatorTest { DeployState deployState = deployState(servicesXml(), deploymentXml(), Optional.of(new EndpointCertificateSecrets("cert", "key"))); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new EndpointCertificateSecretsValidator(), model, deployState); + new EndpointCertificateSecretsValidator().validate(model, deployState); } @Test @@ -66,7 +66,7 @@ public class EndpointCertificateSecretsValidatorTest { DeployState deployState = deployState(servicesXml(), deploymentXml(), Optional.empty()); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new EndpointCertificateSecretsValidator(), model, deployState); + new EndpointCertificateSecretsValidator().validate(model, deployState); } private static DeployState deployState(String servicesXml, String deploymentXml, Optional<EndpointCertificateSecrets> endpointCertificateSecretsSecrets) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/InfrastructureDeploymentValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/InfrastructureDeploymentValidatorTest.java index 190f68e6956..bcec73432b3 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/InfrastructureDeploymentValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/InfrastructureDeploymentValidatorTest.java @@ -43,7 +43,6 @@ public class InfrastructureDeploymentValidatorTest { var model = new VespaModel(new NullConfigModelRegistry(), deployState); var validator = new InfrastructureDeploymentValidator(); - ValidationTester.validate(validator, model, deployState); + validator.validate(model, deployState); } - } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/JvmHeapSizeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/JvmHeapSizeValidatorTest.java index a53ef233746..e4ba003df64 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/JvmHeapSizeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/JvmHeapSizeValidatorTest.java @@ -39,25 +39,27 @@ class JvmHeapSizeValidatorTest { @Test void fails_on_too_low_jvm_percentage() throws IOException, SAXException { - var deployState = createDeployState(9, 7L * 1024 * 1024 * 1024); + var deployState = createDeployState(8, 7L * 1024 * 1024 * 1024); var model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.expect(new JvmHeapSizeValidator(), model, deployState, - "Allocated percentage of memory of JVM in cluster 'container' is too low (12% < 15%). Estimated cost of ONNX models is 7.00GB"); + var e = assertThrows(IllegalArgumentException.class, () -> new JvmHeapSizeValidator().validate(model, deployState)); + String expectedMessage = "Allocated percentage of memory of JVM in cluster 'container' is too low (3% < 15%). Estimated cost of ONNX models is 7.00GB"; + assertTrue(e.getMessage().contains(expectedMessage), e.getMessage()); } @Test void fails_on_too_low_heap_size() throws IOException, SAXException { var deployState = createDeployState(2.2, 1024L * 1024 * 1024); var model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.expect(new JvmHeapSizeValidator(), model, deployState, - "Allocated memory to JVM in cluster 'container' is too low (0.50GB < 0.60GB). Estimated cost of ONNX models is 1.00GB."); + var e = assertThrows(IllegalArgumentException.class, () -> new JvmHeapSizeValidator().validate(model, deployState)); + String expectedMessage = "Allocated memory to JVM in cluster 'container' is too low (0.50GB < 0.60GB). Estimated cost of ONNX models is 1.00GB."; + assertTrue(e.getMessage().contains(expectedMessage), e.getMessage()); } @Test void accepts_adequate_heap_size() throws IOException, SAXException { var deployState = createDeployState(8, 1024L * 1024 * 1024); var model = new VespaModel(new NullConfigModelRegistry(), deployState); - assertDoesNotThrow(() -> ValidationTester.validate(new JvmHeapSizeValidator(), model, deployState)); + assertDoesNotThrow(() -> new JvmHeapSizeValidator().validate(model, deployState)); } @Test @@ -79,7 +81,7 @@ class JvmHeapSizeValidatorTest { </services>"""; var deployState = createDeployState(servicesXml, 2, 1024L * 1024 * 1024); var model = new VespaModel(new NullConfigModelRegistry(), deployState); - assertDoesNotThrow(() -> ValidationTester.validate(new JvmHeapSizeValidator(), model, deployState)); + assertDoesNotThrow(() -> new JvmHeapSizeValidator().validate(model, deployState)); } private static DeployState createDeployState(String servicesXml, double nodeGb, long modelCostBytes) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/PublicApiBundleValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/PublicApiBundleValidatorTest.java index 19be886d3e5..c68599f4595 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/PublicApiBundleValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/PublicApiBundleValidatorTest.java @@ -1,8 +1,6 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation; -import com.yahoo.config.model.deploy.DeployState; -import com.yahoo.vespa.model.application.validation.AbstractBundleValidator.JarContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -15,7 +13,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasSize; -import static org.junit.jupiter.api.Assertions.fail; /** * @author gjoranv @@ -32,11 +29,7 @@ public class PublicApiBundleValidatorTest { var jarFile = BundleValidatorTest.createTemporaryJarFile(tempDir, "non-public-api"); var validator = new PublicApiBundleValidator(); - validator.validateJarFile(new JarContext() { - @Override public void illegal(String error) { fail(); } - @Override public void illegal(String error, Throwable cause) { fail(); } - @Override public DeployState deployState() { return deployState; } - }, jarFile); + validator.validateJarFile(deployState, jarFile); String output = outputBuf.toString(); assertThat(output, containsString("uses non-public Vespa APIs: [")); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/SecretStoreValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/SecretStoreValidatorTest.java index 9d53c5af61c..ae23b3b722d 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/SecretStoreValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/SecretStoreValidatorTest.java @@ -48,7 +48,7 @@ public class SecretStoreValidatorTest { DeployState deployState = deployState(servicesXml(), deploymentXml(true)); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new SecretStoreValidator(), model, deployState); + new SecretStoreValidator().validate(model, deployState); } @Test @@ -58,7 +58,7 @@ public class SecretStoreValidatorTest { DeployState deployState = deployState(servicesXml(), deploymentXml(false)); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new SecretStoreValidator(), model, deployState); + new SecretStoreValidator().validate(model, deployState); }); assertTrue(exception.getMessage().contains("Container cluster 'default' uses a secret store, so an Athenz domain and" + @@ -74,7 +74,7 @@ public class SecretStoreValidatorTest { DeployState deployState = deployState(servicesXml, deploymentXml(false)); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new SecretStoreValidator(), model, deployState); + new SecretStoreValidator().validate(model, deployState); } private static DeployState deployState(String servicesXml, String deploymentXml) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UriBindingsValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UriBindingsValidatorTest.java index 92c2b5276cd..9a2f9fadac6 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UriBindingsValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UriBindingsValidatorTest.java @@ -107,7 +107,7 @@ public class UriBindingsValidatorTest { .endpoints(Set.of(new ContainerEndpoint("default", ApplicationClusterEndpoint.Scope.zone, List.of("default.example.com")))) .build(); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new UriBindingsValidator(), model, deployState); + new UriBindingsValidator().validate(model, deployState); } private static String createServicesXmlWithHandler(String handlerBinding) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UrlConfigValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UrlConfigValidatorTest.java index d4a324901e2..837de946e36 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UrlConfigValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UrlConfigValidatorTest.java @@ -81,7 +81,7 @@ public class UrlConfigValidatorTest { .build(); DeployState deployState = createDeployState(app, systemName); VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState); - ValidationTester.validate(new UrlConfigValidator(), model, deployState); + new UrlConfigValidator().validate(model, deployState); } private static DeployState createDeployState(ApplicationPackage app, SystemName systemName) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java index 29279635918..8dc07d8857d 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java @@ -16,15 +16,12 @@ import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.vespa.model.application.validation.Validation.Execution; -import com.yahoo.vespa.model.application.validation.change.ChangeValidator; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; @@ -33,8 +30,6 @@ import java.util.stream.Stream; import static com.yahoo.config.model.test.MockApplicationPackage.BOOK_SCHEMA; import static com.yahoo.config.model.test.MockApplicationPackage.MUSIC_SCHEMA; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author bratseth @@ -119,27 +114,4 @@ public class ValidationTester { return s.replaceAll("\\d", "-"); } - public static void expect(Validator validator, VespaModel model, DeployState deployState, String... expectedMessages) { - Execution execution = new Execution(model, deployState); - validator.validate(execution); - assertTrue( execution.errors().stream().allMatch(error -> Arrays.stream(expectedMessages).anyMatch(error::contains)) - && Arrays.stream(expectedMessages).allMatch(expected -> execution.errors().stream().anyMatch(error -> error.contains(expected))), - "Expected errors: " + Arrays.toString(expectedMessages) + "\nActual errors: " + execution.errors()); - } - - /** Runs validation, and throws on illegalities. */ - public static void validate(Validator validator, VespaModel model, DeployState deployState) { - Execution execution = new Execution(model, deployState); - validator.validate(execution); - execution.throwIfFailed(); - } - - /** Runs validation and returns the resulting config chance actions, without checking whether they're currently allowed; or throws on illegalities. */ - public static List<ConfigChangeAction> validateChanges(ChangeValidator validator, VespaModel model, DeployState deployState) { - Execution execution = new Execution(model, deployState); - validator.validate(execution); - if ( ! execution.errors().isEmpty()) execution.throwIfFailed(); - return execution.actions(); - } - } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidatorTest.java index 6b5db3b081f..bc36b800bfb 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidatorTest.java @@ -41,22 +41,22 @@ public class CertificateRemovalChangeValidatorTest { CertificateRemovalChangeValidator validator = new CertificateRemovalChangeValidator(); // Adding certs -> ok - validator.validateClients("clusterId", List.of(c1, c2), List.of(c1, c2, c3), (id, msg) -> ValidationOverrides.empty.invalid(id, msg, now)); + validator.validateClients("clusterId", List.of(c1, c2), List.of(c1, c2, c3), new DeployState.Builder().now(now).build()); // Removing certs -> fails assertThrows(ValidationOverrides.ValidationException.class, () ->validator.validateClients("clusterId", List.of(c1, c2, c3), List.of(c1, c3), - (id, msg) -> ValidationOverrides.empty.invalid(id, msg, now))); + new DeployState.Builder().now(now).build())); // Removing certs with validationoverrides -> ok validator.validateClients("clusterId", List.of(c1, c2, c3), List.of(c1, c3), - (id, msg) -> ValidationOverrides.fromXml(validationOverrides).invalid(id, msg, now)); + new DeployState.Builder().now(now).validationOverrides(ValidationOverrides.fromXml(validationOverrides)).build()); // Adding and removing internal certs are ok: validator.validateClients("clusterId", List.of(c1, c2), List.of(c1, c2, internal), - (id, msg) -> ValidationOverrides.empty.invalid(id, msg, now)); + new DeployState.Builder().build()); validator.validateClients("clusterId", List.of(c1, c2, internal), List.of(c1, c2), - (id, msg) -> ValidationOverrides.empty.invalid(id, msg, now)); + new DeployState.Builder().now(now).build()); } static X509Certificate certificate(String cn) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigChangeTestUtils.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigChangeTestUtils.java index c9703fc34af..081e10ecea6 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigChangeTestUtils.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigChangeTestUtils.java @@ -7,11 +7,9 @@ import com.yahoo.config.model.api.ServiceInfo; import com.yahoo.config.provision.ClusterSpec; import java.util.ArrayList; -import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; -import static java.util.Comparator.comparing; import static org.junit.jupiter.api.Assertions.assertEquals; public class ConfigChangeTestUtils { @@ -62,8 +60,8 @@ public class ConfigChangeTestUtils { public static void assertEqualActions(List<ConfigChangeAction> exp, List<ConfigChangeAction> act) { var mutableExp = new ArrayList<>(exp); var mutableAct = new ArrayList<>(act); - mutableExp.sort(comparing(ConfigChangeAction::getMessage)); - mutableAct.sort(comparing(ConfigChangeAction::getMessage)); + mutableExp.sort((lhs, rhs) -> lhs.getMessage().compareTo(rhs.getMessage())); + mutableAct.sort((lhs, rhs) -> lhs.getMessage().compareTo(rhs.getMessage())); assertEquals(mutableExp, mutableAct); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java index f68a1da7dfb..a41b538d3ca 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java @@ -1,15 +1,16 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation.change; +import com.yahoo.config.model.deploy.DeployState; +import com.yahoo.test.AnotherrestartConfig; import com.yahoo.config.ConfigInstance; +import com.yahoo.test.RestartConfig; +import com.yahoo.test.SimpletypesConfig; import com.yahoo.config.model.api.ConfigChangeAction; -import com.yahoo.config.model.producer.AbstractConfigProducerRoot; import com.yahoo.config.model.producer.AnyConfigProducer; import com.yahoo.config.model.producer.TreeConfigProducer; +import com.yahoo.config.model.producer.AbstractConfigProducerRoot; import com.yahoo.config.model.test.MockRoot; -import com.yahoo.test.AnotherrestartConfig; -import com.yahoo.test.RestartConfig; -import com.yahoo.test.SimpletypesConfig; import com.yahoo.vespa.model.AbstractService; import com.yahoo.vespa.model.Host; import com.yahoo.vespa.model.HostResource; @@ -24,9 +25,7 @@ import org.junit.jupiter.api.Test; import java.util.List; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; /** * Testing the validator on both a stub model and a real-life Vespa model. @@ -153,6 +152,11 @@ public class ConfigValueChangeValidatorTest { assertEmptyLog(); } + private List<ConfigChangeAction> getConfigChanges(VespaModel currentModel, VespaModel nextModel) { + ConfigValueChangeValidator validator = new ConfigValueChangeValidator(); + return validator.validate(currentModel, nextModel, new DeployState.Builder().deployLogger(logger).build()); + } + private List<ConfigChangeAction> getConfigChanges(AbstractConfigProducerRoot currentModel, AbstractConfigProducerRoot nextModel) { ConfigValueChangeValidator validator = new ConfigValueChangeValidator(); @@ -241,7 +245,8 @@ public class ConfigValueChangeValidatorTest { setHostResource(new HostResource(new Host(null, "localhost"))); } - @Override public int getPortCount() { + @Override + public int getPortCount() { return 0; } @@ -257,7 +262,8 @@ public class ConfigValueChangeValidatorTest { this.value = value; } - @Override public void getConfig(RestartConfig.Builder builder) { + @Override + public void getConfig(RestartConfig.Builder builder) { builder.value(value); } @@ -277,7 +283,8 @@ public class ConfigValueChangeValidatorTest { this.anotherValue = anotherValue; } - @Override public void getConfig(AnotherrestartConfig.Builder builder) { + @Override + public void getConfig(AnotherrestartConfig.Builder builder) { builder.anothervalue(anotherValue); } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java index a7485b177d3..ac59ca58cb5 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java @@ -5,7 +5,6 @@ import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.vespa.model.application.validation.ValidationTester; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; import org.junit.jupiter.api.Test; @@ -68,7 +67,7 @@ public class ContainerRestartValidatorTest { } private static List<ConfigChangeAction> validateModel(VespaModel current, VespaModel next) { - return ValidationTester.validateChanges(new ContainerRestartValidator(), next, new DeployState.Builder().previousModel(current).build()); + return new ContainerRestartValidator().validate(current, next, new DeployState.Builder().build()); } private static VespaModel createModel(boolean restartOnDeploy, boolean alwaysRestart) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/GlobalDocumentChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/GlobalDocumentChangeValidatorTest.java index f4123a72e1f..cdc80754194 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/GlobalDocumentChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/GlobalDocumentChangeValidatorTest.java @@ -1,7 +1,6 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation.change; -import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.application.validation.ValidationTester; @@ -15,7 +14,7 @@ import static org.junit.jupiter.api.Assertions.*; public class GlobalDocumentChangeValidatorTest { @Test - void testChangeGlobalAttribute() { + void testChangGlobalAttribute() { testChangeGlobalAttribute(true, false, false, null); testChangeGlobalAttribute(true, true, true, null); testChangeGlobalAttribute(false, false, true, null); @@ -28,16 +27,14 @@ public class GlobalDocumentChangeValidatorTest { ValidationTester tester = new ValidationTester(); VespaModel oldModel = tester.deploy(null, getServices(oldGlobal), Environment.prod, validationOverrides, "default.indexing").getFirst(); try { - var actions = tester.deploy(oldModel, getServices(newGlobal), Environment.prod, validationOverrides, "default.indexing").getSecond(); + tester.deploy(oldModel, getServices(newGlobal), Environment.prod, validationOverrides, "default.indexing").getSecond(); assertTrue(allowed); - assertEquals(validationOverrides == null ? 0 : 1, actions.size()); - if (validationOverrides != null) assertEquals(ClusterSpec.Id.from("default"), actions.get(0).clusterId()); - } catch (IllegalArgumentException e) { + } catch (IllegalStateException e) { assertFalse(allowed); - assertEquals("global-document-change: Document type music in cluster default changed global from " + oldGlobal + " to " + newGlobal + ". " + - "To handle this change, first stop services on all content nodes. Then, deploy with validation override. Finally, start services on all content nodes. " + - "To allow this add <allow until='yyyy-mm-dd'>global-document-change</allow> to validation-overrides.xml, see https://docs.vespa.ai/en/reference/validation-overrides.html", - e.getMessage()); + assertEquals("Document type music in cluster default changed global from " + oldGlobal + " to " + newGlobal + ". " + + "Add validation override 'global-document-change' to force this change through. " + + "First, stop services on all content nodes. Then, deploy with validation override. Finally, start services on all content nodes.", + e.getMessage()); } } @@ -55,10 +52,8 @@ public class GlobalDocumentChangeValidatorTest { } private static final String globalDocumentValidationOverrides = - """ - <validation-overrides> - <allow until='2000-01-14' comment='test override'>global-document-change</allow> - </validation-overrides> - """; + "<validation-overrides>\n" + + " <allow until='2000-01-14' comment='test override'>global-document-change</allow>\n" + + "</validation-overrides>\n"; } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSchemaClusterChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSchemaClusterChangeValidatorTest.java index 3555fc21471..fb4e9f1a00b 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSchemaClusterChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSchemaClusterChangeValidatorTest.java @@ -7,7 +7,6 @@ import com.yahoo.config.model.api.ServiceInfo; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.vespa.model.application.validation.ValidationTester; import com.yahoo.vespa.model.content.utils.ApplicationPackageBuilder; import com.yahoo.vespa.model.content.utils.ContentClusterBuilder; import com.yahoo.vespa.model.content.utils.SchemaBuilder; @@ -71,7 +70,8 @@ public class IndexedSchemaClusterChangeValidatorTest { } private List<ConfigChangeAction> validate() { - return normalizeServicesInActions(ValidationTester.validateChanges(validator, nextModel, new DeployState.Builder().previousModel(currentModel).build())); + return normalizeServicesInActions(validator.validate(currentModel, nextModel, + new DeployState.Builder().build())); } public void assertValidation() { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidatorTest.java index b2439651cf9..afa36ac271e 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidatorTest.java @@ -13,7 +13,6 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.HostSpec; import com.yahoo.config.provision.ProvisionLogger; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.vespa.model.application.validation.ValidationTester; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; import org.junit.jupiter.api.Test; @@ -59,7 +58,7 @@ public class NodeResourceChangeValidatorTest { } private List<ConfigChangeAction> validate(VespaModel current, VespaModel next) { - return ValidationTester.validateChanges(new NodeResourceChangeValidator(), next, new DeployState.Builder().previousModel(current).build()); + return new NodeResourceChangeValidator().validate(current, next, new DeployState.Builder().build()); } private static VespaModel model(int mem1, int mem2, int mem3, int mem4) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/RestartOnDeployForOnnxModelChangesValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/RestartOnDeployForOnnxModelChangesValidatorTest.java index 67e8a4d512e..f2013f0f26b 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/RestartOnDeployForOnnxModelChangesValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/RestartOnDeployForOnnxModelChangesValidatorTest.java @@ -8,7 +8,6 @@ import com.yahoo.config.model.api.OnnxModelOptions; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.deploy.TestProperties; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.vespa.model.application.validation.ValidationTester; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; import org.junit.jupiter.api.Test; @@ -72,7 +71,7 @@ public class RestartOnDeployForOnnxModelChangesValidatorTest { } private static List<ConfigChangeAction> validateModel(VespaModel current, VespaModel next) { - return ValidationTester.validateChanges(new RestartOnDeployForOnnxModelChangesValidator(), next, deployStateBuilder().previousModel(current).build()); + return new RestartOnDeployForOnnxModelChangesValidator().validate(current, next, deployStateBuilder().build()); } private static OnnxModelCost onnxModelCost() { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StreamingSchemaClusterChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StreamingSchemaClusterChangeValidatorTest.java index ee64ceb6969..8db9d39534d 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StreamingSchemaClusterChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StreamingSchemaClusterChangeValidatorTest.java @@ -7,7 +7,6 @@ import com.yahoo.config.model.api.ServiceInfo; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.vespa.model.application.validation.ValidationTester; import com.yahoo.vespa.model.content.utils.ApplicationPackageBuilder; import com.yahoo.vespa.model.content.utils.ContentClusterBuilder; import com.yahoo.vespa.model.content.utils.DocType; @@ -70,8 +69,8 @@ public class StreamingSchemaClusterChangeValidatorTest { } public List<ConfigChangeAction> validate() { - return normalizeServicesInActions(ValidationTester.validateChanges(validator, nextModel, - new DeployState.Builder().previousModel(currentModel).build())); + return normalizeServicesInActions(validator.validate(currentModel, nextModel, + new DeployState.Builder().build())); } public void assertValidation() { |