From 124f27638315c1d9b64869ba8a3a74fced266bb3 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Thu, 8 Nov 2018 10:39:03 +0100 Subject: Simplify supermodel, part 2 --- .../config/server/model/LbServicesProducer.java | 19 ++++--- .../vespa/config/server/model/RoutingProducer.java | 12 ++--- .../server/model/SuperModelConfigProvider.java | 22 +++----- .../config/server/SuperModelControllerTest.java | 21 +++----- .../server/SuperModelRequestHandlerTest.java | 60 ++++++++++++---------- .../server/model/LbServicesProducerTest.java | 53 ++++++++----------- .../config/server/model/RoutingProducerTest.java | 30 ++++++----- 7 files changed, 100 insertions(+), 117 deletions(-) (limited to 'configserver/src') diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/model/LbServicesProducer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/model/LbServicesProducer.java index 85249d4e87d..20e8c664761 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/model/LbServicesProducer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/model/LbServicesProducer.java @@ -11,24 +11,25 @@ import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; /** * Produces lb-services cfg * - * @author vegardh - * @since 5.9 + * @author Vegard Havdal */ public class LbServicesProducer implements LbServicesConfig.Producer { - private final Map> models; + private final Map> models; private final Zone zone; - public LbServicesProducer(Map> models, Zone zone) { + public LbServicesProducer(Map> models, Zone zone) { this.models = models; this.zone = zone; } @@ -42,13 +43,11 @@ public class LbServicesProducer implements LbServicesConfig.Producer { }); } - private LbServicesConfig.Tenants.Builder getTenantConfig(Map apps) { + private LbServicesConfig.Tenants.Builder getTenantConfig(Set apps) { LbServicesConfig.Tenants.Builder tb = new LbServicesConfig.Tenants.Builder(); - apps.keySet().stream() - .sorted() - .forEach(applicationId -> { - tb.applications(createLbAppIdKey(applicationId), getAppConfig(apps.get(applicationId))); - }); + apps.stream() + .sorted(Comparator.comparing(ApplicationInfo::getApplicationId)) + .forEach(applicationInfo -> tb.applications(createLbAppIdKey(applicationInfo.getApplicationId()), getAppConfig(applicationInfo))); return tb; } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/model/RoutingProducer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/model/RoutingProducer.java index 51e685c86c8..236cb4e9b97 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/model/RoutingProducer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/model/RoutingProducer.java @@ -10,26 +10,26 @@ import com.yahoo.config.provision.TenantName; import com.yahoo.vespa.config.server.tenant.TenantRepository; import java.util.Map; +import java.util.Set; /** * Create global config based on info from the zone application * - * @author can - * @since 5.60 + * @author Christian Andersen */ public class RoutingProducer implements RoutingConfig.Producer { static final ApplicationName ROUTING_APPLICATION = ApplicationName.from("routing"); - private final Map> models; + private final Map> models; - public RoutingProducer(Map> models) { + public RoutingProducer(Map> models) { this.models = models; } @Override public void getConfig(RoutingConfig.Builder builder) { - for (Map model : models.values()) { - model.values().stream() + for (Set model : models.values()) { + model.stream() .filter(application -> isHostedVespaRoutingApplication(application.getApplicationId())) .forEach(application -> { for (HostInfo host : application.getModel().getHosts()) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModelConfigProvider.java b/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModelConfigProvider.java index e087ef64ae3..4a75414c272 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModelConfigProvider.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/model/SuperModelConfigProvider.java @@ -8,7 +8,6 @@ import com.yahoo.config.ConfigurationRuntimeException; import com.yahoo.config.model.api.ApplicationInfo; import com.yahoo.config.model.api.SuperModel; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.config.ConfigKey; import com.yahoo.vespa.config.ConfigPayload; @@ -19,8 +18,7 @@ import java.util.Map; /** * A config model that provides config containing information from all known tenants and applications. * - * @author vegardh - * @since 5.9 + * @author Vegard Havdal */ public class SuperModelConfigProvider implements LbServicesConfig.Producer, RoutingConfig.Producer { @@ -30,8 +28,8 @@ public class SuperModelConfigProvider implements LbServicesConfig.Producer, Rout public SuperModelConfigProvider(SuperModel superModel, Zone zone) { this.superModel = superModel; - this.lbProd = new LbServicesProducer(Collections.unmodifiableMap(superModel.getAllModels()), zone); - this.zoneProd = new RoutingProducer(Collections.unmodifiableMap(superModel.getAllModels())); + this.lbProd = new LbServicesProducer(Collections.unmodifiableMap(superModel.getModelsPerTenant()), zone); + this.zoneProd = new RoutingProducer(Collections.unmodifiableMap(superModel.getModelsPerTenant())); } public SuperModel getSuperModel() { @@ -53,7 +51,7 @@ public class SuperModelConfigProvider implements LbServicesConfig.Producer, Rout } } - public Map> applicationModels() { return superModel.getAllModels(); } + public Map applicationModels() { return superModel.getModels(); } @Override public void getConfig(LbServicesConfig.Builder builder) { @@ -68,15 +66,11 @@ public class SuperModelConfigProvider implements LbServicesConfig.Producer, Rout public CONFIGTYPE getConfig(Class configClass, ApplicationId applicationId, String configId) { - TenantName tenant = applicationId.tenant(); - if (!superModel.getAllModels().containsKey(tenant)) { - throw new IllegalArgumentException("Tenant " + tenant + " not found"); + Map models = superModel.getModels(); + if (!models.containsKey(applicationId)) { + throw new IllegalArgumentException("Application " + applicationId + " not found"); } - Map applications = superModel.getAllModels().get(tenant); - if (!applications.containsKey(applicationId)) { - throw new IllegalArgumentException("Application id " + applicationId + " not found"); - } - ApplicationInfo application = applications.get(applicationId); + ApplicationInfo application = models.get(applicationId); ConfigKey key = new ConfigKey<>(configClass, configId); ConfigPayload payload = application.getModel().getConfig(key, null); return payload.toInstance(configClass, configId); 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 b7ca52390ed..7dead49f999 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 @@ -12,7 +12,6 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.TenantName; -import com.yahoo.config.provision.Version; import com.yahoo.config.provision.Zone; import com.yahoo.jrt.Request; import com.yahoo.vespa.config.ConfigKey; @@ -83,25 +82,21 @@ public class SuperModelControllerTest { @Test public void test_lb_config_multiple_apps_legacy_super_model() throws IOException, SAXException { - Map> models = new LinkedHashMap<>(); + Map models = new LinkedHashMap<>(); TenantName t1 = TenantName.from("t1"); TenantName t2 = TenantName.from("t2"); - models.put(t1, new LinkedHashMap<>()); - models.put(t2, new LinkedHashMap<>()); 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"); - // TODO must fix equals, hashCode on Tenant - Version vespaVersion = Version.fromIntValues(1, 2, 3); ApplicationId simple = applicationId("mysimpleapp", t1); ApplicationId advanced = applicationId("myadvancedapp", t1); ApplicationId tooAdvanced = applicationId("minetooadvancedapp", t2); - models.get(t1).put(simple, createApplicationInfo(testApp1, simple, 4l)); - models.get(t1).put(advanced, createApplicationInfo(testApp2, simple, 4l)); - models.get(t2).put(tooAdvanced, createApplicationInfo(testApp3, simple, 4l)); + 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); + SuperModel superModel = new SuperModel(models, false); SuperModelController han = new SuperModelController(new SuperModelConfigProvider(superModel, Zone.defaultZone()), new TestConfigDefinitionRepo(), 2, new UncompressedConfigResponseFactory()); LbServicesConfig.Builder lb = new LbServicesConfig.Builder(); han.getSuperModel().getConfig(lb); @@ -121,15 +116,13 @@ public class SuperModelControllerTest { 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"); - // TODO must fix equals, hashCode on Tenant - Version vespaVersion = Version.fromIntValues(1, 2, 3); 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, simple, 4l)); - models.put(tooAdvanced, createApplicationInfo(testApp3, simple, 4l)); + models.put(advanced, createApplicationInfo(testApp2, advanced, 4l)); + models.put(tooAdvanced, createApplicationInfo(testApp3, tooAdvanced, 4l)); SuperModel superModel = new SuperModel(models, false); SuperModelController han = new SuperModelController(new SuperModelConfigProvider(superModel, Zone.defaultZone()), new TestConfigDefinitionRepo(), 2, new UncompressedConfigResponseFactory()); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java index 24412ce1af8..ebfb8dc622c 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java @@ -8,7 +8,6 @@ import com.yahoo.config.provision.Version; import com.yahoo.config.provisioning.FlavorsConfig; import com.yahoo.vespa.config.server.application.Application; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.TenantName; import com.yahoo.vespa.config.server.application.ApplicationSet; import com.yahoo.vespa.config.server.monitoring.MetricUpdater; import com.yahoo.vespa.curator.mock.MockCurator; @@ -22,6 +21,8 @@ import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Optional; import static org.hamcrest.CoreMatchers.is; @@ -29,7 +30,6 @@ import static org.junit.Assert.*; /** * @author Ulf Lilleengen - * @since 5.9 */ public class SuperModelRequestHandlerTest { @@ -51,56 +51,57 @@ public class SuperModelRequestHandlerTest { @Test public void test_super_model_reload() throws IOException, SAXException { - TenantName tenantA = TenantName.from("a"); + ApplicationId foo = applicationId("a", "foo"); + ApplicationId bar = applicationId("a", "foo"); + assertNotNull(controller.getHandler()); long gen = counter.increment(); - controller.reloadConfig(createApp(tenantA, "foo", 3l, 1)); + controller.reloadConfig(createApp(foo, 3l)); assertNotNull(controller.getHandler()); assertThat(controller.getHandler().getGeneration(), is(gen)); - controller.reloadConfig(createApp(tenantA, "foo", 4l, 2)); + controller.reloadConfig(createApp(foo, 4l)); assertThat(controller.getHandler().getGeneration(), is(gen)); // Test that a new app is used when there already exist an application with the same id - ApplicationId appId = new ApplicationId.Builder().tenant(tenantA).applicationName("foo").build(); - assertThat(controller.getHandler().getSuperModel().applicationModels().get(tenantA).get(appId).getGeneration(), is(4l)); + assertThat(controller.getHandler().getSuperModel().applicationModels().get(foo).getGeneration(), is(4l)); gen = counter.increment(); - controller.reloadConfig(createApp(tenantA, "bar", 2l, 3)); + controller.reloadConfig(createApp(bar, 2l)); assertThat(controller.getHandler().getGeneration(), is(gen)); } @Test public void test_super_model_remove() throws IOException, SAXException { - TenantName tenantA = TenantName.from("a"); - TenantName tenantB = TenantName.from("b"); + ApplicationId foo = applicationId("a", "foo"); + ApplicationId bar = applicationId("a", "bar"); + ApplicationId baz = applicationId("b", "baz"); + long gen = counter.increment(); - controller.reloadConfig(createApp(tenantA, "foo", 3l, 1)); - controller.reloadConfig(createApp(tenantA, "bar", 30l, 2)); - controller.reloadConfig(createApp(tenantB, "baz", 9l, 3)); + controller.reloadConfig(createApp(foo, 3l)); + controller.reloadConfig(createApp(bar, 30l)); + controller.reloadConfig(createApp(baz, 9l)); assertThat(controller.getHandler().getGeneration(), is(gen)); - assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(2)); - assertThat(controller.getHandler().getSuperModel().applicationModels().get(TenantName.from("a")).size(), is(2)); - controller.removeApplication( - new ApplicationId.Builder().tenant("a").applicationName("unknown").build()); + assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(3)); + assertEquals(Arrays.asList(foo, bar, baz), new ArrayList<>(controller.getHandler().getSuperModel().applicationModels().keySet())); + controller.removeApplication(new ApplicationId.Builder().tenant("a").applicationName("unknown").build()); assertThat(controller.getHandler().getGeneration(), is(gen)); - assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(2)); - assertThat(controller.getHandler().getSuperModel().applicationModels().get(TenantName.from("a")).size(), is(2)); + assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(3)); + assertEquals(Arrays.asList(foo, bar, baz), new ArrayList<>(controller.getHandler().getSuperModel().applicationModels().keySet())); gen = counter.increment(); - controller.removeApplication( - new ApplicationId.Builder().tenant("a").applicationName("bar").build()); + controller.removeApplication(bar); assertThat(controller.getHandler().getSuperModel().applicationModels().size(), is(2)); - assertThat(controller.getHandler().getSuperModel().applicationModels().get(TenantName.from("a")).size(), is(1)); + assertEquals(Arrays.asList(foo, baz), new ArrayList<>(controller.getHandler().getSuperModel().applicationModels().keySet())); assertThat(controller.getHandler().getGeneration(), is(gen)); } @Test public void test_super_model_master_generation() throws IOException, SAXException { - TenantName tenantA = TenantName.from("a"); + ApplicationId foo = applicationId("a", "foo"); long masterGen = 10; ConfigserverConfig configserverConfig = new ConfigserverConfig(new ConfigserverConfig.Builder().masterGeneration(masterGen)); manager = new SuperModelManager(configserverConfig, emptyNodeFlavors(), counter); controller = new SuperModelRequestHandler(new TestConfigDefinitionRepo(), configserverConfig, manager); long gen = counter.increment(); - controller.reloadConfig(createApp(tenantA, "foo", 3L, 1)); + controller.reloadConfig(createApp(foo, 3L)); assertThat(controller.getHandler().getGeneration(), is(masterGen + gen)); } @@ -111,19 +112,18 @@ public class SuperModelRequestHandlerTest { assertTrue(controller.hasApplication(ApplicationId.global(), Optional.empty())); } - private ApplicationSet createApp(TenantName tenant, String application, long generation, long version) throws IOException, SAXException { + private ApplicationSet createApp(ApplicationId applicationId, long generation) throws IOException, SAXException { return ApplicationSet.fromSingle( new TestApplication( new VespaModel(FilesApplicationPackage.fromFile(testApp)), new ServerCache(), generation, - new ApplicationId.Builder().tenant(tenant).applicationName(application).build(), - version)); + applicationId)); } private static class TestApplication extends Application { - TestApplication(VespaModel vespaModel, ServerCache cache, long appGeneration, ApplicationId app, long version) { + TestApplication(VespaModel vespaModel, ServerCache cache, long appGeneration, ApplicationId app) { super(vespaModel, cache, appGeneration, false, Version.fromIntValues(1, 2, 3), MetricUpdater.createTestUpdater(), app); } @@ -133,4 +133,8 @@ public class SuperModelRequestHandlerTest { return new NodeFlavors(new FlavorsConfig(new FlavorsConfig.Builder())); } + private ApplicationId applicationId(String tenantName, String applicationName) { + return ApplicationId.from(tenantName, applicationName, "default"); + } + } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java index 9b94029e8fa..35b6e4cf644 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/model/LbServicesProducerTest.java @@ -23,7 +23,9 @@ import org.xml.sax.SAXException; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Random; @@ -36,7 +38,6 @@ import static org.junit.Assert.assertTrue; /** * @author Ulf Lilleengen - * @since 5.26 */ public class LbServicesProducerTest { private static final String rotation1 = "rotation-1"; @@ -46,10 +47,10 @@ public class LbServicesProducerTest { @Test public void testDeterministicGetConfig() throws IOException, SAXException { - Map> testModel = createTestModel(new DeployState.Builder().rotations(rotations)); + Map> testModel = createTestModel(new DeployState.Builder().rotations(rotations)); LbServicesConfig last = null; for (int i = 0; i < 100; i++) { - testModel = randomizeTenant(testModel, i); + testModel = randomizeApplications(testModel, i); LbServicesConfig config = getLbServicesConfig(Zone.defaultZone(), testModel); if (last != null) { assertConfig(last, config); @@ -60,7 +61,7 @@ public class LbServicesProducerTest { @Test public void testConfigAliases() throws IOException, SAXException { - Map> testModel = createTestModel(new DeployState.Builder()); + Map> testModel = createTestModel(new DeployState.Builder()); LbServicesConfig conf = getLbServicesConfig(Zone.defaultZone(), testModel); final LbServicesConfig.Tenants.Applications.Hosts.Services services = conf.tenants("foo").applications("foo:prod:default:default").hosts("foo.foo.yahoo.com").services("qrserver"); assertThat(services.servicealiases().size(), is(1)); @@ -88,14 +89,14 @@ public class LbServicesProducerTest { private LbServicesConfig createModelAndGetLbServicesConfig(RegionName regionName) throws IOException, SAXException { final Zone zone = new Zone(Environment.prod, regionName); - Map> testModel = createTestModel(new DeployState.Builder() - .zone(zone) - .properties(new DeployProperties.Builder().build()) - .zone(zone)); + Map> testModel = createTestModel(new DeployState.Builder() + .zone(zone) + .properties(new DeployProperties.Builder().build()) + .zone(zone)); return getLbServicesConfig(new Zone(Environment.prod, regionName), testModel); } - private LbServicesConfig getLbServicesConfig(Zone zone, Map> testModel) { + private LbServicesConfig getLbServicesConfig(Zone zone, Map> testModel) { LbServicesProducer producer = new LbServicesProducer(testModel, zone); LbServicesConfig.Builder builder = new LbServicesConfig.Builder(); producer.getConfig(builder); @@ -104,7 +105,7 @@ public class LbServicesProducerTest { @Test public void testConfigAliasesWithRotations() throws IOException, SAXException { - Map> testModel = createTestModel(new DeployState.Builder().rotations(rotations)); + Map> testModel = createTestModel(new DeployState.Builder().rotations(rotations)); RegionName regionName = RegionName.from("us-east-1"); LbServicesConfig conf = getLbServicesConfig(new Zone(Environment.prod, regionName), testModel); final LbServicesConfig.Tenants.Applications.Hosts.Services services = conf.tenants("foo").applications("foo:prod:" + regionName.value() + ":default").hosts("foo.foo.yahoo.com").services("qrserver"); @@ -118,45 +119,35 @@ public class LbServicesProducerTest { assertThat(services.endpointaliases(3), is(rotation2)); } - private Map> randomizeTenant(Map> testModel, int seed) { - Map> randomizedTenants = new LinkedHashMap<>(); + private Map> randomizeApplications(Map> testModel, int seed) { + Map> randomizedApplications = new LinkedHashMap<>(); List keys = new ArrayList<>(testModel.keySet()); Collections.shuffle(keys, new Random(seed)); for (TenantName key : keys) { - randomizedTenants.put(key, randomizeApplications(testModel.get(key), randomizedTenants.size())); - } - return randomizedTenants; - } - - private Map randomizeApplications(Map applicationIdApplicationMap, int seed) { - Map randomizedApplications = new LinkedHashMap<>(); - List keys = new ArrayList<>(applicationIdApplicationMap.keySet()); - Collections.shuffle(keys, new Random(seed)); - for (ApplicationId key : keys) { - randomizedApplications.put(key, applicationIdApplicationMap.get(key)); + randomizedApplications.put(key, testModel.get(key)); } return randomizedApplications; } - private Map> createTestModel(DeployState.Builder deployStateBuilder) throws IOException, SAXException { - Map> tMap = new LinkedHashMap<>(); + private Map> createTestModel(DeployState.Builder deployStateBuilder) throws IOException, SAXException { + Map> tMap = new LinkedHashMap<>(); TenantName foo = TenantName.from("foo"); TenantName bar = TenantName.from("bar"); TenantName baz = TenantName.from("baz"); tMap.put(foo, createTestApplications(foo, deployStateBuilder)); tMap.put(bar, createTestApplications(bar, deployStateBuilder)); - tMap.put(baz, createTestApplications(baz, deployStateBuilder)); + tMap.put(bar, createTestApplications(baz, deployStateBuilder)); return tMap; } - private Map createTestApplications(TenantName tenant, DeployState.Builder deploystateBuilder) throws IOException, SAXException { - Map aMap = new LinkedHashMap<>(); + private Set createTestApplications(TenantName tenant, DeployState.Builder deploystateBuilder) throws IOException, SAXException { + Set aMap = new LinkedHashSet<>(); ApplicationId fooApp = new ApplicationId.Builder().tenant(tenant).applicationName("foo").build(); ApplicationId barApp = new ApplicationId.Builder().tenant(tenant).applicationName("bar").build(); ApplicationId bazApp = new ApplicationId.Builder().tenant(tenant).applicationName("baz").build(); - aMap.put(fooApp, createApplication(fooApp, deploystateBuilder)); - aMap.put(barApp, createApplication(barApp, deploystateBuilder)); - aMap.put(bazApp, createApplication(bazApp, deploystateBuilder)); + aMap.add(createApplication(fooApp, deploystateBuilder)); + aMap.add(createApplication(barApp, deploystateBuilder)); + aMap.add(createApplication(bazApp, deploystateBuilder)); return aMap; } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java index 8a6d772ff14..4d968a58bb6 100755 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/model/RoutingProducerTest.java @@ -17,18 +17,20 @@ import org.xml.sax.SAXException; import java.io.IOException; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.Map; +import java.util.Set; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; /** - * @author can + * @author Christian Andersen */ public class RoutingProducerTest { @Test public void testNodesFromRoutingAppOnly() throws Exception { - Map> testModel = createTestModel(new DeployState.Builder()); + Map> testModel = createTestModel(new DeployState.Builder()); RoutingProducer producer = new RoutingProducer(testModel); RoutingConfig.Builder builder = new RoutingConfig.Builder(); producer.getConfig(builder); @@ -38,26 +40,26 @@ public class RoutingProducerTest { assertThat(config.hosts(1), is("hosted-vespa.routing2.yahoo.com")); } - private Map> createTestModel(DeployState.Builder deployStateBuilder) throws IOException, SAXException { - Map> tMap = new LinkedHashMap<>(); + private Map> createTestModel(DeployState.Builder deployStateBuilder) throws IOException, SAXException { + Map> apps = new LinkedHashMap<>(); TenantName foo = TenantName.from("foo"); TenantName bar = TenantName.from("bar"); TenantName routing = TenantName.from(TenantRepository.HOSTED_VESPA_TENANT.value()); - tMap.put(foo, createTestApplications(foo, deployStateBuilder)); - tMap.put(bar, createTestApplications(bar, deployStateBuilder)); - tMap.put(routing, createTestApplications(routing, deployStateBuilder)); - return tMap; + apps.put(foo, createTestApplications(foo, deployStateBuilder)); + apps.put(bar, createTestApplications(bar, deployStateBuilder)); + apps.put(routing, createTestApplications(routing, deployStateBuilder)); + return apps; } - private Map createTestApplications(TenantName tenant, DeployState.Builder deploystateBuilder) throws IOException, SAXException { - Map aMap = new LinkedHashMap<>(); + private Set createTestApplications(TenantName tenant, DeployState.Builder deploystateBuilder) throws IOException, SAXException { + Set applicationInfos = new LinkedHashSet<>(); ApplicationId fooApp = new ApplicationId.Builder().tenant(tenant).applicationName("foo").build(); ApplicationId barApp = new ApplicationId.Builder().tenant(tenant).applicationName("bar").build(); ApplicationId routingApp = new ApplicationId.Builder().tenant(tenant).applicationName(RoutingProducer.ROUTING_APPLICATION.value()).build(); - aMap.put(fooApp, createApplication(fooApp, deploystateBuilder)); - aMap.put(barApp, createApplication(barApp, deploystateBuilder)); - aMap.put(routingApp, createApplication(routingApp, deploystateBuilder)); - return aMap; + applicationInfos.add(createApplication(fooApp, deploystateBuilder)); + applicationInfos.add(createApplication(barApp, deploystateBuilder)); + applicationInfos.add(createApplication(routingApp, deploystateBuilder)); + return applicationInfos; } private ApplicationInfo createApplication(ApplicationId appId, DeployState.Builder deploystateBuilder) throws IOException, SAXException { -- cgit v1.2.3