diff options
author | Harald Musum <musum@verizonmedia.com> | 2021-01-12 08:07:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-12 08:07:18 +0100 |
commit | ab7a73aa95e69c5ebb760c6d2b5b153670a0e49a (patch) | |
tree | 4a03a8e185c4680c6308dbed1678cb93a9975541 /configserver/src/test/java | |
parent | 14666cbe555006bfe675cbe0052474c644235267 (diff) |
Revert "Reapply "Remove unnecessary component" [run-systemtest]""
Diffstat (limited to 'configserver/src/test/java')
15 files changed, 173 insertions, 141 deletions
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java index cb91a01ab55..0cab49a9f00 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 @@ -192,7 +192,7 @@ public class ApplicationRepositoryTest { PrepareResult result = prepareAndActivate(testAppJdiscOnlyRestart); assertTrue(result.configChangeActions().getRefeedActions().isEmpty()); assertTrue(result.configChangeActions().getRestartActions().isEmpty()); - assertEquals(HostFilter.hostname("mytesthost2"), provisioner.lastRestartFilter()); + assertEquals(HostFilter.hostname("mytesthost"), provisioner.lastRestartFilter()); } @Test @@ -345,7 +345,7 @@ public class ApplicationRepositoryTest { // Deploy another app (with id fooId) ApplicationId fooId = applicationId(tenant2); PrepareParams prepareParams2 = new PrepareParams.Builder().applicationId(fooId).build(); - deployApp(testAppJdiscOnly, prepareParams2); + deployApp(testApp, prepareParams2); assertNotNull(applicationRepository.getActiveSession(fooId)); // Delete app with id fooId, should not affect original app @@ -530,14 +530,14 @@ public class ApplicationRepositoryTest { list.add(new NetworkPorts.Allocation(19081, "logserver", "admin/logserver", "unused/1")); list.add(new NetworkPorts.Allocation(19082, "logserver", "admin/logserver", "unused/2")); list.add(new NetworkPorts.Allocation(19083, "logserver", "admin/logserver", "unused/3")); - list.add(new NetworkPorts.Allocation(19089, "logd", "hosts/mytesthost2/logd", "http")); - list.add(new NetworkPorts.Allocation(19090, "configproxy", "hosts/mytesthost2/configproxy", "rpc")); - list.add(new NetworkPorts.Allocation(19092, "metricsproxy-container", "admin/metrics/mytesthost2", "http")); - list.add(new NetworkPorts.Allocation(19093, "metricsproxy-container", "admin/metrics/mytesthost2", "http/1")); - list.add(new NetworkPorts.Allocation(19094, "metricsproxy-container", "admin/metrics/mytesthost2", "rpc/admin")); - list.add(new NetworkPorts.Allocation(19095, "metricsproxy-container", "admin/metrics/mytesthost2", "rpc/metrics")); - list.add(new NetworkPorts.Allocation(19097, "config-sentinel", "hosts/mytesthost2/sentinel", "rpc")); - list.add(new NetworkPorts.Allocation(19098, "config-sentinel", "hosts/mytesthost2/sentinel", "http")); + list.add(new NetworkPorts.Allocation(19089, "logd", "hosts/mytesthost/logd", "http")); + list.add(new NetworkPorts.Allocation(19090, "configproxy", "hosts/mytesthost/configproxy", "rpc")); + list.add(new NetworkPorts.Allocation(19092, "metricsproxy-container", "admin/metrics/mytesthost", "http")); + list.add(new NetworkPorts.Allocation(19093, "metricsproxy-container", "admin/metrics/mytesthost", "http/1")); + list.add(new NetworkPorts.Allocation(19094, "metricsproxy-container", "admin/metrics/mytesthost", "rpc/admin")); + list.add(new NetworkPorts.Allocation(19095, "metricsproxy-container", "admin/metrics/mytesthost", "rpc/metrics")); + list.add(new NetworkPorts.Allocation(19097, "config-sentinel", "hosts/mytesthost/sentinel", "rpc")); + list.add(new NetworkPorts.Allocation(19098, "config-sentinel", "hosts/mytesthost/sentinel", "http")); list.add(new NetworkPorts.Allocation(19099, "slobrok", "admin/slobrok.0", "rpc")); list.add(new NetworkPorts.Allocation(19100, "container", "container/container.0", "http/1")); list.add(new NetworkPorts.Allocation(19101, "container", "container/container.0", "messaging")); @@ -547,7 +547,7 @@ public class ApplicationRepositoryTest { AllocatedHosts info = session.getAllocatedHosts(); assertNotNull(info); assertThat(info.getHosts().size(), is(1)); - assertTrue(info.getHosts().contains(new HostSpec("mytesthost2", + assertTrue(info.getHosts().contains(new HostSpec("mytesthost", Collections.emptyList(), Optional.empty()))); Optional<NetworkPorts> portsCopy = info.getHosts().iterator().next().networkPorts(); 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 4f6642610dd..bf54c2b309e 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 @@ -8,12 +8,12 @@ import com.yahoo.config.provision.Zone; import com.yahoo.vespa.config.server.application.PermanentApplicationPackage; 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.host.HostRegistries; 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.RpcRequestHandlerProvider; import com.yahoo.vespa.config.server.rpc.security.NoopRpcAuthorizer; import com.yahoo.vespa.config.server.session.SessionPreparer; import com.yahoo.vespa.config.server.session.SessionTest; @@ -46,6 +46,7 @@ public class InjectedGlobalComponentRegistryTest { private RpcServer rpcServer; private ConfigDefinitionRepo defRepo; private PermanentApplicationPackage permanentApplicationPackage; + private HostRegistries hostRegistries; private GlobalComponentRegistry globalComponentRegistry; private ModelFactoryRegistry modelFactoryRegistry; private Zone zone; @@ -64,21 +65,20 @@ public class InjectedGlobalComponentRegistryTest { .configServerDBDir(temporaryFolder.newFolder("serverdb").getAbsolutePath()) .configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath())); sessionPreparer = new SessionTest.MockSessionPreparer(); - HostRegistry hostRegistry = new HostRegistry(); rpcServer = new RpcServer(configserverConfig, null, Metrics.createTestMetrics(), - hostRegistry, new ConfigRequestHostLivenessTracker(), + new HostRegistries(), new ConfigRequestHostLivenessTracker(), new FileServer(temporaryFolder.newFolder("filereferences")), new NoopRpcAuthorizer(), new RpcRequestHandlerProvider()); + SuperModelGenerationCounter generationCounter = new SuperModelGenerationCounter(curator); defRepo = new StaticConfigDefinitionRepo(); permanentApplicationPackage = new PermanentApplicationPackage(configserverConfig); + hostRegistries = new HostRegistries(); HostProvisionerProvider hostProvisionerProvider = HostProvisionerProvider.withProvisioner(new MockProvisioner()); zone = Zone.defaultZone(); globalComponentRegistry = - new InjectedGlobalComponentRegistry(curator, configCurator, metrics, modelFactoryRegistry, sessionPreparer, - rpcServer, configserverConfig, defRepo, permanentApplicationPackage, - hostProvisionerProvider, zone, - new ConfigServerDB(configserverConfig), new InMemoryFlagSource(), - new MockSecretStore(), hostRegistry); + new InjectedGlobalComponentRegistry(curator, configCurator, metrics, modelFactoryRegistry, sessionPreparer, rpcServer, configserverConfig, + generationCounter, defRepo, permanentApplicationPackage, hostRegistries, hostProvisionerProvider, zone, + new ConfigServerDB(configserverConfig), new InMemoryFlagSource(), new MockSecretStore()); } @Test @@ -92,6 +92,7 @@ public class InjectedGlobalComponentRegistryTest { assertThat(globalComponentRegistry.getTenantListener().hashCode(), is(rpcServer.hashCode())); assertThat(globalComponentRegistry.getStaticConfigDefinitionRepo(), is(defRepo)); assertThat(globalComponentRegistry.getPermanentApplicationPackage(), is(permanentApplicationPackage)); + assertThat(globalComponentRegistry.getHostRegistries(), is(hostRegistries)); assertThat(globalComponentRegistry.getZone(), is (zone)); assertTrue(globalComponentRegistry.getHostProvisioner().isPresent()); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java index c58bd6d6b0a..965374f2aa4 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelControllerTest.java @@ -83,6 +83,34 @@ public class SuperModelControllerTest { } @Test + public void test_lb_config_multiple_apps_legacy_super_model() throws IOException, SAXException { + Map<ApplicationId, ApplicationInfo> models = new LinkedHashMap<>(); + TenantName t1 = TenantName.from("t1"); + TenantName t2 = TenantName.from("t2"); + File testApp1 = new File("src/test/resources/deploy/app"); + File testApp2 = new File("src/test/resources/deploy/advancedapp"); + File testApp3 = new File("src/test/resources/deploy/advancedapp"); + + ApplicationId simple = applicationId("mysimpleapp", t1); + ApplicationId advanced = applicationId("myadvancedapp", t1); + ApplicationId tooAdvanced = applicationId("minetooadvancedapp", t2); + models.put(simple, createApplicationInfo(testApp1, simple, 4L)); + models.put(advanced, createApplicationInfo(testApp2, advanced, 4L)); + models.put(tooAdvanced, createApplicationInfo(testApp3, tooAdvanced, 4L)); + + SuperModel superModel = new SuperModel(models, true); + SuperModelController han = new SuperModelController(new SuperModelConfigProvider(superModel, Zone.defaultZone(), new InMemoryFlagSource()), new TestConfigDefinitionRepo(), 2, new UncompressedConfigResponseFactory()); + LbServicesConfig.Builder lb = new LbServicesConfig.Builder(); + han.getSuperModel().getConfig(lb); + LbServicesConfig lbc = new LbServicesConfig(lb); + assertThat(lbc.tenants().size(), is(2)); + assertThat(lbc.tenants("t1").applications().size(), is(2)); + assertThat(lbc.tenants("t2").applications().size(), is(1)); + assertThat(lbc.tenants("t2").applications("minetooadvancedapp:prod:default:default").hosts().size(), is(1)); + assertQrServer(lbc.tenants("t2").applications("minetooadvancedapp:prod:default:default")); + } + + @Test public void test_lb_config_multiple_apps() throws IOException, SAXException { Map<ApplicationId, ApplicationInfo> models = new LinkedHashMap<>(); TenantName t1 = TenantName.from("t1"); 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 cbff99c04dc..e6652c3c5e1 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,4 +1,4 @@ -// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// 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; import com.yahoo.cloud.config.ConfigserverConfig; @@ -12,12 +12,12 @@ import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.secretstore.SecretStore; import com.yahoo.vespa.config.server.application.PermanentApplicationPackage; import com.yahoo.vespa.config.server.application.TenantApplicationsTest; -import com.yahoo.vespa.config.server.filedistribution.FileDistributionFactory; -import com.yahoo.vespa.config.server.filedistribution.MockFileDistributionFactory; -import com.yahoo.vespa.config.server.host.HostRegistry; +import com.yahoo.vespa.config.server.host.HostRegistries; 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.filedistribution.FileDistributionFactory; +import com.yahoo.vespa.config.server.filedistribution.MockFileDistributionFactory; import com.yahoo.vespa.config.server.session.SessionPreparer; import com.yahoo.vespa.config.server.tenant.MockTenantListener; import com.yahoo.vespa.config.server.tenant.TenantListener; @@ -50,6 +50,7 @@ public class TestComponentRegistry implements GlobalComponentRegistry { private final ReloadListener reloadListener; private final TenantListener tenantListener; private final PermanentApplicationPackage permanentApplicationPackage; + private final HostRegistries hostRegistries; private final FileDistributionFactory fileDistributionFactory; private final ModelFactoryRegistry modelFactoryRegistry; private final Optional<Provisioner> hostProvisioner; @@ -60,12 +61,12 @@ public class TestComponentRegistry implements GlobalComponentRegistry { private final ExecutorService zkCacheExecutor; private final SecretStore secretStore; private final FlagSource flagSource; - private final HostRegistry hostRegistry; private TestComponentRegistry(Curator curator, ConfigCurator configCurator, Metrics metrics, ModelFactoryRegistry modelFactoryRegistry, PermanentApplicationPackage permanentApplicationPackage, FileDistributionFactory fileDistributionFactory, + HostRegistries hostRegistries, ConfigserverConfig configserverConfig, SessionPreparer sessionPreparer, Optional<Provisioner> hostProvisioner, @@ -75,8 +76,7 @@ public class TestComponentRegistry implements GlobalComponentRegistry { Zone zone, Clock clock, SecretStore secretStore, - FlagSource flagSource, - HostRegistry hostRegistry) { + FlagSource flagSource) { this.curator = curator; this.configCurator = configCurator; this.metrics = metrics; @@ -85,6 +85,7 @@ public class TestComponentRegistry implements GlobalComponentRegistry { this.tenantListener = tenantListener; this.defRepo = defRepo; this.permanentApplicationPackage = permanentApplicationPackage; + this.hostRegistries = hostRegistries; this.fileDistributionFactory = fileDistributionFactory; this.modelFactoryRegistry = modelFactoryRegistry; this.hostProvisioner = hostProvisioner; @@ -96,7 +97,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry { this.zkCacheExecutor = new InThreadExecutorService(); this.secretStore = secretStore; this.flagSource = flagSource; - this.hostRegistry = hostRegistry; } public static class Builder { @@ -112,13 +112,13 @@ public class TestComponentRegistry implements GlobalComponentRegistry { private ReloadListener reloadListener = new TenantApplicationsTest.MockReloadListener(); private final MockTenantListener tenantListener = new MockTenantListener(); private Optional<PermanentApplicationPackage> permanentApplicationPackage = Optional.empty(); + private final HostRegistries hostRegistries = new HostRegistries(); private final Optional<FileDistributionFactory> fileDistributionFactory = Optional.empty(); private ModelFactoryRegistry modelFactoryRegistry = new ModelFactoryRegistry(Collections.singletonList(new VespaModelFactory(new NullConfigModelRegistry()))); private Optional<Provisioner> hostProvisioner = Optional.empty(); private Zone zone = Zone.defaultZone(); private Clock clock = Clock.systemUTC(); private FlagSource flagSource = new InMemoryFlagSource(); - private HostRegistry hostRegistry = new HostRegistry(); public Builder configServerConfig(ConfigserverConfig configserverConfig) { this.configserverConfig = configserverConfig; @@ -175,11 +175,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry { return this; } - public Builder hostRegistry(HostRegistry hostRegistry) { - this.hostRegistry = hostRegistry; - return this; - } - public TestComponentRegistry build() { final PermanentApplicationPackage permApp = this.permanentApplicationPackage .orElse(new PermanentApplicationPackage(configserverConfig)); @@ -193,9 +188,9 @@ public class TestComponentRegistry implements GlobalComponentRegistry { configserverConfig, defRepo, curator, zone, flagSource, secretStore); return new TestComponentRegistry(curator, ConfigCurator.create(curator), metrics, modelFactoryRegistry, - permApp, fileDistributionProvider, configserverConfig, + permApp, fileDistributionProvider, hostRegistries, configserverConfig, sessionPreparer, hostProvisioner, defRepo, reloadListener, tenantListener, - zone, clock, secretStore, flagSource, hostRegistry); + zone, clock, secretStore, flagSource); } } @@ -218,6 +213,8 @@ public class TestComponentRegistry implements GlobalComponentRegistry { @Override public PermanentApplicationPackage getPermanentApplicationPackage() { return permanentApplicationPackage; } @Override + public HostRegistries getHostRegistries() { return hostRegistries;} + @Override public ModelFactoryRegistry getModelFactoryRegistry() { return modelFactoryRegistry; } @Override public Optional<Provisioner> getHostProvisioner() { @@ -250,11 +247,6 @@ public class TestComponentRegistry implements GlobalComponentRegistry { return secretStore; } - @Override - public HostRegistry hostRegistry() { - return hostRegistry; - } - public FileDistributionFactory getFileDistributionFactory() { return fileDistributionFactory; } } 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 ddbe97f4389..947308962d4 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 @@ -151,12 +151,12 @@ public class TenantApplicationsTest { } @Override - public void hostsUpdated(ApplicationId applicationId, Collection<String> newHosts) { - tenantHosts.put(applicationId.tenant().value(), newHosts); + public void hostsUpdated(TenantName tenant, Collection<String> newHosts) { + tenantHosts.put(tenant.value(), newHosts); } @Override - public void verifyHostsAreAvailable(ApplicationId applicationId, Collection<String> newHosts) { + public void verifyHostsAreAvailable(TenantName tenant, Collection<String> newHosts) { } @Override diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/host/HostRegistryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/host/HostRegistryTest.java index 173e9f3e148..63dfb1d01bd 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/host/HostRegistryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/host/HostRegistryTest.java @@ -1,44 +1,37 @@ // 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.host; -import com.yahoo.config.provision.ApplicationId; -import org.junit.Test; - import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.junit.Test; + import static org.hamcrest.collection.IsIterableContainingInOrder.contains; import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.junit.Assert.*; /** * @author Ulf Lilleengen */ public class HostRegistryTest { - - private final ApplicationId foo = ApplicationId.from("foo", "app1", "default"); - private final ApplicationId bar = ApplicationId.from("bar", "app2", "default"); - @Test public void old_hosts_are_removed() { - HostRegistry reg = new HostRegistry(); + HostRegistry<String> reg = new HostRegistry<>(); assertNull(reg.getKeyForHost("foo.com")); - reg.update(foo, List.of("foo.com", "bar.com", "baz.com")); - assertGetKey(reg, "foo.com", foo); - assertGetKey(reg, "bar.com", foo); - assertGetKey(reg, "baz.com", foo); + reg.update("fookey", List.of("foo.com", "bar.com", "baz.com")); + assertGetKey(reg, "foo.com", "fookey"); + assertGetKey(reg, "bar.com", "fookey"); + assertGetKey(reg, "baz.com", "fookey"); assertThat(reg.getAllHosts().size(), is(3)); - reg.update(foo, List.of("bar.com", "baz.com")); + reg.update("fookey", List.of("bar.com", "baz.com")); assertNull(reg.getKeyForHost("foo.com")); - assertGetKey(reg, "bar.com", foo); - assertGetKey(reg, "baz.com", foo); + assertGetKey(reg, "bar.com", "fookey"); + assertGetKey(reg, "baz.com", "fookey"); assertThat(reg.getAllHosts().size(), is(2)); assertThat(reg.getAllHosts(), contains("bar.com", "baz.com")); - reg.removeHostsForKey(foo); + reg.removeHostsForKey("fookey"); assertThat(reg.getAllHosts().size(), is(0)); assertNull(reg.getKeyForHost("foo.com")); assertNull(reg.getKeyForHost("bar.com")); @@ -46,51 +39,51 @@ public class HostRegistryTest { @Test public void multiple_keys_are_handled() { - HostRegistry reg = new HostRegistry(); - reg.update(foo, List.of("foo.com", "bar.com")); - reg.update(bar, List.of("baz.com", "quux.com")); - assertGetKey(reg, "foo.com", foo); - assertGetKey(reg, "bar.com", foo); - assertGetKey(reg, "baz.com", bar); - assertGetKey(reg, "quux.com", bar); + HostRegistry<String> reg = new HostRegistry<>(); + reg.update("fookey", List.of("foo.com", "bar.com")); + reg.update("barkey", List.of("baz.com", "quux.com")); + assertGetKey(reg, "foo.com", "fookey"); + assertGetKey(reg, "bar.com", "fookey"); + assertGetKey(reg, "baz.com", "barkey"); + assertGetKey(reg, "quux.com", "barkey"); } @Test(expected = IllegalArgumentException.class) public void keys_cannot_overlap() { - HostRegistry reg = new HostRegistry(); - reg.update(foo, List.of("foo.com", "bar.com")); - reg.update(bar, List.of("bar.com", "baz.com")); + HostRegistry<String> reg = new HostRegistry<>(); + reg.update("fookey", List.of("foo.com", "bar.com")); + reg.update("barkey", List.of("bar.com", "baz.com")); } @Test public void all_hosts_are_returned() { - HostRegistry reg = new HostRegistry(); - reg.update(foo, List.of("foo.com", "bar.com")); - reg.update(bar, List.of("baz.com", "quux.com")); + HostRegistry<String> reg = new HostRegistry<>(); + reg.update("fookey", List.of("foo.com", "bar.com")); + reg.update("barkey", List.of("baz.com", "quux.com")); assertThat(reg.getAllHosts().size(), is(4)); } @Test public void ensure_that_collection_is_copied() { - HostRegistry reg = new HostRegistry(); + HostRegistry<String> reg = new HostRegistry<>(); List<String> hosts = new ArrayList<>(List.of("foo.com", "bar.com", "baz.com")); - reg.update(foo, hosts); - assertThat(reg.getHostsForKey(foo).size(), is(3)); + reg.update("fookey", hosts); + assertThat(reg.getHostsForKey("fookey").size(), is(3)); hosts.remove(2); - assertThat(reg.getHostsForKey(foo).size(), is(3)); + assertThat(reg.getHostsForKey("fookey").size(), is(3)); } @Test public void ensure_that_underlying_hosts_do_not_change() { - HostRegistry reg = new HostRegistry(); - reg.update(foo, List.of("foo.com", "bar.com", "baz.com")); + HostRegistry<String> reg = new HostRegistry<>(); + reg.update("fookey", List.of("foo.com", "bar.com", "baz.com")); Collection<String> hosts = reg.getAllHosts(); assertThat(hosts.size(), is(3)); - reg.update(foo, List.of("foo.com")); + reg.update("fookey", List.of("foo.com")); assertThat(hosts.size(), is(3)); } - private void assertGetKey(HostRegistry reg, String host, ApplicationId expectedKey) { + private void assertGetKey(HostRegistry<String> reg, String host, String expectedKey) { assertNotNull(reg.getKeyForHost(host)); assertThat(reg.getKeyForHost(host), is(expectedKey)); } 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 809bcdc1a6e..126dfe88141 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 @@ -36,12 +36,14 @@ import static org.junit.Assert.assertThat; public class ApplicationContentHandlerTest extends ContentHandlerTestBase { private static final File testApp = new File("src/test/apps/content"); + private static final File testApp2 = new File("src/test/apps/content2"); private final TenantName tenantName1 = TenantName.from("mofet"); private final TenantName tenantName2 = TenantName.from("bla"); private final String baseServer = "http://foo:1337"; private final ApplicationId appId1 = new ApplicationId.Builder().tenant(tenantName1).applicationName("foo").instanceName("quux").build(); + private final ApplicationId appId2 = new ApplicationId.Builder().tenant(tenantName2).applicationName("foo").instanceName("quux").build(); private ApplicationRepository applicationRepository; private ApplicationHandler handler; @@ -75,6 +77,8 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase { .build(); applicationRepository.deploy(testApp, prepareParams(appId1)); + applicationRepository.deploy(testApp2, prepareParams(appId2)); + handler = new ApplicationHandler(ApplicationHandler.testOnlyContext(), Zone.defaultZone(), applicationRepository); @@ -109,6 +113,14 @@ public class ApplicationContentHandlerTest extends ContentHandlerTestBase { } @Test + public void require_that_multiple_tenants_are_handled() throws IOException { + assertContent("/test.txt", "foo\n"); + pathPrefix = createPath(appId2, Zone.defaultZone()); + baseUrl = baseServer + pathPrefix; + assertContent("/test.txt", "bar\n"); + } + + @Test public void require_that_get_does_not_set_write_flag() throws IOException { Tenant tenant1 = applicationRepository.getTenant(appId1); Session session = applicationRepository.getActiveLocalSession(tenant1, appId1); 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 3fb999e85f7..a0c63c8bba1 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 @@ -76,7 +76,6 @@ import static org.mockito.Mockito.when; public class ApplicationHandlerTest { private static final File testApp = new File("src/test/apps/app"); - private static final File testAppJdiscOnly = new File("src/test/apps/app-jdisc-only"); private final static TenantName mytenantName = TenantName.from("mytenant"); private final static ApplicationId myTenantApplicationId = ApplicationId.from(mytenantName, ApplicationName.defaultName(), InstanceName.defaultName()); @@ -151,7 +150,7 @@ public class ApplicationHandlerTest { .instanceName("quux") .build(); PrepareParams prepareParams2 = new PrepareParams.Builder().applicationId(fooId).build(); - applicationRepository.deploy(testAppJdiscOnly, prepareParams2); + applicationRepository.deploy(testApp, prepareParams2); assertApplicationExists(fooId, Zone.defaultZone()); deleteAndAssertOKResponseMocked(fooId, true); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java index a072bf62852..9bd7a25faf2 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/maintenance/TenantsMaintainerTest.java @@ -56,8 +56,7 @@ public class TenantsMaintainerTest { assertNotNull(tenantRepository.getTenant(TenantName.defaultName())); assertNotNull(tenantRepository.getTenant(TenantRepository.HOSTED_VESPA_TENANT)); - // Delete app, add tenant again and deploy - tester.applicationRepository().delete(applicationId(shouldNotBeDeleted)); + // Add tenant again and deploy tenantRepository.addTenant(shouldBeDeleted); tester.deployApp(applicationPackage, prepareParams(shouldBeDeleted)); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/MockRpcServer.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/MockRpcServer.java index 997633eeb53..7f4733f0b7c 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/MockRpcServer.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/MockRpcServer.java @@ -1,4 +1,4 @@ -// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// 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.rpc; import com.yahoo.cloud.config.ConfigserverConfig; @@ -8,7 +8,7 @@ import com.yahoo.vespa.config.protocol.JRTServerConfigRequest; import com.yahoo.vespa.config.server.GetConfigContext; 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.host.HostRegistries; import com.yahoo.vespa.config.server.monitoring.Metrics; import com.yahoo.vespa.config.server.rpc.security.NoopRpcAuthorizer; @@ -37,7 +37,7 @@ public class MockRpcServer extends RpcServer { super(createConfig(port), null, Metrics.createTestMetrics(), - new HostRegistry(), + new HostRegistries(), new ConfigRequestHostLivenessTracker(), new FileServer(tempDir), new NoopRpcAuthorizer(), diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java index 5a41eff3cc9..735eae2700f 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcServerTest.java @@ -64,19 +64,31 @@ public class RpcServerTest { try (RpcTester tester = new RpcTester(applicationId, temporaryFolder)) { ApplicationRepository applicationRepository = tester.applicationRepository(); applicationRepository.deploy(testApp, new PrepareParams.Builder().applicationId(applicationId).build()); + TenantApplications applicationRepo = tester.tenant().getApplicationRepo(); + RemoteSession activeSession = applicationRepository.getActiveRemoteSession(applicationId); + ApplicationSet applicationSet = tester.tenant().getSessionRepository().ensureApplicationLoaded(activeSession); + applicationRepo.activateApplication(applicationSet, activeSession.getSessionId()); testPrintStatistics(tester); testGetConfig(tester); testEnabled(tester); testApplicationNotLoadedErrorWhenAppDeleted(tester); + testEmptySentinelConfigWhenAppDeletedOnHostedVespa(); } } - private void testApplicationNotLoadedErrorWhenAppDeleted(RpcTester tester) { - tester.applicationRepository().delete(applicationId); + private void testApplicationNotLoadedErrorWhenAppDeleted(RpcTester tester) throws InterruptedException, IOException { + tester.rpcServer().onTenantDelete(tenantName); + tester.rpcServer().onTenantsLoaded(); JRTClientConfigRequest clientReq = createSimpleRequest(); tester.performRequest(clientReq.getRequest()); assertFalse(clientReq.validateResponse()); assertThat(clientReq.errorCode(), is(ErrorCode.APPLICATION_NOT_LOADED)); + tester.stopRpc(); + tester.createAndStartRpcServer(); + tester.rpcServer().onTenantsLoaded(); + clientReq = createSimpleRequest(); + tester.performRequest(clientReq.getRequest()); + assertTrue(clientReq.validateResponse()); } @Test 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 8284aacc97e..2b2ed13fcfe 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 @@ -12,6 +12,7 @@ import com.yahoo.jrt.Supervisor; import com.yahoo.jrt.Transport; import com.yahoo.net.HostName; import com.yahoo.test.ManualClock; +import com.yahoo.vespa.config.GenerationCounter; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.MemoryGenerationCounter; import com.yahoo.vespa.config.server.MockProvisioner; @@ -23,7 +24,7 @@ import com.yahoo.vespa.config.server.TestConfigDefinitionRepo; import com.yahoo.vespa.config.server.application.OrchestratorMock; 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.host.HostRegistries; import com.yahoo.vespa.config.server.monitoring.Metrics; import com.yahoo.vespa.config.server.rpc.security.NoopRpcAuthorizer; import com.yahoo.vespa.config.server.tenant.Tenant; @@ -54,15 +55,15 @@ public class RpcTester implements AutoCloseable { private final ManualClock clock = new ManualClock(Instant.ofEpochMilli(100)); private final String myHostname = HostName.getLocalhost(); private final HostLivenessTracker hostLivenessTracker = new ConfigRequestHostLivenessTracker(clock); + private final GenerationCounter generationCounter; private final Spec spec; - private final RpcServer rpcServer; + private RpcServer rpcServer; private Thread t; private Supervisor sup; private final ApplicationId applicationId; private final TenantName tenantName; private final TenantRepository tenantRepository; - private final HostRegistry hostRegistry = new HostRegistry(); private final ApplicationRepository applicationRepository; private final List<Integer> allocatedPorts = new ArrayList<>(); @@ -84,27 +85,23 @@ public class RpcTester implements AutoCloseable { .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath()) .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath()); configserverConfig = new ConfigserverConfig(configBuilder); - rpcServer = createRpcServer(configserverConfig); TestComponentRegistry componentRegistry = new TestComponentRegistry.Builder() .configDefinitionRepo(new TestConfigDefinitionRepo()) .configServerConfig(configserverConfig) - .reloadListener(rpcServer) - .hostRegistry(hostRegistry) .build(); tenantRepository = new TenantRepository(componentRegistry); tenantRepository.addTenant(tenantName); - startRpcServer(); applicationRepository = new ApplicationRepository.Builder() .withTenantRepository(tenantRepository) - .withConfigserverConfig(configserverConfig) .withProvisioner(new MockProvisioner()) .withOrchestrator(new OrchestratorMock()) .build(); + generationCounter = new MemoryGenerationCounter(); + createAndStartRpcServer(); assertFalse(hostLivenessTracker.lastRequestFrom(myHostname).isPresent()); } public void close() { - rpcServer.stop(); for (Integer port : allocatedPorts) { PortRangeAllocator.releasePort(port); } @@ -116,25 +113,24 @@ public class RpcTester implements AutoCloseable { return port; } - RpcServer createRpcServer(ConfigserverConfig config) throws IOException { - return new RpcServer(config, - new SuperModelRequestHandler(new TestConfigDefinitionRepo(), - configserverConfig, - new SuperModelManager( - config, - Zone.defaultZone(), - new MemoryGenerationCounter(), - new InMemoryFlagSource())), - Metrics.createTestMetrics(), - hostRegistry, - hostLivenessTracker, - new FileServer(temporaryFolder.newFolder()), - new NoopRpcAuthorizer(), - new RpcRequestHandlerProvider()); - } - - void startRpcServer() { - hostRegistry.update(applicationId, List.of("localhost")); + void createAndStartRpcServer() throws IOException { + HostRegistries hostRegistries = new HostRegistries(); + hostRegistries.createApplicationHostRegistry(tenantName).update(applicationId, List.of("localhost")); + hostRegistries.getTenantHostRegistry().update(tenantName, List.of("localhost")); + rpcServer = new RpcServer(configserverConfig, + new SuperModelRequestHandler(new TestConfigDefinitionRepo(), + configserverConfig, + new SuperModelManager( + configserverConfig, + Zone.defaultZone() , + generationCounter, + new InMemoryFlagSource())), + Metrics.createTestMetrics(), + hostRegistries, + hostLivenessTracker, + new FileServer(temporaryFolder.newFolder()), + new NoopRpcAuthorizer(), + new RpcRequestHandlerProvider()); rpcServer.onTenantCreate(tenantRepository.getTenant(tenantName)); t = new Thread(rpcServer); t.start(); @@ -169,7 +165,7 @@ public class RpcTester implements AutoCloseable { void performRequest(Request req) { clock.advance(Duration.ofMillis(10)); - sup.connect(spec).invokeSync(req, 10.0); + sup.connect(spec).invokeSync(req, 120.0); if (req.methodName().equals(RpcServer.getConfigMethodName)) assertEquals(clock.instant(), hostLivenessTracker.lastRequestFrom(myHostname).get()); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java index 12debc347de..9e1edb35b8f 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java @@ -7,6 +7,7 @@ import com.yahoo.config.FileReference; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeType; +import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.security.NodeIdentifier; import com.yahoo.config.provision.security.NodeIdentifierException; import com.yahoo.config.provision.security.NodeIdentity; @@ -65,7 +66,7 @@ public class MultiTenantRpcAuthorizerTest { @Test public void configserver_can_access_files_and_config() throws InterruptedException, ExecutionException { RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.config).build(), - new HostRegistry()); + new HostRegistry<>()); Request configRequest = createConfigRequest(new ConfigKey<>("name", "configid", "namespace"), HOSTNAME); authorizer.authorizeConfigRequest(configRequest) @@ -82,8 +83,8 @@ public class MultiTenantRpcAuthorizerTest { .applicationId(APPLICATION_ID) .build(); - HostRegistry hostRegistry = new HostRegistry(); - hostRegistry.update(APPLICATION_ID, List.of(HOSTNAME.value())); + HostRegistry<TenantName> hostRegistry = new HostRegistry<>(); + hostRegistry.update(APPLICATION_ID.tenant(), List.of(HOSTNAME.value())); RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry); @@ -98,7 +99,7 @@ public class MultiTenantRpcAuthorizerTest { @Test public void proxy_node_can_access_lbservice_config() throws ExecutionException, InterruptedException { - RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.proxy).build(), new HostRegistry()); + RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.proxy).build(), new HostRegistry<>()); Request configRequest = createConfigRequest( new ConfigKey<>(LbServicesConfig.CONFIG_DEF_NAME, "*", LbServicesConfig.CONFIG_DEF_NAMESPACE), @@ -109,7 +110,7 @@ public class MultiTenantRpcAuthorizerTest { @Test public void tenant_node_cannot_access_lbservice_config() throws ExecutionException, InterruptedException { - RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.tenant).build(), new HostRegistry()); + RpcAuthorizer authorizer = createAuthorizer(new NodeIdentity.Builder(NodeType.tenant).build(), new HostRegistry<>()); Request configRequest = createConfigRequest( new ConfigKey<>(LbServicesConfig.CONFIG_DEF_NAME, "*", LbServicesConfig.CONFIG_DEF_NAMESPACE), @@ -128,8 +129,8 @@ public class MultiTenantRpcAuthorizerTest { .applicationId(APPLICATION_ID) .build(); - HostRegistry hostRegistry = new HostRegistry(); - hostRegistry.update(APPLICATION_ID, List.of(HOSTNAME.value())); + HostRegistry<TenantName> hostRegistry = new HostRegistry<>(); + hostRegistry.update(APPLICATION_ID.tenant(), List.of(HOSTNAME.value())); RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry); @@ -148,8 +149,8 @@ public class MultiTenantRpcAuthorizerTest { .applicationId(EVIL_APP_ID) .build(); - HostRegistry hostRegistry = new HostRegistry(); - hostRegistry.update(APPLICATION_ID, List.of(HOSTNAME.value())); + HostRegistry<TenantName> hostRegistry = new HostRegistry<>(); + hostRegistry.update(APPLICATION_ID.tenant(), List.of(HOSTNAME.value())); RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry); @@ -168,7 +169,7 @@ public class MultiTenantRpcAuthorizerTest { .applicationId(EVIL_APP_ID) .build(); - HostRegistry hostRegistry = new HostRegistry(); + HostRegistry<TenantName> hostRegistry = new HostRegistry<>(); RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry); @@ -187,8 +188,8 @@ public class MultiTenantRpcAuthorizerTest { .applicationId(EVIL_APP_ID) .build(); - HostRegistry hostRegistry = new HostRegistry(); - hostRegistry.update(EVIL_APP_ID, List.of(HOSTNAME.value())); + HostRegistry<TenantName> hostRegistry = new HostRegistry<>(); + hostRegistry.update(EVIL_APP_ID.tenant(), List.of(HOSTNAME.value())); RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry); @@ -207,7 +208,7 @@ public class MultiTenantRpcAuthorizerTest { .applicationId(APPLICATION_ID) .build(); - HostRegistry hostRegistry = new HostRegistry(); + HostRegistry<TenantName> hostRegistry = new HostRegistry<>(); RpcAuthorizer authorizer = createAuthorizer(identity, hostRegistry); @@ -218,7 +219,7 @@ public class MultiTenantRpcAuthorizerTest { } - private static RpcAuthorizer createAuthorizer(NodeIdentity identity, HostRegistry hostRegistry) { + private static RpcAuthorizer createAuthorizer(NodeIdentity identity, HostRegistry<TenantName> hostRegistry) { return new MultiTenantRpcAuthorizer( new StaticNodeIdentifier(identity), hostRegistry, 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 90d3bddc88d..76958264d84 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 @@ -187,7 +187,7 @@ public class SessionPreparerTest { @Test(expected = InvalidApplicationException.class) public void require_exception_for_overlapping_host() throws IOException { FilesApplicationPackage app = getApplicationPackage(testApp); - HostRegistry hostValidator = new HostRegistry(); + HostRegistry<ApplicationId> hostValidator = new HostRegistry<>(); hostValidator.update(applicationId("foo"), Collections.singletonList("mytesthost")); preparer.prepare(hostValidator, new BaseDeployLogger(), new PrepareParams.Builder().applicationId(applicationId("default")).build(), Optional.empty(), Instant.now(), app.getAppDir(), app, createSessionZooKeeperClient()); @@ -200,7 +200,7 @@ public class SessionPreparerTest { if (level.equals(Level.WARNING) && message.contains("The host mytesthost is already in use")) logged.append("ok"); }; FilesApplicationPackage app = getApplicationPackage(testApp); - HostRegistry hostValidator = new HostRegistry(); + HostRegistry<ApplicationId> hostValidator = new HostRegistry<>(); ApplicationId applicationId = applicationId(); hostValidator.update(applicationId, Collections.singletonList("mytesthost")); preparer.prepare(hostValidator, logger, new PrepareParams.Builder().applicationId(applicationId).build(), @@ -367,7 +367,7 @@ public class SessionPreparerTest { private PrepareResult prepare(File app, PrepareParams params, long sessionId) throws IOException { FilesApplicationPackage applicationPackage = getApplicationPackage(app); - return preparer.prepare(new HostRegistry(), getLogger(), params, + return preparer.prepare(new HostRegistry<>(), getLogger(), params, Optional.empty(), Instant.now(), applicationPackage.getAppDir(), applicationPackage, createSessionZooKeeperClient(sessionId)); } 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 c7612937d47..bfcfc7d6e43 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 @@ -60,7 +60,6 @@ public class SessionRepositoryTest { private static final TenantName tenantName = TenantName.defaultName(); private static final ApplicationId applicationId = ApplicationId.from(tenantName.value(), "testApp", "default"); private static final File testApp = new File("src/test/apps/app"); - private static final File appJdiscOnly = new File("src/test/apps/app-jdisc-only"); private MockCurator curator; private TenantRepository tenantRepository; @@ -136,7 +135,7 @@ public class SessionRepositoryTest { // tenant is "newTenant" TenantName newTenant = TenantName.from("newTenant"); tenantRepository.addTenant(newTenant); - long sessionId = deploy(ApplicationId.from(newTenant.value(), "testapp", "default"), appJdiscOnly); + long sessionId = deploy(ApplicationId.from(newTenant.value(), "testapp", "default")); SessionRepository sessionRepository2 = tenantRepository.getTenant(newTenant).getSessionRepository(); assertNotNull(sessionRepository2.getLocalSession(sessionId)); } |