summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2020-09-24 13:55:44 +0200
committerValerij Fredriksen <valerij92@gmail.com>2020-09-24 13:55:44 +0200
commit0d3b36d44a88084dd55a33d3995a5f5d39c89a0c (patch)
tree84f3ecd658a16a22cdc63334e86ee4f770ebf8e1 /configserver
parent6c6e773f39bf88b66ef1b4d0782f9a0025b244a0 (diff)
Create DeployTester builder
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java23
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java165
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java26
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java4
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"));