diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2020-09-24 13:55:44 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerij92@gmail.com> | 2020-09-24 13:55:44 +0200 |
commit | 0d3b36d44a88084dd55a33d3995a5f5d39c89a0c (patch) | |
tree | 84f3ecd658a16a22cdc63334e86ee4f770ebf8e1 /configserver | |
parent | 6c6e773f39bf88b66ef1b4d0782f9a0025b244a0 (diff) |
Create DeployTester builder
Diffstat (limited to 'configserver')
5 files changed, 135 insertions, 85 deletions
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java index 3789e540fc3..0a49a19d728 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java @@ -384,7 +384,7 @@ public class ApplicationRepositoryTest { .configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder("filedistribution").getAbsolutePath()) .sessionLifetime(60)); - DeployTester tester = new DeployTester(configserverConfig, clock); + DeployTester tester = new DeployTester.Builder().configserverConfig(configserverConfig).clock(clock).build(); tester.deployApp("src/test/apps/app", clock.instant()); // session 2 (numbering starts at 2) clock.advance(Duration.ofSeconds(10)); 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 bda17faec12..e407e2efc41 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 @@ -2,7 +2,6 @@ package com.yahoo.vespa.config.server; import com.yahoo.cloud.config.ConfigserverConfig; -import com.yahoo.config.model.api.ModelFactory; import com.yahoo.config.model.provision.Host; import com.yahoo.config.model.provision.Hosts; import com.yahoo.config.model.provision.InMemoryProvisioner; @@ -32,7 +31,6 @@ import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.IOException; import java.nio.file.Paths; -import java.time.Clock; import java.time.Duration; import java.time.Instant; import java.util.Arrays; @@ -63,7 +61,8 @@ 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(List.of(createHostedModelFactory()), configserverConfig, provisioner); + DeployTester tester = new DeployTester.Builder().modelFactory(createHostedModelFactory()) + .configserverConfig(configserverConfig).hostProvisioner(provisioner).build(); tester.deployApp("src/test/apps/hosted/"); File versionFile = temporaryFolder.newFile(); @@ -96,7 +95,8 @@ 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(List.of(createHostedModelFactory()), configserverConfig, provisioner); + DeployTester tester = new DeployTester.Builder().modelFactory(createHostedModelFactory()) + .configserverConfig(configserverConfig).hostProvisioner(provisioner).build(); tester.deployApp("src/test/apps/hosted/"); File versionFile = temporaryFolder.newFile(); @@ -121,7 +121,8 @@ public class ConfigServerBootstrapTest { @Test public void testBootstrapWhenRedeploymentFails() throws Exception { ConfigserverConfig configserverConfig = createConfigserverConfig(temporaryFolder); - DeployTester tester = new DeployTester(List.of(createHostedModelFactory()), configserverConfig); + DeployTester tester = new DeployTester.Builder().modelFactory(createHostedModelFactory()) + .configserverConfig(configserverConfig).build(); tester.deployApp("src/test/apps/hosted/"); File versionFile = temporaryFolder.newFile(); @@ -158,13 +159,15 @@ public class ConfigServerBootstrapTest { public void testBootstrapNonHostedOneConfigModel() throws Exception { ConfigserverConfig configserverConfig = createConfigserverConfigNonHosted(temporaryFolder); String vespaVersion = "1.2.3"; - List<ModelFactory> modelFactories = Collections.singletonList(DeployTester.createModelFactory(Version.fromString(vespaVersion))); List<Host> hosts = createHosts(vespaVersion); - InMemoryProvisioner provisioner = new InMemoryProvisioner(new Hosts(hosts), true); Curator curator = new MockCurator(); - DeployTester tester = new DeployTester(modelFactories, configserverConfig, - Clock.systemUTC(), new Zone(Environment.dev, RegionName.defaultName()), - provisioner, curator); + DeployTester tester = new DeployTester.Builder() + .modelFactory(DeployTester.createModelFactory(Version.fromString(vespaVersion))) + .hostProvisioner(new InMemoryProvisioner(new Hosts(hosts), true)) + .configserverConfig(configserverConfig) + .zone(new Zone(Environment.dev, RegionName.defaultName())) + .curator(curator) + .build(); tester.deployApp("src/test/apps/app/", vespaVersion, Instant.now()); ApplicationId applicationId = tester.applicationId(); 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 b657ff2a5f8..3b6e6c00d8b 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 @@ -42,6 +42,7 @@ import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.curator.mock.MockCurator; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.VespaModelFactory; +import com.yahoo.vespa.orchestrator.Orchestrator; import java.io.File; import java.nio.file.Files; @@ -70,73 +71,16 @@ public class DeployTester { private final TenantRepository tenantRepository; private final ApplicationRepository applicationRepository; - public DeployTester() { - this(Collections.singletonList(createModelFactory(Clock.systemUTC()))); - } - - public DeployTester(List<ModelFactory> modelFactories) { - this(modelFactories, - new ConfigserverConfig(new ConfigserverConfig.Builder() - .configServerDBDir(uncheck(() -> Files.createTempDirectory("serverdb")).toString()) - .configDefinitionsDir(uncheck(() -> Files.createTempDirectory("configdefinitions")).toString()) - .fileReferencesDir(uncheck(() -> Files.createTempDirectory("configdefinitions")).toString())), - Clock.systemUTC()); - } - - public DeployTester(ConfigserverConfig configserverConfig, Clock clock) { - this(Collections.singletonList(createModelFactory(clock)), configserverConfig, clock); - } - - public DeployTester(List<ModelFactory> modelFactories, ConfigserverConfig configserverConfig) { - this(modelFactories, configserverConfig, Clock.systemUTC()); - } - - public DeployTester(List<ModelFactory> modelFactories, ConfigserverConfig configserverConfig, Clock clock) { - 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); - } - - public DeployTester(List<ModelFactory> modelFactories, ConfigserverConfig configserverConfig, Clock clock, Zone zone) { - this(modelFactories, configserverConfig, clock, zone, createProvisioner()); - } - - public DeployTester(List<ModelFactory> modelFactories, ConfigserverConfig configserverConfig, Clock clock, Zone zone, HostProvisioner provisioner) { - this(modelFactories, configserverConfig, clock, zone, provisioner, new MockCurator()); - } - - public DeployTester(List<ModelFactory> modelFactories, ConfigserverConfig configserverConfig, Clock clock, Zone zone, - HostProvisioner provisioner, Curator curator) { + private DeployTester(Clock clock, TenantRepository tenantRepository, ApplicationRepository applicationRepository) { this.clock = clock; - TestComponentRegistry componentRegistry = createComponentRegistry(curator, Metrics.createTestMetrics(), - modelFactories, configserverConfig, clock, zone, - provisioner); - try { - this.tenantRepository = new TenantRepository(componentRegistry); - tenantRepository.addTenant(tenantName); - } - catch (Exception e) { - throw new IllegalArgumentException(e); - } - applicationRepository = new ApplicationRepository.Builder() - .withTenantRepository(tenantRepository) - .withProvisioner(new ProvisionerAdapter(provisioner)) - .withConfigserverConfig(configserverConfig) - .withOrchestrator(new OrchestratorMock()) - .withClock(clock) - .build(); + this.tenantRepository = tenantRepository; + this.applicationRepository = applicationRepository; } public Tenant tenant() { return tenantRepository.getTenant(tenantName); } - + /** Create a model factory for the version of this source*/ public static CountingModelFactory createModelFactory(Clock clock) { return new CountingModelFactory(clock); @@ -297,11 +241,11 @@ public class DeployTester { private static class FailingModelFactory implements ModelFactory { private final Version version; - + public FailingModelFactory(Version version) { this.version = version; } - + @Override public Version version() { return version; } @@ -370,4 +314,99 @@ public class DeployTester { } + public static class Builder { + private Clock clock; + private Provisioner provisioner; + private ConfigserverConfig configserverConfig; + private Zone zone; + private Curator curator; + private Metrics metrics; + private List<ModelFactory> modelFactories; + private Orchestrator orchestrator; + + public DeployTester build() { + Clock clock = Optional.ofNullable(this.clock).orElseGet(Clock::systemUTC); + Zone zone = Optional.ofNullable(this.zone).orElseGet(Zone::defaultZone); + ConfigserverConfig configserverConfig = Optional.ofNullable(this.configserverConfig) + .orElseGet(() -> new ConfigserverConfig(new ConfigserverConfig.Builder() + .configServerDBDir(uncheck(() -> Files.createTempDirectory("serverdb")).toString()) + .configDefinitionsDir(uncheck(() -> Files.createTempDirectory("configdefinitions")).toString()) + .fileReferencesDir(uncheck(() -> Files.createTempDirectory("configdefinitions")).toString()))); + Provisioner provisioner = Optional.ofNullable(this.provisioner) + .orElseGet(() -> new ProvisionerAdapter(createProvisioner())); + List<ModelFactory> modelFactories = Optional.ofNullable(this.modelFactories) + .orElseGet(() -> List.of(createModelFactory(clock))); + + TestComponentRegistry.Builder testComponentRegistryBuilder = new TestComponentRegistry.Builder() + .clock(clock) + .configServerConfig(configserverConfig) + .curator(Optional.ofNullable(curator).orElseGet(MockCurator::new)) + .modelFactoryRegistry(new ModelFactoryRegistry(modelFactories)) + .metrics(Optional.ofNullable(metrics).orElseGet(Metrics::createTestMetrics)) + .zone(zone); + if (configserverConfig.hostedVespa()) testComponentRegistryBuilder.provisioner(provisioner); + + TenantRepository tenantRepository = new TenantRepository(testComponentRegistryBuilder.build()); + tenantRepository.addTenant(tenantName); + + ApplicationRepository applicationRepository = new ApplicationRepository.Builder() + .withTenantRepository(tenantRepository) + .withConfigserverConfig(configserverConfig) + .withOrchestrator(Optional.ofNullable(orchestrator).orElseGet(OrchestratorMock::new)) + .withClock(clock) + .withProvisioner(provisioner) + .build(); + + return new DeployTester(clock, tenantRepository, applicationRepository); + } + + public Builder clock(Clock clock) { + this.clock = clock; + return this; + } + + public Builder provisioner(Provisioner provisioner) { + this.provisioner = provisioner; + return this; + } + + public Builder hostProvisioner(HostProvisioner hostProvisioner) { + return provisioner(new ProvisionerAdapter(hostProvisioner)); + } + + public Builder configserverConfig(ConfigserverConfig configserverConfig) { + this.configserverConfig = configserverConfig; + return this; + } + + public Builder zone(Zone zone) { + this.zone = zone; + return this; + } + + public Builder curator(Curator curator) { + this.curator = curator; + return this; + } + + public Builder metrics(Metrics metrics) { + this.metrics = metrics; + return this; + } + + public Builder modelFactory(ModelFactory modelFactory) { + return modelFactories(List.of(modelFactory)); + } + + public Builder modelFactories(List<ModelFactory> modelFactories) { + this.modelFactories = modelFactories; + return this; + } + + public Builder orchestrator(Orchestrator orchestrator) { + this.orchestrator = orchestrator; + return this; + } + } + } 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 5b995ce55e6..04d018b71c0 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 @@ -65,8 +65,9 @@ public class HostedDeployTest { @Test public void testRedeployWithVersion() throws IOException { - CountingModelFactory modelFactory = createHostedModelFactory(Version.fromString("4.5.6"), Clock.systemUTC()); - DeployTester tester = new DeployTester(List.of(modelFactory), createConfigserverConfig()); + DeployTester tester = new DeployTester.Builder() + .modelFactory(createHostedModelFactory(Version.fromString("4.5.6"), Clock.systemUTC())) + .configserverConfig(createConfigserverConfig()).build(); tester.deployApp("src/test/apps/hosted/", "4.5.6"); Optional<com.yahoo.config.provision.Deployment> deployment = tester.redeployFromLocalActive(tester.applicationId()); @@ -77,7 +78,9 @@ public class HostedDeployTest { @Test public void testRedeploy() throws IOException { - DeployTester tester = new DeployTester(List.of(createHostedModelFactory()), createConfigserverConfig()); + DeployTester tester = new DeployTester.Builder() + .modelFactory(createHostedModelFactory()) + .configserverConfig(createConfigserverConfig()).build(); ApplicationId appId = tester.applicationId(); tester.deployApp("src/test/apps/hosted/"); assertFalse(tester.applicationRepository().getActiveSession(appId).getMetaData().isInternalRedeploy()); @@ -90,8 +93,9 @@ public class HostedDeployTest { @Test public void testReDeployWithWantedDockerImageRepositoryAndAthenzDomain() throws IOException { - CountingModelFactory modelFactory = createHostedModelFactory(Version.fromString("4.5.6"), Clock.systemUTC()); - DeployTester tester = new DeployTester(List.of(modelFactory), createConfigserverConfig()); + DeployTester tester = new DeployTester.Builder() + .modelFactory(createHostedModelFactory(Version.fromString("4.5.6"), Clock.systemUTC())) + .configserverConfig(createConfigserverConfig()).build(); String dockerImageRepository = "docker.foo.com:4443/bar/baz"; tester.deployApp("src/test/apps/hosted/", Instant.now(), new PrepareParams.Builder() .vespaVersion("4.5.6") @@ -111,7 +115,7 @@ public class HostedDeployTest { 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()); + DeployTester tester = new DeployTester.Builder().modelFactories(modelFactories).configserverConfig(createConfigserverConfig()).build(); tester.deployApp("src/test/apps/hosted/", "6.2.0"); assertEquals(4, tester.getAllocatedHostsOf(tester.applicationId()).getHosts().size()); } @@ -332,7 +336,7 @@ public class HostedDeployTest { ManualClock clock = new ManualClock("2016-10-09T00:00:00"); List<ModelFactory> modelFactories = List.of(createHostedModelFactory(clock), createFailingModelFactory(Version.fromString("1.0.0"))); // older than default - DeployTester tester = new DeployTester(modelFactories, createConfigserverConfig()); + DeployTester tester = new DeployTester.Builder().modelFactories(modelFactories).configserverConfig(createConfigserverConfig()).build(); tester.deployApp("src/test/apps/validationOverride/", clock.instant()); // Redeployment from local active works @@ -416,8 +420,12 @@ public class HostedDeployTest { private DeployTester createTester(List<Host> hosts, List<ModelFactory> modelFactories, Zone prodZone, Clock clock) throws IOException { - return new DeployTester(modelFactories, createConfigserverConfig(prodZone), - clock, prodZone, new InMemoryProvisioner(new Hosts(hosts), true)); + return new DeployTester.Builder() + .modelFactories(modelFactories) + .configserverConfig(createConfigserverConfig(prodZone)) + .clock(clock) + .zone(prodZone) + .hostProvisioner(new InMemoryProvisioner(new Hosts(hosts), true)).build(); } private static class ConfigChangeActionsModelFactory extends TestModelFactory { diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java index c07c7316930..015cc039a1c 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java @@ -27,7 +27,7 @@ public class RedeployTest { @Test public void testRedeploy() { - DeployTester tester = new DeployTester(); + DeployTester tester = new DeployTester.Builder().build(); tester.deployApp("src/test/apps/app"); Optional<com.yahoo.config.provision.Deployment> deployment = tester.redeployFromLocalActive(); @@ -45,7 +45,7 @@ public class RedeployTest { public void testNoRedeploy() { List<ModelFactory> modelFactories = List.of(createModelFactory(Clock.systemUTC()), createFailingModelFactory(Version.fromString("1.0.0"))); - DeployTester tester = new DeployTester(modelFactories); + DeployTester tester = new DeployTester.Builder().modelFactories(modelFactories).build(); ApplicationId id = ApplicationId.from(tester.tenant().getName(), ApplicationName.from("default"), InstanceName.from("default")); |