diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-01-15 13:22:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-15 13:22:49 +0100 |
commit | a6df129da95d0271d83689467fa3da77dad360d8 (patch) | |
tree | c1bc28b4bd1f78c9d922ddf8ded7ed29993d569c /configserver | |
parent | fa3bc1144df2514d762a21598e4627e7509eb7f1 (diff) | |
parent | 4f854624759247d1125e0f6a5996911c5119eb48 (diff) |
Merge pull request #11777 from vespa-engine/revert-11775-revert-11771-bjorncs/access-control-validation
Reapply "Bjorncs/access control validation"
Diffstat (limited to 'configserver')
4 files changed, 75 insertions, 33 deletions
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java index 0b56591d6a1..2a1254d0d8d 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java @@ -44,6 +44,7 @@ import static com.yahoo.vespa.config.server.ConfigServerBootstrap.Mode.BOOTSTRAP import static com.yahoo.vespa.config.server.ConfigServerBootstrap.Mode.INITIALIZE_ONLY; import static com.yahoo.vespa.config.server.ConfigServerBootstrap.VipStatusMode.VIP_STATUS_FILE; import static com.yahoo.vespa.config.server.ConfigServerBootstrap.VipStatusMode.VIP_STATUS_PROGRAMMATICALLY; +import static com.yahoo.vespa.config.server.deploy.DeployTester.createHostedModelFactory; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -61,7 +62,7 @@ public class ConfigServerBootstrapTest { public void testBootstrap() throws Exception { ConfigserverConfig configserverConfig = createConfigserverConfig(temporaryFolder); InMemoryProvisioner provisioner = new InMemoryProvisioner(true, "host0", "host1", "host3", "host4"); - DeployTester tester = new DeployTester(configserverConfig, provisioner); + DeployTester tester = new DeployTester(List.of(createHostedModelFactory()), configserverConfig, provisioner); tester.deployApp("src/test/apps/hosted/"); File versionFile = temporaryFolder.newFile(); @@ -94,7 +95,7 @@ public class ConfigServerBootstrapTest { public void testBootstrapWithVipStatusFile() throws Exception { ConfigserverConfig configserverConfig = createConfigserverConfig(temporaryFolder); InMemoryProvisioner provisioner = new InMemoryProvisioner(true, "host0", "host1", "host3", "host4"); - DeployTester tester = new DeployTester(configserverConfig, provisioner); + DeployTester tester = new DeployTester(List.of(createHostedModelFactory()), configserverConfig, provisioner); tester.deployApp("src/test/apps/hosted/"); File versionFile = temporaryFolder.newFile(); @@ -119,7 +120,7 @@ public class ConfigServerBootstrapTest { @Test public void testBootstrapWhenRedeploymentFails() throws Exception { ConfigserverConfig configserverConfig = createConfigserverConfig(temporaryFolder); - DeployTester tester = new DeployTester(configserverConfig); + DeployTester tester = new DeployTester(List.of(createHostedModelFactory()), configserverConfig); tester.deployApp("src/test/apps/hosted/"); File versionFile = temporaryFolder.newFile(); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java index 1121ac3a8cc..54a80adf676 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.deploy; import com.google.common.io.Files; import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.application.api.ApplicationPackage; +import com.yahoo.config.model.ConfigModelRegistry; import com.yahoo.config.model.NullConfigModelRegistry; import com.yahoo.config.model.api.HostProvisioner; import com.yahoo.config.model.api.Model; @@ -13,6 +14,7 @@ import com.yahoo.config.model.api.ModelFactory; import com.yahoo.config.model.api.ValidationParameters; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.provision.InMemoryProvisioner; +import com.yahoo.config.model.test.HostedConfigModelRegistry; import com.yahoo.config.model.test.MockApplicationPackage; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Capacity; @@ -99,6 +101,10 @@ public class DeployTester { this(modelFactories, configserverConfig, clock, Zone.defaultZone()); } + public DeployTester(List<ModelFactory> modelFactories, ConfigserverConfig configserverConfig, HostProvisioner hostProvisioner) { + this(modelFactories, configserverConfig, Clock.systemUTC(), hostProvisioner); + } + public DeployTester(List<ModelFactory> modelFactories, ConfigserverConfig configserverConfig, Clock clock, HostProvisioner provisioner) { this(modelFactories, configserverConfig, clock, Zone.defaultZone(), provisioner); } @@ -165,6 +171,26 @@ public class DeployTester { public static ModelFactory createFailingModelFactory(Version version) { return new FailingModelFactory(version); } + public static CountingModelFactory createHostedModelFactory(Version version, Clock clock) { + return new CountingModelFactory(HostedConfigModelRegistry.create(), version, clock, Zone.defaultZone()); + } + + public static CountingModelFactory createHostedModelFactory(Version version, Zone zone) { + return new CountingModelFactory(HostedConfigModelRegistry.create(), version, Clock.systemUTC(), zone); + } + + public static CountingModelFactory createHostedModelFactory(Version version) { + return new CountingModelFactory(HostedConfigModelRegistry.create(), version, Clock.systemUTC(), Zone.defaultZone()); + } + + public static CountingModelFactory createHostedModelFactory(Clock clock) { + return new CountingModelFactory(HostedConfigModelRegistry.create(), clock); + } + + public static CountingModelFactory createHostedModelFactory() { + return new CountingModelFactory(HostedConfigModelRegistry.create(), Clock.systemUTC()); + } + /** * Do the initial "deploy" with the existing API-less code as the deploy API doesn't support first deploys yet. */ @@ -320,6 +346,14 @@ public class DeployTester { this.wrapped = new VespaModelFactory(version, new NullConfigModelRegistry(), clock, zone); } + public CountingModelFactory(ConfigModelRegistry registry, Clock clock) { + this.wrapped = new VespaModelFactory(registry, clock); + } + + public CountingModelFactory(ConfigModelRegistry registry, Version version, Clock clock, Zone zone) { + this.wrapped = new VespaModelFactory(version, registry, clock, zone); + } + /** Returns the number of models created successfully by this instance */ public int creationCount() { return creationCount; } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java index 8f4ba0a7b7c..dd0c4eaf342 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java @@ -13,6 +13,7 @@ import com.yahoo.config.model.api.ValidationParameters; import com.yahoo.config.model.provision.Host; import com.yahoo.config.model.provision.Hosts; import com.yahoo.config.model.provision.InMemoryProvisioner; +import com.yahoo.config.model.test.HostedConfigModelRegistry; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; @@ -40,7 +41,7 @@ import java.util.stream.IntStream; import static com.yahoo.vespa.config.server.deploy.DeployTester.CountingModelFactory; import static com.yahoo.vespa.config.server.deploy.DeployTester.createFailingModelFactory; -import static com.yahoo.vespa.config.server.deploy.DeployTester.createModelFactory; +import static com.yahoo.vespa.config.server.deploy.DeployTester.createHostedModelFactory; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; @@ -62,7 +63,7 @@ public class HostedDeployTest { @Test public void testRedeployWithVersion() throws IOException { - CountingModelFactory modelFactory = createModelFactory(Version.fromString("4.5.6"), Clock.systemUTC()); + CountingModelFactory modelFactory = createHostedModelFactory(Version.fromString("4.5.6"), Clock.systemUTC()); DeployTester tester = new DeployTester(List.of(modelFactory), createConfigserverConfig()); tester.deployApp("src/test/apps/hosted/", "4.5.6"); @@ -74,7 +75,7 @@ public class HostedDeployTest { @Test public void testRedeploy() throws IOException { - DeployTester tester = new DeployTester(createConfigserverConfig()); + DeployTester tester = new DeployTester(List.of(createHostedModelFactory()), createConfigserverConfig()); ApplicationId appId = tester.applicationId(); tester.deployApp("src/test/apps/hosted/"); assertFalse(tester.applicationRepository().getActiveSession(appId).getMetaData().isInternalRedeploy()); @@ -87,9 +88,9 @@ public class HostedDeployTest { @Test public void testDeployMultipleVersions() throws IOException { - List<ModelFactory> modelFactories = List.of(createModelFactory(Version.fromString("6.1.0")), - createModelFactory(Version.fromString("6.2.0")), - createModelFactory(Version.fromString("7.0.0"))); + List<ModelFactory> modelFactories = List.of(createHostedModelFactory(Version.fromString("6.1.0")), + createHostedModelFactory(Version.fromString("6.2.0")), + createHostedModelFactory(Version.fromString("7.0.0"))); DeployTester tester = new DeployTester(modelFactories, createConfigserverConfig()); tester.deployApp("src/test/apps/hosted/", "6.2.0"); assertEquals(4, tester.getAllocatedHostsOf(tester.applicationId()).getHosts().size()); @@ -106,12 +107,12 @@ public class HostedDeployTest { createHost("host3"), // Use a host with no version as well createHost("host4", "6.1.0")); - CountingModelFactory factory600 = createModelFactory(Version.fromString("6.0.0")); - CountingModelFactory factory610 = createModelFactory(Version.fromString("6.1.0")); - CountingModelFactory factory620 = createModelFactory(Version.fromString("6.2.0")); - CountingModelFactory factory700 = createModelFactory(Version.fromString("7.0.0")); - CountingModelFactory factory710 = createModelFactory(Version.fromString("7.1.0")); - CountingModelFactory factory720 = createModelFactory(Version.fromString("7.2.0")); + CountingModelFactory factory600 = createHostedModelFactory(Version.fromString("6.0.0")); + CountingModelFactory factory610 = createHostedModelFactory(Version.fromString("6.1.0")); + CountingModelFactory factory620 = createHostedModelFactory(Version.fromString("6.2.0")); + CountingModelFactory factory700 = createHostedModelFactory(Version.fromString("7.0.0")); + CountingModelFactory factory710 = createHostedModelFactory(Version.fromString("7.1.0")); + CountingModelFactory factory720 = createHostedModelFactory(Version.fromString("7.2.0")); List<ModelFactory> modelFactories = List.of(factory600, factory610, factory620, factory700, factory710, factory720); @@ -137,10 +138,10 @@ public class HostedDeployTest { public void testCreateOnlyNeededModelVersionsNewNodes() throws IOException { List<Host> hosts = List.of(createHost("host1"), createHost("host2"), createHost("host3"), createHost("host4")); - CountingModelFactory factory600 = createModelFactory(Version.fromString("6.0.0")); - CountingModelFactory factory610 = createModelFactory(Version.fromString("6.1.0")); - CountingModelFactory factory700 = createModelFactory(Version.fromString("7.0.0")); - CountingModelFactory factory720 = createModelFactory(Version.fromString("7.2.0")); + CountingModelFactory factory600 = createHostedModelFactory(Version.fromString("6.0.0")); + CountingModelFactory factory610 = createHostedModelFactory(Version.fromString("6.1.0")); + CountingModelFactory factory700 = createHostedModelFactory(Version.fromString("7.0.0")); + CountingModelFactory factory720 = createHostedModelFactory(Version.fromString("7.2.0")); List<ModelFactory> modelFactories = List.of(factory600, factory610, factory700, factory720); DeployTester tester = createTester(hosts, modelFactories, prodZone); @@ -162,9 +163,9 @@ public class HostedDeployTest { List<Host> hosts = List.of(createHost("host1", "7.0.0"), createHost("host2", "7.0.0"), createHost("host3", "7.0.0"), createHost("host4", "7.0.0")); - CountingModelFactory factory700 = createModelFactory(Version.fromString("7.0.0"), devZone); - CountingModelFactory factory710 = createModelFactory(Version.fromString("7.1.0"), devZone); - CountingModelFactory factory720 = createModelFactory(Version.fromString("7.2.0"), devZone); + CountingModelFactory factory700 = createHostedModelFactory(Version.fromString("7.0.0"), devZone); + CountingModelFactory factory710 = createHostedModelFactory(Version.fromString("7.1.0"), devZone); + CountingModelFactory factory720 = createHostedModelFactory(Version.fromString("7.2.0"), devZone); List<ModelFactory> modelFactories = List.of(factory700, factory710, factory720); DeployTester tester = createTester(hosts, modelFactories, devZone); @@ -189,7 +190,7 @@ public class HostedDeployTest { createHost("host3", "7.0.0"), createHost("host4", "7.0.0")); ModelFactory factory700 = createFailingModelFactory(Version.fromString("7.0.0")); - CountingModelFactory factory720 = createModelFactory(Version.fromString("7.2.0"), devZone); + CountingModelFactory factory720 = createHostedModelFactory(Version.fromString("7.2.0"), devZone); List<ModelFactory> modelFactories = List.of(factory700, factory720); DeployTester tester = createTester(hosts, modelFactories, devZone, Clock.systemUTC()); @@ -236,8 +237,8 @@ public class HostedDeployTest { createHost("host3", newestOnOldMajorVersion), createHost("host4", newestOnOldMajorVersion)); - CountingModelFactory factory1 = createModelFactory(Version.fromString(oldestVersion)); - CountingModelFactory factory2 = createModelFactory(Version.fromString(newestOnOldMajorVersion)); + CountingModelFactory factory1 = createHostedModelFactory(Version.fromString(oldestVersion)); + CountingModelFactory factory2 = createHostedModelFactory(Version.fromString(newestOnOldMajorVersion)); ModelFactory factory3 = createFailingModelFactory(Version.fromString(newestOnNewMajorVersion)); List<ModelFactory> modelFactories = List.of(factory1, factory2, factory3); @@ -261,7 +262,7 @@ public class HostedDeployTest { createHost("host3", "7.0.0")); List<ModelFactory> modelFactories = List.of(createFailingModelFactory(Version.fromString("7.0.0")), - createModelFactory(Version.fromString("7.1.0"))); + createHostedModelFactory(Version.fromString("7.1.0"))); DeployTester tester = createTester(hosts, modelFactories, prodZone); tester.deployApp("src/test/apps/hosted/", "7.1.0"); @@ -274,8 +275,8 @@ public class HostedDeployTest { **/ @Test public void testCreateOnlyNeededModelVersionsWhenNoHostsAllocated() throws IOException { - CountingModelFactory factory700 = createModelFactory(Version.fromString("7.0.0")); - CountingModelFactory factory720 = createModelFactory(Version.fromString("7.2.0")); + CountingModelFactory factory700 = createHostedModelFactory(Version.fromString("7.0.0")); + CountingModelFactory factory720 = createHostedModelFactory(Version.fromString("7.2.0")); List<ModelFactory> modelFactories = List.of(factory700, factory720); DeployTester tester = createTester(List.of(createHost("host1")), modelFactories, prodZone); @@ -289,9 +290,9 @@ public class HostedDeployTest { // Provisioner does not reuse hosts, so need twice as many hosts as app requires List<Host> hosts = IntStream.rangeClosed(1, 8).mapToObj(i -> createHost("host" + i, "6.0.0")).collect(Collectors.toList()); - List<ModelFactory> modelFactories = List.of(createModelFactory(Version.fromString("6.0.0")), - createModelFactory(Version.fromString("6.1.0")), - createModelFactory(Version.fromString("6.2.0"))); + List<ModelFactory> modelFactories = List.of(createHostedModelFactory(Version.fromString("6.0.0")), + createHostedModelFactory(Version.fromString("6.1.0")), + createHostedModelFactory(Version.fromString("6.2.0"))); DeployTester tester = createTester(hosts, modelFactories, prodZone, Clock.systemUTC()); ApplicationId applicationId = tester.applicationId(); @@ -309,7 +310,7 @@ public class HostedDeployTest { public void testRedeployAfterExpiredValidationOverride() throws IOException { // Old version of model fails, but application disables loading old models until 2016-10-10, so deployment works ManualClock clock = new ManualClock("2016-10-09T00:00:00"); - List<ModelFactory> modelFactories = List.of(createModelFactory(clock), + List<ModelFactory> modelFactories = List.of(createHostedModelFactory(clock), createFailingModelFactory(Version.fromString("1.0.0"))); // older than default DeployTester tester = new DeployTester(modelFactories, createConfigserverConfig()); tester.deployApp("src/test/apps/validationOverride/", clock.instant()); @@ -403,7 +404,7 @@ public class HostedDeployTest { private final ConfigChangeAction action; ConfigChangeActionsModelFactory(Version vespaVersion, ConfigChangeAction action) { - super(vespaVersion); + super(HostedConfigModelRegistry.create(), vespaVersion); this.action = action; } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/model/TestModelFactory.java b/configserver/src/test/java/com/yahoo/vespa/config/server/model/TestModelFactory.java index 691f818020e..65994a41eae 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/model/TestModelFactory.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/model/TestModelFactory.java @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.model; +import com.yahoo.config.model.ConfigModelRegistry; import com.yahoo.config.model.NullConfigModelRegistry; import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.api.ModelCreateResult; @@ -21,6 +22,11 @@ public class TestModelFactory extends VespaModelFactory { this.vespaVersion = vespaVersion; } + public TestModelFactory(ConfigModelRegistry registry, Version vespaVersion) { + super(registry); + this.vespaVersion = vespaVersion; + } + // Needed for testing (to get hold of ModelContext) @Override public ModelCreateResult createAndValidateModel(ModelContext modelContext, ValidationParameters validationParameters) { |