diff options
33 files changed, 375 insertions, 366 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java b/configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java index ec4523c4ba0..35a6dc8b74b 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/GlobalComponentRegistry.java @@ -1,14 +1,8 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server; -import com.yahoo.cloud.config.ConfigserverConfig; -import com.yahoo.config.model.api.ConfigDefinitionRepo; -import com.yahoo.config.provision.Zone; -import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.tenant.TenantListener; -import java.time.Clock; - /** * Interface representing all global config server components used within the config server. * @@ -16,12 +10,6 @@ import java.time.Clock; */ public interface GlobalComponentRegistry { - ConfigserverConfig getConfigserverConfig(); TenantListener getTenantListener(); ReloadListener getReloadListener(); - ConfigDefinitionRepo getStaticConfigDefinitionRepo(); - ModelFactoryRegistry getModelFactoryRegistry(); - Zone getZone(); - Clock getClock(); - ConfigServerDB getConfigServerDB(); } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java b/configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java index 433e0971c61..27fc9a79ea0 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistry.java @@ -2,15 +2,9 @@ package com.yahoo.vespa.config.server; import com.google.inject.Inject; -import com.yahoo.cloud.config.ConfigserverConfig; -import com.yahoo.config.model.api.ConfigDefinitionRepo; -import com.yahoo.config.provision.Zone; -import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.rpc.RpcServer; import com.yahoo.vespa.config.server.tenant.TenantListener; -import java.time.Clock; - /** * Registry containing all the "static"/"global" components in a config server in one place. * @@ -18,49 +12,17 @@ import java.time.Clock; */ public class InjectedGlobalComponentRegistry implements GlobalComponentRegistry { - private final ModelFactoryRegistry modelFactoryRegistry; private final RpcServer rpcServer; - private final ConfigserverConfig configserverConfig; - private final ConfigDefinitionRepo staticConfigDefinitionRepo; - private final Zone zone; - private final ConfigServerDB configServerDB; @SuppressWarnings("WeakerAccess") @Inject - public InjectedGlobalComponentRegistry(ModelFactoryRegistry modelFactoryRegistry, - RpcServer rpcServer, - ConfigserverConfig configserverConfig, - ConfigDefinitionRepo staticConfigDefinitionRepo, - Zone zone, - ConfigServerDB configServerDB) { - this.modelFactoryRegistry = modelFactoryRegistry; + public InjectedGlobalComponentRegistry(RpcServer rpcServer) { this.rpcServer = rpcServer; - this.configserverConfig = configserverConfig; - this.staticConfigDefinitionRepo = staticConfigDefinitionRepo; - this.zone = zone; - this.configServerDB = configServerDB; } @Override - public ConfigserverConfig getConfigserverConfig() { return configserverConfig; } - @Override public TenantListener getTenantListener() { return rpcServer; } @Override public ReloadListener getReloadListener() { return rpcServer; } - @Override - public ConfigDefinitionRepo getStaticConfigDefinitionRepo() { return staticConfigDefinitionRepo; } - @Override - public ModelFactoryRegistry getModelFactoryRegistry() { return modelFactoryRegistry; } - - @Override - public Zone getZone() { - return zone; - } - - @Override - public Clock getClock() {return Clock.systemUTC();} - - @Override - public ConfigServerDB getConfigServerDB() { return configServerDB; } } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java index 2b9488b7fc7..6542014c787 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java @@ -13,6 +13,7 @@ import com.yahoo.transaction.Transaction; import com.yahoo.vespa.config.ConfigKey; import com.yahoo.vespa.config.GetConfigRequest; import com.yahoo.vespa.config.protocol.ConfigResponse; +import com.yahoo.vespa.config.server.ConfigServerDB; import com.yahoo.vespa.config.server.GlobalComponentRegistry; import com.yahoo.vespa.config.server.NotFoundException; import com.yahoo.vespa.config.server.ReloadListener; @@ -91,17 +92,19 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica public static TenantApplications create(GlobalComponentRegistry componentRegistry, HostRegistry hostRegistry, TenantName tenantName, - Curator curator) { + Curator curator, + ConfigserverConfig configserverConfig, + Clock clock) { return new TenantApplications(tenantName, curator, new StripedExecutor<>(new InThreadExecutorService()), new InThreadExecutorService(), Metrics.createTestMetrics(), componentRegistry.getReloadListener(), - componentRegistry.getConfigserverConfig(), + configserverConfig, hostRegistry, - new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName), - componentRegistry.getClock()); + new TenantFileSystemDirs(new ConfigServerDB(configserverConfig), tenantName), + clock); } /** The curator backed ZK storage of this. */ diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/status/StatusHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/status/StatusHandler.java index 0014d66026b..d2de843303e 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/status/StatusHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/status/StatusHandler.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.config.server.http.status; import com.google.inject.Inject; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.model.api.ModelFactory; import com.yahoo.component.Version; import com.yahoo.container.jdisc.HttpRequest; @@ -12,6 +13,7 @@ import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.config.server.GlobalComponentRegistry; import com.yahoo.vespa.config.server.http.HttpHandler; import com.yahoo.vespa.config.server.http.JSONResponse; +import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import static com.yahoo.jdisc.http.HttpResponse.Status.OK; @@ -22,33 +24,35 @@ import static com.yahoo.jdisc.http.HttpResponse.Status.OK; */ public class StatusHandler extends HttpHandler { - private final GlobalComponentRegistry componentRegistry; + private final ModelFactoryRegistry modelFactoryRegistry; + private final ConfigserverConfig configserverConfig; @Inject - public StatusHandler(Context ctx, GlobalComponentRegistry componentRegistry) { + public StatusHandler(Context ctx, ModelFactoryRegistry modelFactoryRegistry, ConfigserverConfig configserverConfig) { super(ctx); - this.componentRegistry = componentRegistry; + this.modelFactoryRegistry = modelFactoryRegistry; + this.configserverConfig = configserverConfig; } @Override public HttpResponse handleGET(HttpRequest req) { - return new StatusResponse(OK, componentRegistry); + return new StatusResponse(OK, modelFactoryRegistry, configserverConfig); } private static class StatusResponse extends JSONResponse { - StatusResponse(int status, GlobalComponentRegistry componentRegistry) { + StatusResponse(int status, ModelFactoryRegistry modelFactoryRegistry, ConfigserverConfig configserverConfig) { super(status); Cursor configCursor = object.setObject("configserverConfig"); - SlimeUtils.copyObject(ConfigPayload.fromInstance(componentRegistry.getConfigserverConfig()).getSlime().get(), + SlimeUtils.copyObject(ConfigPayload.fromInstance(configserverConfig).getSlime().get(), configCursor); Cursor modelVersionsCursor = object.setArray("modelVersions"); - componentRegistry.getModelFactoryRegistry().getFactories().stream() - .map(ModelFactory::version) - .map(Version::toFullString) - .forEach(modelVersionsCursor::addString); + modelFactoryRegistry.getFactories().stream() + .map(ModelFactory::version) + .map(Version::toFullString) + .forEach(modelVersionsCursor::addString); } } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java index f779cad245a..31c265b24df 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.config.server.modelfactory; import com.google.common.collect.ImmutableSet; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.component.Version; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.model.api.ConfigDefinitionRepo; @@ -14,6 +15,7 @@ import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.DockerImage; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.secretstore.SecretStore; import com.yahoo.vespa.config.server.GlobalComponentRegistry; import com.yahoo.vespa.config.server.ServerCache; @@ -71,17 +73,21 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> { PermanentApplicationPackage permanentApplicationPackage, FlagSource flagSource, SecretStore secretStore, - HostProvisionerProvider hostProvisionerProvider) { - super(globalComponentRegistry.getModelFactoryRegistry(), - globalComponentRegistry.getConfigserverConfig(), - globalComponentRegistry.getZone(), + HostProvisionerProvider hostProvisionerProvider, + ConfigserverConfig configserverConfig, + Zone zone, + ModelFactoryRegistry modelFactoryRegistry, + ConfigDefinitionRepo configDefinitionRepo) { + super(modelFactoryRegistry, + configserverConfig, + zone, hostProvisionerProvider); this.tenant = tenant; this.applicationGeneration = applicationGeneration; this.zkClient = zkClient; this.currentActiveApplicationSet = currentActiveApplicationSet; this.permanentApplicationPackage = permanentApplicationPackage; - this.configDefinitionRepo = globalComponentRegistry.getStaticConfigDefinitionRepo(); + this.configDefinitionRepo = configDefinitionRepo; this.metrics = metrics; this.curator = curator; this.flagSource = flagSource; diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java index 041768ec41e..725ad3b5503 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java @@ -3,15 +3,18 @@ package com.yahoo.vespa.config.server.session; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.concurrent.StripedExecutor; import com.yahoo.config.FileReference; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.application.api.DeployLogger; +import com.yahoo.config.model.api.ConfigDefinitionRepo; import com.yahoo.config.model.application.provider.DeployData; import com.yahoo.config.model.application.provider.FilesApplicationPackage; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.secretstore.SecretStore; import com.yahoo.io.IOUtils; import com.yahoo.lang.SettableOptional; @@ -19,6 +22,7 @@ import com.yahoo.path.Path; import com.yahoo.transaction.AbstractTransaction; import com.yahoo.transaction.NestedTransaction; import com.yahoo.transaction.Transaction; +import com.yahoo.vespa.config.server.ConfigServerDB; import com.yahoo.vespa.config.server.GlobalComponentRegistry; import com.yahoo.vespa.config.server.TimeoutBudget; import com.yahoo.vespa.config.server.application.ApplicationSet; @@ -28,6 +32,7 @@ import com.yahoo.vespa.config.server.configchange.ConfigChangeActions; import com.yahoo.vespa.config.server.deploy.TenantFileSystemDirs; import com.yahoo.vespa.config.server.filedistribution.FileDirectory; import com.yahoo.vespa.config.server.modelfactory.ActivatedModelsBuilder; +import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.monitoring.MetricUpdater; import com.yahoo.vespa.config.server.monitoring.Metrics; import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; @@ -102,6 +107,11 @@ public class SessionRepository { private final SessionCounter sessionCounter; private final SecretStore secretStore; private final HostProvisionerProvider hostProvisionerProvider; + private final ConfigserverConfig configserverConfig; + private final ConfigServerDB configServerDB; + private final Zone zone; + private final ModelFactoryRegistry modelFactoryRegistry; + private final ConfigDefinitionRepo configDefinitionRepo; public SessionRepository(TenantName tenantName, GlobalComponentRegistry componentRegistry, @@ -114,25 +124,36 @@ public class SessionRepository { FlagSource flagSource, ExecutorService zkCacheExecutor, SecretStore secretStore, - HostProvisionerProvider hostProvisionerProvider) { + HostProvisionerProvider hostProvisionerProvider, + ConfigserverConfig configserverConfig, + ConfigServerDB configServerDB, + Zone zone, + Clock clock, + ModelFactoryRegistry modelFactoryRegistry, + ConfigDefinitionRepo configDefinitionRepo) { this.tenantName = tenantName; this.componentRegistry = componentRegistry; this.configCurator = ConfigCurator.create(curator); sessionCounter = new SessionCounter(configCurator, tenantName); this.sessionsPath = TenantRepository.getSessionsPath(tenantName); - this.clock = componentRegistry.getClock(); + this.clock = clock; this.curator = curator; - this.sessionLifetime = Duration.ofSeconds(componentRegistry.getConfigserverConfig().sessionLifetime()); + this.sessionLifetime = Duration.ofSeconds(configserverConfig.sessionLifetime()); this.zkWatcherExecutor = command -> zkWatcherExecutor.execute(tenantName, command); this.permanentApplicationPackage = permanentApplicationPackage; this.flagSource = flagSource; - this.tenantFileSystemDirs = new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName); + this.tenantFileSystemDirs = new TenantFileSystemDirs(configServerDB, tenantName); this.applicationRepo = applicationRepo; this.sessionPreparer = sessionPreparer; this.metrics = metrics; this.metricUpdater = metrics.getOrCreateMetricUpdater(Metrics.createDimensions(tenantName)); this.secretStore = secretStore; this.hostProvisionerProvider = hostProvisionerProvider; + this.configserverConfig = configserverConfig; + this.configServerDB = configServerDB; + this.zone = zone; + this.modelFactoryRegistry = modelFactoryRegistry; + this.configDefinitionRepo = configDefinitionRepo; loadSessions(); // Needs to be done before creating cache below this.directoryCache = curator.createDirectoryCache(sessionsPath.getAbsolute(), false, false, zkCacheExecutor); @@ -458,7 +479,11 @@ public class SessionRepository { permanentApplicationPackage, flagSource, secretStore, - hostProvisionerProvider); + hostProvisionerProvider, + configserverConfig, + zone, + modelFactoryRegistry, + configDefinitionRepo); // Read hosts allocated on the config server instance which created this SettableOptional<AllocatedHosts> allocatedHosts = new SettableOptional<>(applicationPackage.getAllocatedHosts()); @@ -671,7 +696,7 @@ public class SessionRepository { FileReference fileReference = sessionZKClient.readApplicationPackageReference(); log.log(Level.FINE, () -> "File reference for session id " + sessionId + ": " + fileReference); if (fileReference != null) { - File rootDir = new File(Defaults.getDefaults().underVespaHome(componentRegistry.getConfigserverConfig().fileReferencesDir())); + File rootDir = new File(Defaults.getDefaults().underVespaHome(configserverConfig.fileReferencesDir())); File sessionDir; FileDirectory fileDirectory = new FileDirectory(rootDir); try { @@ -709,7 +734,7 @@ public class SessionRepository { } private SessionZooKeeperClient createSessionZooKeeperClient(long sessionId) { - String serverId = componentRegistry.getConfigserverConfig().serverId(); + String serverId = configserverConfig.serverId(); return new SessionZooKeeperClient(curator, configCurator, tenantName, sessionId, serverId); } @@ -722,7 +747,7 @@ public class SessionRepository { } private File getSessionAppDir(long sessionId) { - return new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName).getUserApplicationDir(sessionId); + return new TenantFileSystemDirs(configServerDB, tenantName).getUserApplicationDir(sessionId); } private void updateSessionStateWatcher(long sessionId, RemoteSession remoteSession) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java index 7daf56df487..c97d562e081 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java @@ -7,18 +7,22 @@ import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.concurrent.DaemonThreadFactory; import com.yahoo.concurrent.StripedExecutor; import com.yahoo.concurrent.ThreadFactoryFactory; +import com.yahoo.config.model.api.ConfigDefinitionRepo; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.secretstore.SecretStore; import com.yahoo.path.Path; import com.yahoo.text.Utf8; import com.yahoo.transaction.Transaction; +import com.yahoo.vespa.config.server.ConfigServerDB; import com.yahoo.vespa.config.server.GlobalComponentRegistry; import com.yahoo.vespa.config.server.application.PermanentApplicationPackage; import com.yahoo.vespa.config.server.application.TenantApplications; import com.yahoo.vespa.config.server.deploy.TenantFileSystemDirs; import com.yahoo.vespa.config.server.filedistribution.FileDistributionFactory; import com.yahoo.vespa.config.server.host.HostRegistry; +import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.monitoring.MetricUpdater; import com.yahoo.vespa.config.server.monitoring.Metrics; import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; @@ -34,6 +38,7 @@ import org.apache.curator.framework.state.ConnectionState; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.data.Stat; +import java.time.Clock; import java.time.Duration; import java.time.Instant; import java.util.ArrayList; @@ -98,6 +103,12 @@ public class TenantRepository { private final FlagSource flagSource; private final SecretStore secretStore; private final HostProvisionerProvider hostProvisionerProvider; + private final ConfigserverConfig configserverConfig; + private final ConfigServerDB configServerDB; + private final Zone zone; + private final Clock clock; + private final ModelFactoryRegistry modelFactoryRegistry; + private final ConfigDefinitionRepo configDefinitionRepo; private final ExecutorService bootstrapExecutor; private final ScheduledExecutorService checkForRemovedApplicationsService = new ScheduledThreadPoolExecutor(1, new DaemonThreadFactory("check for removed applications")); @@ -115,17 +126,28 @@ public class TenantRepository { Metrics metrics, FlagSource flagSource, SecretStore secretStore, - HostProvisionerProvider hostProvisionerProvider) { + HostProvisionerProvider hostProvisionerProvider, + ConfigserverConfig configserverConfig, + ConfigServerDB configServerDB, + Zone zone, + ModelFactoryRegistry modelFactoryRegistry, + ConfigDefinitionRepo configDefinitionRepo) { this(componentRegistry, hostRegistry, curator, metrics, new StripedExecutor<>(), - new FileDistributionFactory(componentRegistry.getConfigserverConfig()), + new FileDistributionFactory(configserverConfig), flagSource, Executors.newFixedThreadPool(1, ThreadFactoryFactory.getThreadFactory(TenantRepository.class.getName())), secretStore, - hostProvisionerProvider); + hostProvisionerProvider, + configserverConfig, + configServerDB, + zone, + Clock.systemUTC(), + modelFactoryRegistry, + configDefinitionRepo); } public TenantRepository(GlobalComponentRegistry componentRegistry, @@ -137,10 +159,16 @@ public class TenantRepository { FlagSource flagSource, ExecutorService zkCacheExecutor, SecretStore secretStore, - HostProvisionerProvider hostProvisionerProvider) { + HostProvisionerProvider hostProvisionerProvider, + ConfigserverConfig configserverConfig, + ConfigServerDB configServerDB, + Zone zone, + Clock clock, + ModelFactoryRegistry modelFactoryRegistry, + ConfigDefinitionRepo configDefinitionRepo) { this.componentRegistry = componentRegistry; this.hostRegistry = hostRegistry; - ConfigserverConfig configserverConfig = componentRegistry.getConfigserverConfig(); + this.configserverConfig = configserverConfig; this.bootstrapExecutor = Executors.newFixedThreadPool(configserverConfig.numParallelTenantLoaders(), new DaemonThreadFactory("bootstrap tenants")); this.curator = curator; @@ -153,6 +181,11 @@ public class TenantRepository { this.flagSource = flagSource; this.secretStore = secretStore; this.hostProvisionerProvider = hostProvisionerProvider; + this.configServerDB = configServerDB; + this.zone = zone; + this.clock = clock; + this.modelFactoryRegistry = modelFactoryRegistry; + this.configDefinitionRepo = configDefinitionRepo; curator.framework().getConnectionStateListenable().addListener(this::stateChanged); @@ -180,7 +213,7 @@ public class TenantRepository { public synchronized Tenant addTenant(TenantName tenantName) { writeTenantPath(tenantName); - return createTenant(tenantName, componentRegistry.getClock().instant()); + return createTenant(tenantName, clock.instant()); } public void createAndWriteTenantMetaData(Tenant tenant) { @@ -258,7 +291,7 @@ public class TenantRepository { if (stat.isPresent()) return Instant.ofEpochMilli(stat.get().getCtime()); else - return componentRegistry.getClock().instant(); + return clock.instant(); } // Creates tenant and all its dependencies. This also includes loading active applications @@ -276,19 +309,19 @@ public class TenantRepository { zkCacheExecutor, metrics, componentRegistry.getReloadListener(), - componentRegistry.getConfigserverConfig(), + configserverConfig, hostRegistry, - new TenantFileSystemDirs(componentRegistry.getConfigServerDB(), tenantName), - componentRegistry.getClock()); - PermanentApplicationPackage permanentApplicationPackage = new PermanentApplicationPackage(componentRegistry.getConfigserverConfig()); - SessionPreparer sessionPreparer = new SessionPreparer(componentRegistry.getModelFactoryRegistry(), + new TenantFileSystemDirs(configServerDB, tenantName), + clock); + PermanentApplicationPackage permanentApplicationPackage = new PermanentApplicationPackage(configserverConfig); + SessionPreparer sessionPreparer = new SessionPreparer(modelFactoryRegistry, fileDistributionFactory, hostProvisionerProvider, permanentApplicationPackage, - componentRegistry.getConfigserverConfig(), - componentRegistry.getStaticConfigDefinitionRepo(), + configserverConfig, + configDefinitionRepo, curator, - componentRegistry.getZone(), + zone, flagSource, secretStore); SessionRepository sessionRepository = new SessionRepository(tenantName, @@ -302,7 +335,13 @@ public class TenantRepository { flagSource, zkCacheExecutor, secretStore, - hostProvisionerProvider); + hostProvisionerProvider, + configserverConfig, + configServerDB, + zone, + clock, + modelFactoryRegistry, + configDefinitionRepo); log.log(Level.INFO, "Adding tenant '" + tenantName + "'" + ", created " + created); Tenant tenant = new Tenant(tenantName, sessionRepository, applicationRepo, applicationRepo, created); notifyNewTenant(tenant); 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 36e1698d69f..1cbc4c1c6d6 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 @@ -123,12 +123,12 @@ public class ApplicationRepositoryTest { .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .configServerConfig(configserverConfig) - .clock(clock) .build(); InMemoryFlagSource flagSource = new InMemoryFlagSource(); tenantRepository = new TestTenantRepository.Builder() + .withClock(clock) .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) .withCurator(curator) .withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig)) .withFlagSource(flagSource) diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java index 9665e0095e9..84fa6a9db18 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/InjectedGlobalComponentRegistryTest.java @@ -2,50 +2,37 @@ package com.yahoo.vespa.config.server; import com.yahoo.cloud.config.ConfigserverConfig; -import com.yahoo.config.model.NullConfigModelRegistry; -import com.yahoo.config.model.api.ConfigDefinitionRepo; -import com.yahoo.config.provision.Zone; import com.yahoo.vespa.config.server.filedistribution.FileServer; import com.yahoo.vespa.config.server.host.ConfigRequestHostLivenessTracker; import com.yahoo.vespa.config.server.host.HostRegistry; -import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.monitoring.Metrics; -import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; import com.yahoo.vespa.config.server.rpc.RpcRequestHandlerProvider; import com.yahoo.vespa.config.server.rpc.RpcServer; import com.yahoo.vespa.config.server.rpc.security.NoopRpcAuthorizer; -import com.yahoo.vespa.model.VespaModelFactory; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import java.io.IOException; -import java.util.List; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; /** * @author Ulf Lilleengen */ public class InjectedGlobalComponentRegistryTest { - private ConfigserverConfig configserverConfig; private RpcServer rpcServer; - private ConfigDefinitionRepo defRepo; private GlobalComponentRegistry globalComponentRegistry; - private ModelFactoryRegistry modelFactoryRegistry; - private Zone zone; @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Before public void setupRegistry() throws IOException { - modelFactoryRegistry = new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry()))); - configserverConfig = new ConfigserverConfig( + ConfigserverConfig configserverConfig = new ConfigserverConfig( new ConfigserverConfig.Builder() .configServerDBDir(temporaryFolder.newFolder("serverdb").getAbsolutePath()) .configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath())); @@ -54,25 +41,13 @@ public class InjectedGlobalComponentRegistryTest { hostRegistry, new ConfigRequestHostLivenessTracker(), new FileServer(temporaryFolder.newFolder("filereferences")), new NoopRpcAuthorizer(), new RpcRequestHandlerProvider()); - defRepo = new StaticConfigDefinitionRepo(); - zone = Zone.defaultZone(); - globalComponentRegistry = - new InjectedGlobalComponentRegistry(modelFactoryRegistry, - rpcServer, - configserverConfig, - defRepo, - zone, - new ConfigServerDB(configserverConfig)); + globalComponentRegistry = new InjectedGlobalComponentRegistry(rpcServer); } @Test public void testThatAllComponentsAreSetup() { - assertThat(globalComponentRegistry.getModelFactoryRegistry(), is(modelFactoryRegistry)); - assertThat(globalComponentRegistry.getConfigserverConfig(), is(configserverConfig)); assertThat(globalComponentRegistry.getReloadListener().hashCode(), is(rpcServer.hashCode())); assertThat(globalComponentRegistry.getTenantListener().hashCode(), is(rpcServer.hashCode())); - assertThat(globalComponentRegistry.getStaticConfigDefinitionRepo(), is(defRepo)); - assertThat(globalComponentRegistry.getZone(), is(zone)); } } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java b/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java index 24f59ee8675..987289e347c 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/TestComponentRegistry.java @@ -1,124 +1,40 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server; -import com.yahoo.cloud.config.ConfigserverConfig; -import com.yahoo.config.model.NullConfigModelRegistry; -import com.yahoo.config.model.api.ConfigDefinitionRepo; -import com.yahoo.config.provision.Zone; import com.yahoo.vespa.config.server.application.TenantApplicationsTest; -import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.tenant.MockTenantListener; import com.yahoo.vespa.config.server.tenant.TenantListener; -import com.yahoo.vespa.model.VespaModelFactory; - -import java.nio.file.Files; -import java.time.Clock; -import java.util.Collections; - -import static com.yahoo.yolean.Exceptions.uncheck; /** * @author Ulf Lilleengen */ public class TestComponentRegistry implements GlobalComponentRegistry { - private final ConfigserverConfig configserverConfig; - private final ConfigDefinitionRepo defRepo; private final ReloadListener reloadListener; private final TenantListener tenantListener; - private final ModelFactoryRegistry modelFactoryRegistry; - private final Zone zone; - private final Clock clock; - private final ConfigServerDB configServerDB; - private TestComponentRegistry(ModelFactoryRegistry modelFactoryRegistry, - ConfigserverConfig configserverConfig, - ConfigDefinitionRepo defRepo, - ReloadListener reloadListener, - TenantListener tenantListener, - Zone zone, - Clock clock) { - this.configserverConfig = configserverConfig; + private TestComponentRegistry(ReloadListener reloadListener, TenantListener tenantListener) { this.reloadListener = reloadListener; this.tenantListener = tenantListener; - this.defRepo = defRepo; - this.modelFactoryRegistry = modelFactoryRegistry; - this.zone = zone; - this.clock = clock; - this.configServerDB = new ConfigServerDB(configserverConfig); } public static class Builder { - private ConfigserverConfig configserverConfig = new ConfigserverConfig( - new ConfigserverConfig.Builder() - .configServerDBDir(uncheck(() -> Files.createTempDirectory("serverdb")).toString()) - .configDefinitionsDir(uncheck(() -> Files.createTempDirectory("configdefinitions")).toString()) - .sessionLifetime(5)); - private ConfigDefinitionRepo defRepo = new StaticConfigDefinitionRepo(); private ReloadListener reloadListener = new TenantApplicationsTest.MockReloadListener(); private final MockTenantListener tenantListener = new MockTenantListener(); - private ModelFactoryRegistry modelFactoryRegistry = new ModelFactoryRegistry(Collections.singletonList(new VespaModelFactory(new NullConfigModelRegistry()))); - private Zone zone = Zone.defaultZone(); - private Clock clock = Clock.systemUTC(); - - public Builder configServerConfig(ConfigserverConfig configserverConfig) { - this.configserverConfig = configserverConfig; - return this; - } - - public Builder modelFactoryRegistry(ModelFactoryRegistry modelFactoryRegistry) { - this.modelFactoryRegistry = modelFactoryRegistry; - return this; - } - - public Builder zone(Zone zone) { - this.zone = zone; - return this; - } - - public Builder clock(Clock clock) { - this.clock = clock; - return this; - } public Builder reloadListener(ReloadListener reloadListener) { this.reloadListener = reloadListener; return this; } - public Builder configDefinitionRepo(ConfigDefinitionRepo configDefinitionRepo) { - this.defRepo = configDefinitionRepo; - return this; - } - public TestComponentRegistry build() { - return new TestComponentRegistry(modelFactoryRegistry, - configserverConfig, - defRepo, - reloadListener, - tenantListener, - zone, - clock); + return new TestComponentRegistry(reloadListener, tenantListener); } } @Override - public ConfigserverConfig getConfigserverConfig() { return configserverConfig; } - @Override public TenantListener getTenantListener() { return tenantListener; } @Override public ReloadListener getReloadListener() { return reloadListener; } - @Override - public ConfigDefinitionRepo getStaticConfigDefinitionRepo() { return defRepo; } - @Override - public ModelFactoryRegistry getModelFactoryRegistry() { return modelFactoryRegistry; } - @Override - public Zone getZone() { - return zone; - } - @Override - public Clock getClock() { return clock;} - @Override - public ConfigServerDB getConfigServerDB() { return configServerDB;} } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java index 732c9385608..d44a037e71e 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/application/TenantApplicationsTest.java @@ -31,6 +31,7 @@ import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; +import java.time.Clock; import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashMap; @@ -60,6 +61,7 @@ public class TenantApplicationsTest { private CuratorFramework curatorFramework; private TestComponentRegistry componentRegistry; private TenantApplications applications; + private ConfigserverConfig configserverConfig; @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); @@ -68,24 +70,24 @@ public class TenantApplicationsTest { public void setup() throws IOException { curator = new MockCurator(); curatorFramework = curator.framework(); - ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder() + configserverConfig = new ConfigserverConfig.Builder() .payloadCompressionType(ConfigserverConfig.PayloadCompressionType.Enum.UNCOMPRESSED) .configServerDBDir(tempFolder.newFolder("configserverdb").getAbsolutePath()) .configDefinitionsDir(tempFolder.newFolder("configdefinitions").getAbsolutePath()) .build(); componentRegistry = new TestComponentRegistry.Builder() - .configServerConfig(configserverConfig) - .modelFactoryRegistry(createRegistry()) .reloadListener(listener) .build(); HostRegistry hostRegistry = new HostRegistry(); TenantRepository tenantRepository = new TestTenantRepository.Builder() .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) .withCurator(curator) + .withModelFactoryRegistry(createRegistry()) .build(); tenantRepository.addTenant(TenantRepository.HOSTED_VESPA_TENANT); tenantRepository.addTenant(tenantName); - applications = TenantApplications.create(componentRegistry, hostRegistry, tenantName, curator); + applications = TenantApplications.create(componentRegistry, hostRegistry, tenantName, curator, configserverConfig, Clock.systemUTC()); } @Test @@ -178,7 +180,12 @@ public class TenantApplicationsTest { @Test public void testListConfigs() throws IOException, SAXException { - applications = TenantApplications.create(componentRegistry, new HostRegistry(), TenantName.defaultName(), new MockCurator()); + applications = TenantApplications.create(componentRegistry, + new HostRegistry(), + TenantName.defaultName(), + new MockCurator(), + configserverConfig, + Clock.systemUTC()); assertdefaultAppNotFound(); VespaModel model = new VespaModel(FilesApplicationPackage.fromFile(new File("src/test/apps/app"))); @@ -213,7 +220,7 @@ public class TenantApplicationsTest { } private TenantApplications createZKAppRepo() { - return TenantApplications.create(componentRegistry, new HostRegistry(), tenantName, curator); + return TenantApplications.create(componentRegistry, new HostRegistry(), tenantName, curator, configserverConfig, Clock.systemUTC()); } private static ApplicationId createApplicationId(String name) { 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 eb8f633f4ba..c1c2867285d 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 @@ -283,17 +283,17 @@ public class DeployTester { List<ModelFactory> modelFactories = Optional.ofNullable(this.modelFactories) .orElseGet(() -> List.of(createModelFactory(clock))); - TestComponentRegistry.Builder testComponentRegistryBuilder = new TestComponentRegistry.Builder() - .clock(clock) - .configServerConfig(configserverConfig) - .modelFactoryRegistry(new ModelFactoryRegistry(modelFactories)) - .zone(zone); + TestComponentRegistry.Builder testComponentRegistryBuilder = new TestComponentRegistry.Builder(); TestTenantRepository.Builder builder = new TestTenantRepository.Builder() + .withClock(clock) .withComponentRegistry(testComponentRegistryBuilder.build()) + .withConfigserverConfig(configserverConfig) .withCurator(curator) + .withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig)) .withMetrics(Optional.ofNullable(metrics).orElse(Metrics.createTestMetrics())) - .withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig)); + .withModelFactoryRegistry((new ModelFactoryRegistry(modelFactories))) + .withZone(zone); if (configserverConfig.hostedVespa()) builder.withHostProvisionerProvider(HostProvisionerProvider.withProvisioner(provisioner, true)); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java index 3631922f844..030ff243c21 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpGetConfigHandlerTest.java @@ -9,7 +9,6 @@ import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.MockProvisioner; import com.yahoo.vespa.config.server.TestComponentRegistry; -import com.yahoo.vespa.config.server.TestConfigDefinitionRepo; import com.yahoo.vespa.config.server.application.OrchestratorMock; import com.yahoo.vespa.config.server.session.PrepareParams; import com.yahoo.vespa.config.server.tenant.TenantRepository; @@ -55,11 +54,11 @@ public class HttpGetConfigHandlerTest { .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .configDefinitionRepo(new TestConfigDefinitionRepo()) - .configServerConfig(configserverConfig) + TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); + TenantRepository tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) .build(); - TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); tenantRepository.addTenant(tenant); ApplicationRepository applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java index cdf89eda367..56a0049247a 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/HttpListConfigsHandlerTest.java @@ -10,7 +10,6 @@ import com.yahoo.vespa.config.ConfigKey; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.MockProvisioner; import com.yahoo.vespa.config.server.TestComponentRegistry; -import com.yahoo.vespa.config.server.TestConfigDefinitionRepo; import com.yahoo.vespa.config.server.application.OrchestratorMock; import com.yahoo.vespa.config.server.http.HttpListConfigsHandler.ListConfigsResponse; import com.yahoo.vespa.config.server.session.PrepareParams; @@ -60,11 +59,11 @@ public class HttpListConfigsHandlerTest { .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .configDefinitionRepo(new TestConfigDefinitionRepo()) - .configServerConfig(configserverConfig) + TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); + TenantRepository tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) .build(); - TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); tenantRepository.addTenant(tenant); ApplicationRepository applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/status/StatusHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/status/StatusHandlerTest.java index 52e9591e63c..22bf582668e 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/status/StatusHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/status/StatusHandlerTest.java @@ -1,16 +1,19 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.http.status; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.yahoo.cloud.config.ConfigserverConfig; +import com.yahoo.config.model.NullConfigModelRegistry; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; -import com.yahoo.vespa.config.server.TestComponentRegistry; import com.yahoo.vespa.config.server.http.SessionHandlerTest; +import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; +import com.yahoo.vespa.model.VespaModelFactory; import org.junit.Test; import java.io.IOException; +import java.util.List; import static com.yahoo.jdisc.http.HttpRequest.Method.GET; import static org.junit.Assert.assertEquals; @@ -24,15 +27,15 @@ public class StatusHandlerTest { @Test public void require_that_handler_works() throws IOException { - TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); - StatusHandler handler = new StatusHandler(StatusHandler.testOnlyContext(), componentRegistry); + ModelFactoryRegistry modelFactoryRegistry = new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry()))); + ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder().build(); + StatusHandler handler = new StatusHandler(StatusHandler.testOnlyContext(), modelFactoryRegistry, configserverConfig); HttpResponse response = handler.handle(HttpRequest.createTestRequest("/status", GET)); JsonNode jsonNode = mapper.readTree(SessionHandlerTest.getRenderedString(response)); - ConfigserverConfig expectedConfig = componentRegistry.getConfigserverConfig(); - assertEquals(expectedConfig.rpcport(), jsonNode.get("configserverConfig").get("rpcport").asInt()); - assertEquals(expectedConfig.applicationDirectory(), jsonNode.get("configserverConfig").get("applicationDirectory").asText()); + assertEquals(configserverConfig.rpcport(), jsonNode.get("configserverConfig").get("rpcport").asInt()); + assertEquals(configserverConfig.applicationDirectory(), jsonNode.get("configserverConfig").get("applicationDirectory").asText()); assertEquals(1, jsonNode.get("modelVersions").size()); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java index 02129a1b5cd..085c3913b9b 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationContentHandlerTest.java @@ -25,7 +25,6 @@ import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.IOException; -import java.time.Clock; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertNotNull; @@ -52,18 +51,17 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase { @Before public void setupHandler() throws IOException { - ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder() .configServerDBDir(temporaryFolder.newFolder("serverdb").getAbsolutePath()) .configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .configServerConfig(configserverConfig) - .build(); - Clock clock = componentRegistry.getClock(); + TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); - TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); + TenantRepository tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) + .build(); tenantRepository.addTenant(tenantName1); tenantRepository.addTenant(tenantName2); @@ -71,7 +69,6 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase { .withTenantRepository(tenantRepository) .withProvisioner(new MockProvisioner()) .withOrchestrator(new OrchestratorMock()) - .withClock(clock) .withConfigserverConfig(configserverConfig) .build(); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java index 0e0fd5babd5..bc6ee90a9a7 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java @@ -109,16 +109,15 @@ public class ApplicationHandlerTest { .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .modelFactoryRegistry(new ModelFactoryRegistry(modelFactories)) - .configServerConfig(configserverConfig) - .clock(clock) - .build(); + TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); provisioner = new MockProvisioner(); tenantRepository = new TestTenantRepository.Builder() + .withClock(clock) .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) .withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig)) .withHostProvisionerProvider(HostProvisionerProvider.withProvisioner(provisioner, false)) + .withModelFactoryRegistry(new ModelFactoryRegistry(modelFactories)) .build(); tenantRepository.addTenant(mytenantName); orchestrator = new OrchestratorMock(); @@ -126,7 +125,7 @@ public class ApplicationHandlerTest { .withTenantRepository(tenantRepository) .withProvisioner(provisioner) .withOrchestrator(orchestrator) - .withClock(componentRegistry.getClock()) + .withClock(clock) .withTesterClient(testerClient) .withLogRetriever(logRetriever) .withConfigserverConfig(configserverConfig) diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java index 671faa42f7b..4d4a06dd05c 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HostHandlerTest.java @@ -54,10 +54,11 @@ public class HostHandlerTest { .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .zone(zone) - .configServerConfig(configserverConfig) .build(); - TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); + TenantRepository tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) + .build(); tenantRepository.addTenant(mytenant); applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java index d32734cd571..9bb66b0723c 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpGetConfigHandlerTest.java @@ -11,7 +11,6 @@ import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.MockProvisioner; import com.yahoo.vespa.config.server.TestComponentRegistry; -import com.yahoo.vespa.config.server.TestConfigDefinitionRepo; import com.yahoo.vespa.config.server.application.OrchestratorMock; import com.yahoo.vespa.config.server.http.HandlerTest; import com.yahoo.vespa.config.server.http.HttpConfigRequest; @@ -64,13 +63,11 @@ public class HttpGetConfigHandlerTest { .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .configDefinitionRepo(new TestConfigDefinitionRepo()) - .configServerConfig(configserverConfig) - .build(); + TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); MockProvisioner provisioner = new MockProvisioner(); TenantRepository tenantRepository = new TestTenantRepository.Builder() .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) .withHostProvisionerProvider(HostProvisionerProvider.withProvisioner(provisioner, false)) .build(); tenantRepository.addTenant(tenant); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java index cf04c8df56c..8a2f02629ea 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/HttpListConfigsHandlerTest.java @@ -13,9 +13,7 @@ import com.yahoo.vespa.config.ConfigKey; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.MockProvisioner; import com.yahoo.vespa.config.server.TestComponentRegistry; -import com.yahoo.vespa.config.server.TestConfigDefinitionRepo; import com.yahoo.vespa.config.server.application.OrchestratorMock; -import com.yahoo.vespa.config.server.host.HostRegistry; import com.yahoo.vespa.config.server.http.HandlerTest; import com.yahoo.vespa.config.server.http.HttpErrorResponse; import com.yahoo.vespa.config.server.http.v2.HttpListConfigsHandler.ListConfigsResponse; @@ -68,11 +66,11 @@ public class HttpListConfigsHandlerTest { .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .configDefinitionRepo(new TestConfigDefinitionRepo()) - .configServerConfig(configserverConfig) + TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); + TenantRepository tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) .build(); - TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); tenantRepository.addTenant(tenant); ApplicationRepository applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.java index e3930c2784d..7cabd9ea7e3 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandlerTest.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.http.v2; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; @@ -16,7 +17,9 @@ import com.yahoo.vespa.config.server.http.SessionHandlerTest; import com.yahoo.vespa.config.server.tenant.TenantRepository; import com.yahoo.vespa.config.server.tenant.TestTenantRepository; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; import java.io.IOException; @@ -40,9 +43,19 @@ public class ListApplicationsHandlerTest { private TenantApplications applicationRepo, applicationRepo2; private ListApplicationsHandler handler; + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Before - public void setup() { - TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); + public void setup() throws IOException { + ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder() + .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath()) + .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) + .build(); + TenantRepository tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) + .build(); tenantRepository.addTenant(mytenant); tenantRepository.addTenant(foobar); applicationRepo = tenantRepository.getTenant(mytenant).getApplicationRepo(); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java index 24176d17c38..c782a8d2555 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionActiveHandlerTest.java @@ -34,6 +34,7 @@ import org.junit.rules.TemporaryFolder; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.time.Clock; import java.time.Duration; import java.util.List; @@ -58,9 +59,9 @@ public class SessionActiveHandlerTest { private static final String pathPrefix = "/application/v2/tenant/" + tenantName + "/session/"; private MockProvisioner provisioner; - private TestComponentRegistry componentRegistry; private ApplicationRepository applicationRepository; private SessionActiveHandler handler; + private final Clock clock = Clock.systemUTC(); @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @@ -74,17 +75,18 @@ public class SessionActiveHandlerTest { .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - componentRegistry = new TestComponentRegistry.Builder() - .modelFactoryRegistry(new ModelFactoryRegistry(List.of((modelFactory)))) - .configServerConfig(configserverConfig) + TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); + TenantRepository tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) + .withModelFactoryRegistry(new ModelFactoryRegistry(List.of((modelFactory)))) .build(); - TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); tenantRepository.addTenant(tenantName); applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) .withProvisioner(provisioner) .withOrchestrator(new OrchestratorMock()) - .withClock(componentRegistry.getClock()) + .withClock(clock) .withConfigserverConfig(configserverConfig) .build(); handler = createHandler(); @@ -135,7 +137,7 @@ public class SessionActiveHandlerTest { void invoke() { long sessionId = applicationRepository.createSession(applicationId(), - new TimeoutBudget(componentRegistry.getClock(), Duration.ofSeconds(10)), + new TimeoutBudget(clock, Duration.ofSeconds(10)), testApp); applicationRepository.prepare(sessionId, new PrepareParams.Builder().applicationId(applicationId()).build()); actResponse = handler.handle(createTestRequest(pathPrefix, HttpRequest.Method.PUT, Cmd.ACTIVE, sessionId, subPath)); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java index 867dbdfe65a..e47b270a74b 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionContentHandlerTest.java @@ -30,6 +30,7 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.time.Clock; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertNotNull; @@ -42,7 +43,6 @@ public class SessionContentHandlerTest extends ContentHandlerTestBase { private static final TenantName tenantName = TenantName.from("contenttest"); private static final File testApp = new File("src/test/apps/content"); - private TestComponentRegistry componentRegistry; private TenantRepository tenantRepository; private SessionContentHandler handler = null; private long sessionId; @@ -57,11 +57,12 @@ public class SessionContentHandlerTest extends ContentHandlerTestBase { .configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - componentRegistry = new TestComponentRegistry.Builder() - .configServerConfig(configserverConfig) - .build(); + TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); - tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); + tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) + .build(); tenantRepository.addTenant(tenantName); ApplicationRepository applicationRepository = new ApplicationRepository.Builder() @@ -192,7 +193,7 @@ public class SessionContentHandlerTest extends ContentHandlerTestBase { .withTenantRepository(tenantRepository) .withProvisioner(new MockProvisioner()) .withOrchestrator(new OrchestratorMock()) - .withClock(componentRegistry.getClock()) + .withClock(Clock.systemUTC()) .build() ); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java index 56afe1e4a08..c7690a70597 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java @@ -1,6 +1,7 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.http.v2; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.application.api.ApplicationFile; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.TenantName; @@ -18,13 +19,16 @@ import com.yahoo.vespa.config.server.tenant.TenantRepository; import com.yahoo.vespa.config.server.tenant.TestTenantRepository; import org.junit.Before; import org.junit.Ignore; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; +import java.time.Clock; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -61,14 +65,23 @@ public class SessionCreateHandlerTest extends SessionHandlerTest { postHeaders.put(ApplicationApiHandler.contentTypeHeader, ApplicationApiHandler.APPLICATION_X_GZIP); } + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Before - public void setupRepo() { - TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); + public void setupRepo() throws IOException { + ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder() + .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath()) + .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) + .build(); + TenantRepository tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) + .build(); applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) .withProvisioner(new MockProvisioner()) .withOrchestrator(new OrchestratorMock()) - .withClock(componentRegistry.getClock()) .build(); tenantRepository.addTenant(tenant); pathPrefix = "/application/v2/tenant/" + tenant + "/session/"; @@ -165,7 +178,7 @@ public class SessionCreateHandlerTest extends SessionHandlerTest { private SessionCreateHandler createHandler() { return new SessionCreateHandler(SessionCreateHandler.testOnlyContext(), applicationRepository, - componentRegistry.getConfigserverConfig()); + new ConfigserverConfig.Builder().build()); } private HttpRequest post() throws FileNotFoundException { diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java index b87f24cf06d..92ddf4c29f4 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java @@ -61,7 +61,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest { private TimeoutBudget timeoutBudget; private ApplicationRepository applicationRepository; - private TestComponentRegistry componentRegistry; + private ConfigserverConfig configserverConfig; private String preparedMessage = " prepared.\"}"; private String tenantMessage = ""; private TenantRepository tenantRepository; @@ -71,18 +71,18 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest { @Before public void setupRepo() throws IOException { - ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder() + configserverConfig = new ConfigserverConfig.Builder() .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath()) .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - componentRegistry = new TestComponentRegistry.Builder() - .configServerConfig(configserverConfig) + TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() .build(); - Clock clock = componentRegistry.getClock(); + Clock clock = Clock.systemUTC(); timeoutBudget = new TimeoutBudget(clock, Duration.ofSeconds(10)); tenantRepository = new TestTenantRepository.Builder() .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) .withCurator(curator) .build(); tenantRepository.addTenant(tenant); @@ -255,7 +255,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest { String exceptionMessage = "Out of capacity"; FailingSessionPrepareHandler handler = new FailingSessionPrepareHandler(SessionPrepareHandler.testOnlyContext(), applicationRepository, - componentRegistry.getConfigserverConfig(), + configserverConfig, new OutOfCapacityException(exceptionMessage)); HttpResponse response = handler.handle(createTestRequest(pathPrefix, HttpRequest.Method.PUT, Cmd.PREPARED, sessionId)); assertEquals(400, response.getStatus()); @@ -270,7 +270,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest { String exceptionMessage = "nullpointer thrown in test handler"; FailingSessionPrepareHandler handler = new FailingSessionPrepareHandler(SessionPrepareHandler.testOnlyContext(), applicationRepository, - componentRegistry.getConfigserverConfig(), + configserverConfig, new NullPointerException(exceptionMessage)); HttpResponse response = handler.handle(createTestRequest(pathPrefix, HttpRequest.Method.PUT, Cmd.PREPARED, sessionId)); assertEquals(500, response.getStatus()); @@ -285,7 +285,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest { long sessionId = applicationRepository.createSession(applicationId(), timeoutBudget, app); FailingSessionPrepareHandler handler = new FailingSessionPrepareHandler(SessionPrepareHandler.testOnlyContext(), applicationRepository, - componentRegistry.getConfigserverConfig(), + configserverConfig, new ApplicationLockException(new UncheckedTimeoutException(exceptionMessage))); HttpResponse response = handler.handle(createTestRequest(pathPrefix, HttpRequest.Method.PUT, Cmd.PREPARED, sessionId)); assertEquals(500, response.getStatus()); @@ -320,10 +320,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest { } private SessionHandler createHandler() { - return new SessionPrepareHandler( - SessionPrepareHandler.testOnlyContext(), - applicationRepository, - componentRegistry.getConfigserverConfig()); + return new SessionPrepareHandler(SessionPrepareHandler.testOnlyContext(), applicationRepository, configserverConfig); } private HttpResponse request(HttpRequest.Method put, long l) { diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java index d9f5f094023..37f0f2c5e2f 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/TenantHandlerTest.java @@ -56,9 +56,11 @@ public class TenantHandlerTest { .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .configServerConfig(configserverConfig) .build(); - tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); + tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) + .build(); applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) .withProvisioner(new MockProvisioner()) diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java index 3e9cbc042bd..af26f2287c1 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/MaintainerTester.java @@ -41,14 +41,13 @@ class MaintainerTester { .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .build(); - GlobalComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .clock(clock) - .configServerConfig(configserverConfig) - .modelFactoryRegistry(new ModelFactoryRegistry(List.of(new DeployTester.CountingModelFactory(clock)))) - .build(); + GlobalComponentRegistry componentRegistry = new TestComponentRegistry.Builder().build(); tenantRepository = new TestTenantRepository.Builder() + .withClock(clock) .withComponentRegistry(componentRegistry) .withHostProvisionerProvider(HostProvisionerProvider.withProvisioner(provisioner, true)) + .withConfigserverConfig(configserverConfig) + .withModelFactoryRegistry(new ModelFactoryRegistry(List.of(new DeployTester.CountingModelFactory(clock)))) .build(); applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java index ffc60d01732..03ef4825b4c 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java @@ -87,13 +87,12 @@ public class RpcTester implements AutoCloseable { configserverConfig = new ConfigserverConfig(configBuilder); rpcServer = createRpcServer(configserverConfig); TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() - .configDefinitionRepo(new TestConfigDefinitionRepo()) - .configServerConfig(configserverConfig) .reloadListener(rpcServer) .build(); tenantRepository = new TestTenantRepository.Builder() .withComponentRegistry(componentRegistry) .withHostRegistry(hostRegistry) + .withConfigserverConfig(configserverConfig) .build(); tenantRepository.addTenant(tenantName); startRpcServer(); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java index 5a49090031c..4995dc0decc 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java @@ -14,6 +14,7 @@ import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.CertificateNotReadyException; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.Zone; import com.yahoo.config.provision.exception.LoadBalancerServiceException; import com.yahoo.io.IOUtils; import com.yahoo.path.Path; @@ -22,8 +23,9 @@ import com.yahoo.security.KeyUtils; import com.yahoo.security.SignatureAlgorithm; import com.yahoo.security.X509CertificateBuilder; import com.yahoo.security.X509CertificateUtils; +import com.yahoo.vespa.config.server.MockProvisioner; import com.yahoo.vespa.config.server.MockSecretStore; -import com.yahoo.vespa.config.server.TestComponentRegistry; +import com.yahoo.vespa.config.server.TestConfigDefinitionRepo; import com.yahoo.vespa.config.server.TimeoutBudgetTest; import com.yahoo.vespa.config.server.application.PermanentApplicationPackage; import com.yahoo.vespa.config.server.deploy.DeployHandlerLogger; @@ -33,7 +35,6 @@ import com.yahoo.vespa.config.server.http.InvalidApplicationException; import com.yahoo.vespa.config.server.model.TestModelFactory; import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; -import com.yahoo.vespa.config.server.MockProvisioner; import com.yahoo.vespa.config.server.tenant.ContainerEndpointsCache; import com.yahoo.vespa.config.server.tenant.EndpointCertificateMetadataStore; import com.yahoo.vespa.config.server.tenant.EndpointCertificateRetriever; @@ -80,6 +81,7 @@ public class SessionPreparerTest { private static final File invalidTestApp = new File("src/test/apps/illegalApp"); private static final Version version123 = new Version(1, 2, 3); private static final Version version321 = new Version(3, 2, 1); + private static final Zone zone = Zone.defaultZone(); private final KeyPair keyPair = KeyUtils.generateKeypair(KeyAlgorithm.EC, 256); private final X509Certificate certificate = X509CertificateBuilder.fromKeypair(keyPair, new X500Principal("CN=subject"), Instant.now(), Instant.now().plus(1, ChronoUnit.DAYS), SignatureAlgorithm.SHA512_WITH_ECDSA, BigInteger.valueOf(12345)).build(); @@ -87,8 +89,8 @@ public class SessionPreparerTest { private MockCurator curator; private ConfigCurator configCurator; private SessionPreparer preparer; - private TestComponentRegistry componentRegistry; private final MockSecretStore secretStore = new MockSecretStore(); + private ConfigserverConfig configserverConfig; @Rule public TemporaryFolder folder = new TemporaryFolder(); @@ -100,12 +102,10 @@ public class SessionPreparerTest { public void setUp() throws IOException { curator = new MockCurator(); configCurator = ConfigCurator.create(curator); - componentRegistry = new TestComponentRegistry.Builder() - .configServerConfig(new ConfigserverConfig.Builder() - .fileReferencesDir(folder.newFolder().getAbsolutePath()) - .configServerDBDir(folder.newFolder().getAbsolutePath()) - .configDefinitionsDir(folder.newFolder().getAbsolutePath()) - .build()) + configserverConfig = new ConfigserverConfig.Builder() + .fileReferencesDir(folder.newFolder().getAbsolutePath()) + .configServerDBDir(folder.newFolder().getAbsolutePath()) + .configDefinitionsDir(folder.newFolder().getAbsolutePath()) .build(); preparer = createPreparer(); } @@ -124,13 +124,13 @@ public class SessionPreparerTest { HostProvisionerProvider hostProvisionerProvider) { return new SessionPreparer( modelFactoryRegistry, - new MockFileDistributionFactory(componentRegistry.getConfigserverConfig()), + new MockFileDistributionFactory(configserverConfig), hostProvisionerProvider, - new PermanentApplicationPackage(componentRegistry.getConfigserverConfig()), - componentRegistry.getConfigserverConfig(), - componentRegistry.getStaticConfigDefinitionRepo(), + new PermanentApplicationPackage(configserverConfig), + configserverConfig, + new TestConfigDefinitionRepo(), curator, - componentRegistry.getZone(), + zone, flagSource, secretStore); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java index 0ca04d51107..cafd9fba167 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.session; import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.component.Version; import com.yahoo.config.application.api.ApplicationPackage; +import com.yahoo.config.model.NullConfigModelRegistry; import com.yahoo.config.model.api.Model; import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.api.ModelCreateResult; @@ -32,6 +33,7 @@ import com.yahoo.vespa.curator.mock.MockCurator; import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.model.VespaModel; +import com.yahoo.vespa.model.VespaModelFactory; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -73,14 +75,10 @@ public class SessionRepositoryTest { public TemporaryFolder temporaryFolder = new TemporaryFolder(); public void setup() throws Exception { - setup(new InMemoryFlagSource()); + setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry())))); } - private void setup(FlagSource flagSource) throws Exception { - setup(flagSource, new TestComponentRegistry.Builder()); - } - - private void setup(FlagSource flagSource, TestComponentRegistry.Builder componentRegistryBuilder) throws Exception { + private void setup(FlagSource flagSource, ModelFactoryRegistry modelFactoryRegistry) throws Exception { curator = new MockCurator(); File configserverDbDir = temporaryFolder.newFolder().getAbsoluteFile(); ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder() @@ -89,13 +87,13 @@ public class SessionRepositoryTest { .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()) .sessionLifetime(5) .build(); - GlobalComponentRegistry globalComponentRegistry = componentRegistryBuilder - .configServerConfig(configserverConfig) - .build(); + GlobalComponentRegistry globalComponentRegistry = new TestComponentRegistry.Builder().build(); tenantRepository = new TestTenantRepository.Builder() .withComponentRegistry(globalComponentRegistry) + .withConfigserverConfig(configserverConfig) .withCurator(curator) .withFileDistributionFactory(new MockFileDistributionFactory(configserverConfig)) + .withModelFactoryRegistry(modelFactoryRegistry) .build(); tenantRepository.addTenant(SessionRepositoryTest.tenantName); applicationRepository = new ApplicationRepository.Builder() @@ -197,9 +195,7 @@ public class SessionRepositoryTest { okFactory.vespaVersion = new Version(1, 1, 0); okFactory.throwOnLoad = false; - TestComponentRegistry.Builder registryBuilder = new TestComponentRegistry.Builder() - .modelFactoryRegistry(new ModelFactoryRegistry(List.of(okFactory, failingFactory))); - setup(new InMemoryFlagSource(), registryBuilder); + setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(okFactory, failingFactory))); deploy(); } @@ -215,9 +211,7 @@ public class SessionRepositoryTest { okFactory.vespaVersion = new Version(2, 0, 0); okFactory.throwOnLoad = false; - TestComponentRegistry.Builder registryBuilder = new TestComponentRegistry.Builder() - .modelFactoryRegistry(new ModelFactoryRegistry(List.of(okFactory, failingFactory))); - setup(new InMemoryFlagSource(), registryBuilder); + setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(okFactory, failingFactory))); deploy(); } @@ -232,9 +226,7 @@ public class SessionRepositoryTest { okFactory.vespaVersion = new Version(2, 0, 0); okFactory.throwErrorOnLoad = false; - TestComponentRegistry.Builder registryBuilder = new TestComponentRegistry.Builder() - .modelFactoryRegistry(new ModelFactoryRegistry(List.of(okFactory, failingFactory))); - setup(new InMemoryFlagSource(), registryBuilder); + setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(okFactory, failingFactory))); File testApp = new File("src/test/apps/app-major-version-2"); deploy(applicationId, testApp); @@ -252,9 +244,7 @@ public class SessionRepositoryTest { okFactory.vespaVersion = new Version(1, 0, 0); okFactory.throwErrorOnLoad = false; - TestComponentRegistry.Builder registryBuilder = new TestComponentRegistry.Builder() - .modelFactoryRegistry(new ModelFactoryRegistry(List.of(okFactory, failingFactory))); - setup(new InMemoryFlagSource(), registryBuilder); + setup(new InMemoryFlagSource(), new ModelFactoryRegistry(List.of(okFactory, failingFactory))); File testApp = new File("src/test/apps/app-major-version-2"); deploy(applicationId, testApp); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java index c843b5f6119..a520700f582 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantRepositoryTest.java @@ -5,26 +5,27 @@ import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.component.Version; import com.yahoo.concurrent.InThreadExecutorService; import com.yahoo.concurrent.StripedExecutor; +import com.yahoo.config.model.NullConfigModelRegistry; import com.yahoo.config.model.test.MockApplicationPackage; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; -import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; -import com.yahoo.config.provision.RegionName; -import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; +import com.yahoo.vespa.config.server.ConfigServerDB; import com.yahoo.vespa.config.server.GlobalComponentRegistry; import com.yahoo.vespa.config.server.MockProvisioner; import com.yahoo.vespa.config.server.MockSecretStore; import com.yahoo.vespa.config.server.ServerCache; import com.yahoo.vespa.config.server.TestComponentRegistry; +import com.yahoo.vespa.config.server.TestConfigDefinitionRepo; import com.yahoo.vespa.config.server.application.Application; import com.yahoo.vespa.config.server.application.ApplicationSet; import com.yahoo.vespa.config.server.application.TenantApplications; import com.yahoo.vespa.config.server.application.TenantApplicationsTest; import com.yahoo.vespa.config.server.filedistribution.FileDistributionFactory; import com.yahoo.vespa.config.server.host.HostRegistry; +import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.monitoring.MetricUpdater; import com.yahoo.vespa.config.server.monitoring.Metrics; import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; @@ -32,6 +33,7 @@ import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.curator.mock.MockCurator; import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.model.VespaModel; +import com.yahoo.vespa.model.VespaModelFactory; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -41,6 +43,7 @@ import org.junit.rules.TemporaryFolder; import org.xml.sax.SAXException; import java.io.IOException; +import java.time.Clock; import java.util.Arrays; import java.util.List; import java.util.Set; @@ -60,6 +63,7 @@ public class TenantRepositoryTest { private TenantApplicationsTest.MockReloadListener listener; private MockTenantListener tenantListener; private Curator curator; + private ConfigserverConfig configserverConfig; @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -68,13 +72,18 @@ public class TenantRepositoryTest { public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Before - public void setupSessions() { + public void setupSessions() throws IOException { curator = new MockCurator(); TestComponentRegistry globalComponentRegistry = new TestComponentRegistry.Builder().build(); listener = (TenantApplicationsTest.MockReloadListener) globalComponentRegistry.getReloadListener(); tenantListener = (MockTenantListener) globalComponentRegistry.getTenantListener(); assertFalse(tenantListener.tenantsLoaded); + configserverConfig = new ConfigserverConfig.Builder() + .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath()) + .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) + .build(); tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(globalComponentRegistry) + .withConfigserverConfig(configserverConfig) .withCurator(curator) .build(); assertTrue(tenantListener.tenantsLoaded); @@ -180,13 +189,13 @@ public class TenantRepositoryTest { } @Test - public void testFailingBootstrap() throws IOException { + public void testFailingBootstrap() { tenantRepository.close(); // stop using the one setup in Before method // Should get exception if config is true expectedException.expect(RuntimeException.class); expectedException.expectMessage("Could not create all tenants when bootstrapping, failed to create: [default]"); - new FailingDuringBootstrapTenantRepository(createComponentRegistry()); + new FailingDuringBootstrapTenantRepository(createComponentRegistry(), configserverConfig); } private List<String> readZKChildren(String path) throws Exception { @@ -197,18 +206,13 @@ public class TenantRepositoryTest { assertNotNull(curator.framework().checkExists().forPath(TenantRepository.getTenantPath(tenantName).getAbsolute())); } - private GlobalComponentRegistry createComponentRegistry() throws IOException { - return new TestComponentRegistry.Builder() - .configServerConfig(new ConfigserverConfig(new ConfigserverConfig.Builder() - .configDefinitionsDir(temporaryFolder.newFolder("configdefs").getAbsolutePath()) - .configServerDBDir(temporaryFolder.newFolder("configserverdb").getAbsolutePath()))) - .zone(new Zone(SystemName.cd, Environment.prod, RegionName.from("foo"))) - .build(); + private GlobalComponentRegistry createComponentRegistry() { + return new TestComponentRegistry.Builder().build(); } private static class FailingDuringBootstrapTenantRepository extends TenantRepository { - public FailingDuringBootstrapTenantRepository(GlobalComponentRegistry componentRegistry) { + public FailingDuringBootstrapTenantRepository(GlobalComponentRegistry componentRegistry, ConfigserverConfig configserverConfig) { super(componentRegistry, new HostRegistry(), new MockCurator(), @@ -218,7 +222,13 @@ public class TenantRepositoryTest { new InMemoryFlagSource(), new InThreadExecutorService(), new MockSecretStore(), - HostProvisionerProvider.withProvisioner(new MockProvisioner(), false)); + HostProvisionerProvider.withProvisioner(new MockProvisioner(), false), + configserverConfig, + new ConfigServerDB(configserverConfig), + Zone.defaultZone(), + Clock.systemUTC(), + new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry()))), + new TestConfigDefinitionRepo()); } @Override diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java index 75d1b848f50..54e4492f08e 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TenantTest.java @@ -1,12 +1,16 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.tenant; import com.google.common.testing.EqualsTester; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.provision.TenantName; import com.yahoo.vespa.config.server.TestComponentRegistry; -import com.yahoo.vespa.config.server.host.HostRegistry; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +import java.io.IOException; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.Matchers.is; @@ -24,16 +28,26 @@ public class TenantTest { private Tenant t3; private Tenant t4; + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Before - public void setupTenant() { + public void setupTenant() throws IOException { t1 = createTenant("foo"); t2 = createTenant("foo"); t3 = createTenant("bar"); t4 = createTenant("baz"); } - private Tenant createTenant(String name) { - TenantRepository tenantRepository = new TestTenantRepository.Builder().withComponentRegistry(componentRegistry).build(); + private Tenant createTenant(String name) throws IOException { + ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder() + .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath()) + .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) + .build(); + TenantRepository tenantRepository = new TestTenantRepository.Builder() + .withComponentRegistry(componentRegistry) + .withConfigserverConfig(configserverConfig) + .build(); TenantName tenantName = TenantName.from(name); tenantRepository.addTenant(tenantName); return tenantRepository.getTenant(tenantName); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java index b4922e1f163..1cb7789824b 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/tenant/TestTenantRepository.java @@ -1,18 +1,29 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.tenant; +import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.concurrent.InThreadExecutorService; import com.yahoo.concurrent.StripedExecutor; +import com.yahoo.config.model.NullConfigModelRegistry; +import com.yahoo.config.model.api.ConfigDefinitionRepo; +import com.yahoo.config.provision.Zone; +import com.yahoo.vespa.config.server.ConfigServerDB; import com.yahoo.vespa.config.server.GlobalComponentRegistry; import com.yahoo.vespa.config.server.MockSecretStore; +import com.yahoo.vespa.config.server.TestConfigDefinitionRepo; import com.yahoo.vespa.config.server.filedistribution.FileDistributionFactory; import com.yahoo.vespa.config.server.host.HostRegistry; +import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.monitoring.Metrics; import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.curator.mock.MockCurator; import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.flags.InMemoryFlagSource; +import com.yahoo.vespa.model.VespaModelFactory; + +import java.time.Clock; +import java.util.List; /** * @@ -26,7 +37,12 @@ public class TestTenantRepository extends TenantRepository { Metrics metrics, FileDistributionFactory fileDistributionFactory, FlagSource flagSource, - HostProvisionerProvider hostProvisionerProvider) { + HostProvisionerProvider hostProvisionerProvider, + ConfigserverConfig configserverConfig, + Zone zone, + Clock clock, + ModelFactoryRegistry modelFactoryRegistry, + ConfigDefinitionRepo configDefinitionRepo) { super(componentRegistry, hostRegistry, curator, @@ -36,11 +52,18 @@ public class TestTenantRepository extends TenantRepository { flagSource, new InThreadExecutorService(), new MockSecretStore(), - hostProvisionerProvider); + hostProvisionerProvider, + configserverConfig, + new ConfigServerDB(configserverConfig), + zone, + clock, + modelFactoryRegistry, + configDefinitionRepo); } public static class Builder { - + Clock clock = Clock.systemUTC(); + ConfigDefinitionRepo configDefinitionRepo = new TestConfigDefinitionRepo(); GlobalComponentRegistry componentRegistry; HostRegistry hostRegistry = new HostRegistry(); Curator curator = new MockCurator(); @@ -48,6 +71,14 @@ public class TestTenantRepository extends TenantRepository { FileDistributionFactory fileDistributionFactory = null; FlagSource flagSource = new InMemoryFlagSource(); HostProvisionerProvider hostProvisionerProvider = HostProvisionerProvider.empty(); + ModelFactoryRegistry modelFactoryRegistry = new ModelFactoryRegistry(List.of(new VespaModelFactory(new NullConfigModelRegistry()))); + ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder().build(); + Zone zone = Zone.defaultZone(); + + public Builder withClock(Clock clock) { + this.clock = clock; + return this; + } public Builder withFlagSource(FlagSource flagSource) { this.flagSource = flagSource; @@ -74,6 +105,11 @@ public class TestTenantRepository extends TenantRepository { return this; } + public Builder withModelFactoryRegistry(ModelFactoryRegistry modelFactoryRegistry) { + this.modelFactoryRegistry = modelFactoryRegistry; + return this; + } + public Builder withFileDistributionFactory(FileDistributionFactory fileDistributionFactory) { this.fileDistributionFactory = fileDistributionFactory; return this; @@ -84,16 +120,31 @@ public class TestTenantRepository extends TenantRepository { return this; } + public Builder withConfigserverConfig(ConfigserverConfig configserverConfig) { + this.configserverConfig = configserverConfig; + return this; + } + + public Builder withZone(Zone zone) { + this.zone = zone; + return this; + } + public TenantRepository build() { if (fileDistributionFactory == null) - fileDistributionFactory = new FileDistributionFactory(componentRegistry.getConfigserverConfig()); + fileDistributionFactory = new FileDistributionFactory(configserverConfig); return new TestTenantRepository(componentRegistry, hostRegistry, curator, metrics, fileDistributionFactory, flagSource, - hostProvisionerProvider); + hostProvisionerProvider, + configserverConfig, + zone, + clock, + modelFactoryRegistry, + configDefinitionRepo); } } |