@Test public void testSatisfySuperTemplateRequirements() throws Exception { TestTemplate template1 = new TestTemplate(new URI("template1"), Lists.<JobTemplate>newArrayList(), ImmutableMap.of("key1", "value1"), Lists.newArrayList("required")); TestTemplate template2 = new TestTemplate(new URI("template2"), Lists.<JobTemplate>newArrayList(template1), ImmutableMap.of("required", "r1"), Lists.newArrayList("required2")); Collection<String> required = template2.getRequiredConfigList(); Assert.assertEquals(required.size(), 1); Assert.assertTrue(required.contains("required2")); Config rawTemplate = template2.getRawTemplateConfig(); Assert.assertEquals(rawTemplate.getString("key1"), "value1"); Assert.assertEquals(rawTemplate.getString("required"), "r1"); Config resolved = template2.getResolvedConfig(ConfigFactory.parseMap(ImmutableMap.of("required2", "r2"))); Assert.assertEquals(resolved.getString("key1"), "value1"); Assert.assertEquals(resolved.getString("required"), "r1"); Assert.assertEquals(resolved.getString("required2"), "r2"); }
@Test public void testMultiInheritance() throws Exception { TestTemplate template1 = new TestTemplate(new URI("template1"), Lists.<JobTemplate>newArrayList(), ImmutableMap.of("key1", "value1"), Lists.newArrayList("required")); TestTemplate template2 = new TestTemplate(new URI("template2"), Lists.<JobTemplate>newArrayList(), ImmutableMap.of("key2", "value2"), Lists.newArrayList("required2")); TestTemplate inheriting = new TestTemplate(new URI("inheriting"), Lists.<JobTemplate>newArrayList(template1, template2), ImmutableMap.<String, String>of(), Lists.<String>newArrayList()); Collection<String> required = inheriting.getRequiredConfigList(); Assert.assertEquals(required.size(), 2); Assert.assertTrue(required.contains("required")); Assert.assertTrue(required.contains("required2")); Config rawTemplate = inheriting.getRawTemplateConfig(); Assert.assertEquals(rawTemplate.getString("key1"), "value1"); Assert.assertEquals(rawTemplate.getString("key2"), "value2"); Config resolved = inheriting.getResolvedConfig(ConfigFactory.parseMap(ImmutableMap.of("required", "r1", "required2", "r2"))); Assert.assertEquals(resolved.getString("key1"), "value1"); Assert.assertEquals(resolved.getString("key2"), "value2"); Assert.assertEquals(resolved.getString("required"), "r1"); Assert.assertEquals(resolved.getString("required2"), "r2"); }
@Test public void testLoopInheritance() throws Exception { JobCatalogWithTemplates catalog = Mockito.mock(JobCatalogWithTemplates.class); Mockito.when(catalog.getTemplate(new URI("template2"))).thenAnswer( new TestTemplateAnswer(Lists.newArrayList(new URI("template3")), ImmutableMap.of("key2", "value2"), Lists.<String>newArrayList(), catalog)); Mockito.when(catalog.getTemplate(new URI("template3"))).thenAnswer( new TestTemplateAnswer(Lists.newArrayList(new URI("template1")), ImmutableMap.of("key3", "value3"), Lists.newArrayList("required3"), catalog)); TestTemplate template = new TestTemplate(new URI("template1"), Lists.newArrayList(new URI("template2")), ImmutableMap.of("key1", "value1"), Lists.newArrayList("required"), catalog); Collection<String> required = template.getRequiredConfigList(); Assert.assertEquals(required.size(), 2); Assert.assertTrue(required.contains("required")); Assert.assertTrue(required.contains("required3")); Config rawTemplate = template.getRawTemplateConfig(); Assert.assertEquals(rawTemplate.getString("key1"), "value1"); Assert.assertEquals(rawTemplate.getString("key2"), "value2"); Assert.assertEquals(rawTemplate.getString("key3"), "value3"); Config resolved = template.getResolvedConfig(ConfigFactory.parseMap(ImmutableMap.of("required", "r1", "required3", "r3"))); Assert.assertEquals(resolved.getString("key1"), "value1"); Assert.assertEquals(resolved.getString("key2"), "value2"); Assert.assertEquals(resolved.getString("key3"), "value3"); Assert.assertEquals(resolved.getString("required"), "r1"); Assert.assertEquals(resolved.getString("required3"), "r3"); }
@Test public void testSimpleInheritance() throws Exception { TestTemplate template1 = new TestTemplate(new URI("template1"), Lists.<JobTemplate>newArrayList(), ImmutableMap.of("key1", "value1"), Lists.newArrayList("required")); TestTemplate template2 = new TestTemplate(new URI("template2"), Lists.<JobTemplate>newArrayList(template1), ImmutableMap.of("key2", "value2"), Lists.newArrayList("required2")); Collection<String> required = template2.getRequiredConfigList(); Assert.assertEquals(required.size(), 2); Assert.assertTrue(required.contains("required")); Assert.assertTrue(required.contains("required2")); Config rawTemplate = template2.getRawTemplateConfig(); Assert.assertEquals(rawTemplate.getString("key1"), "value1"); Assert.assertEquals(rawTemplate.getString("key2"), "value2"); Config resolved = template2.getResolvedConfig(ConfigFactory.parseMap(ImmutableMap.of("required", "r1", "required2", "r2"))); Assert.assertEquals(resolved.getString("key1"), "value1"); Assert.assertEquals(resolved.getString("key2"), "value2"); Assert.assertEquals(resolved.getString("required"), "r1"); Assert.assertEquals(resolved.getString("required2"), "r2"); try { // should throw exception because missing required property resolved = template2.getResolvedConfig(ConfigFactory.parseMap(ImmutableMap.of("required", "r1"))); Assert.fail(); } catch (JobTemplate.TemplateException te) { // expected } }
@Override public JobTemplate answer(InvocationOnMock invocation) throws Throwable { return new TestTemplate((URI) invocation.getArguments()[0], this.superTemplateUris, this.rawTemplate, this.required, this.catalog); } }