getContent("composite.simple.network.yaml")); getContent("docker.simple.network.yaml")); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 3, template1.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 2, template1.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 0, template1.components); assertEqualsYamls(toUnixLineEnding(expectedTemplateYaml), toUnixLineEnding(getContent("composite.simple.network.expected2.yaml")), true); assertEqualsYamls(toUnixLineEnding(template1Yaml), toUnixLineEnding(getContent("composite.simple.network.yaml")), true); getContent("composite.complex.network.yaml")); getContent("docker.complex.network.yaml")); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 3, template2.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 3, template2.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 0, template2.components); assertEqualsYamls(toUnixLineEnding(getContent("composite.simple.network.expected.yaml")), toUnixLineEnding(template2Yaml), true);
private static void removeEmptyValues(Map<String, Object> map) { for (String key : map.keySet()) { Object value = map.get(key); if (value instanceof Map) { removeEmptyValues((Map) value); } if (value instanceof Collection && ((Collection) value).isEmpty()) { map.remove(key); } } }
@Test public void testConvertCompositeTemplateToDockerComposeWithNetwork() throws IOException { // To Docker Compose with simple network entities DockerCompose expectedCompose = deserializeDockerCompose( getContent("docker.simple.network.yaml")); String expectedComposeYaml = serializeDockerCompose(expectedCompose); CompositeTemplate template = deserializeCompositeTemplate( getContent("composite.simple.network.yaml")); DockerCompose compose = fromCompositeTemplateToDockerCompose(template); String composeYaml = serializeDockerCompose(compose); assertEqualsYamls(toUnixLineEnding(expectedComposeYaml), toUnixLineEnding(getContent("docker.simple.network.yaml"))); assertEqualsYamls(toUnixLineEnding(composeYaml), toUnixLineEnding(getContent("docker.simple.network.expected.yaml"))); // To Docker Compose with complex network entities expectedCompose = deserializeDockerCompose( getContent("docker.complex.network.yaml")); expectedComposeYaml = serializeDockerCompose(expectedCompose); CompositeTemplate template2 = deserializeCompositeTemplate( getContent("composite.complex.network.yaml")); DockerCompose compose2 = fromCompositeTemplateToDockerCompose(template2); String compose2Yaml = serializeDockerCompose(compose2); assertEqualsYamls(expectedComposeYaml, compose2Yaml); }
@Test public void testConvertCompositeTemplateToDockerCompose() throws IOException { DockerCompose expectedCompose = deserializeDockerCompose( getContent("docker.wordpress.1.yaml")); String expectedComposeYaml = serializeDockerCompose(expectedCompose); CompositeTemplate template = deserializeCompositeTemplate( getContent("composite.wordpress.yaml")); DockerCompose compose = fromCompositeTemplateToDockerCompose(template); String composeYaml = serializeDockerCompose(compose); assertEqualsYamls(expectedComposeYaml, composeYaml); }
@Test public void testConvertDockerComposeToCompositeTemplate() throws IOException { CompositeTemplate expectedTemplate = deserializeCompositeTemplate( getContent("composite.wordpress.yaml")); getContent("docker.wordpress.1.yaml")); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 2, template1.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 0, template1.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 0, template1.components); assertEqualsYamls(expectedTemplateYaml, template1Yaml, true); getContent("docker.wordpress.2.yaml")); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 2, template1.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 0, template1.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 0, template1.components); assertEqualsYamls(expectedTemplateYaml, template2Yaml, true);
@Test public void testDeserializeSerializeSimpleDockerComposeWithNetwork() throws IOException { String expectedContent = getContent("docker.simple.network.yaml"); DockerCompose compose = deserializeDockerCompose(expectedContent); String content = serializeDockerCompose(compose); assertEquals(toUnixLineEnding(expectedContent), toUnixLineEnding(content)); CompositeTemplate template = fromDockerComposeToCompositeTemplate(compose); assertNull(template.id); assertNull(template.status); assertComponentTypes(template.components); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 3, template.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 2, template.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 0, template.components); String contentTemplate = serializeCompositeTemplate(template); assertTrue((contentTemplate != null) && (!contentTemplate.isEmpty())); }
@Test public void testGetYamlTypeWithValidInputs() throws IOException { String compositeTemplate = getContent("composite.simple.yaml"); String dockerCompose = getContent("docker.simple.network.yaml"); String kubernetesTemplate = getContent("kubernetes.wordpress.deployment.yaml"); String multiKubernetesTemplate = kubernetesTemplate + "\n" + kubernetesTemplate; String[] input = new String[] { compositeTemplate, dockerCompose, kubernetesTemplate, multiKubernetesTemplate }; YamlType[] expectedTypes = new YamlType[] { YamlType.COMPOSITE_TEMPLATE, YamlType.DOCKER_COMPOSE, YamlType.KUBERNETES_TEMPLATE, YamlType.KUBERNETES_TEMPLATE }; for (int i = 0; i < input.length; i++) { YamlType actualType = getYamlType(input[i]); assertEquals(expectedTypes[i], actualType); } }
@Test public void testDeserializeSerializeSimpleCompositeTemplateWithNetwork() throws IOException { String expectedContent = getContent("composite.simple.network.yaml"); CompositeTemplate template = deserializeCompositeTemplate(expectedContent); assertNull(template.id); assertNull(template.status); assertComponentTypes(template.components); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 3, template.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 2, template.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 0, template.components); ContainerDescription appData = (ContainerDescription) template.components.get("app").data; assertNotNull(appData); assertTrue(appData.networks.containsKey("front")); assertTrue(appData.networks.containsKey("back")); }
public static void assertEqualsYamls(String expected, String actual) throws IOException { assertEqualsYamls(expected, actual, false); }
getContent("composite.simple.volume.yaml")); getContent("docker.simple.volume.yaml")); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 2, template1.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 0, template1.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 2, template1.components); assertEqualsYamls(expectedTemplateYaml, template1Yaml, true); getContent("composite.complex.volume.yaml")); getContent("docker.complex.volume.yaml")); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 3, template2.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 0, template2.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 3, template2.components); assertEqualsYamls(expectedTemplateYaml, template2Yaml, true);
@Test public void testConvertCompositeTemplateToDockerComposeWithVolume() throws IOException { // To Docker Compose with simple volume entities DockerCompose expectedCompose = deserializeDockerCompose( getContent("docker.simple.volume.yaml")); String expectedComposeYaml = serializeDockerCompose(expectedCompose); CompositeTemplate template = deserializeCompositeTemplate( getContent("composite.simple.volume.yaml")); DockerCompose compose = fromCompositeTemplateToDockerCompose(template); String composeYaml = serializeDockerCompose(compose); assertEqualsYamls(expectedComposeYaml, composeYaml); // To Docker Compose with complex network entities expectedCompose = deserializeDockerCompose( getContent("docker.complex.volume.yaml")); expectedComposeYaml = serializeDockerCompose(expectedCompose); CompositeTemplate template2 = deserializeCompositeTemplate( getContent("composite.complex.volume.yaml")); DockerCompose compose2 = fromCompositeTemplateToDockerCompose(template2); String compose2Yaml = serializeDockerCompose(compose2); assertEqualsYamls(expectedComposeYaml, compose2Yaml); }
/** * The test should verify the case where we try to get the YAML type of * multi yaml docker compose or composite template. */ @Test public void testGetYamlTypeWithMultiYamlsShouldFail() throws IOException { String compositeTemplate = getContent("composite.simple.yaml"); String dockerCompose = getContent("docker.simple.network.yaml"); String[] multiYamls = new String[] { compositeTemplate + "\n" + compositeTemplate, dockerCompose + "\n" + dockerCompose }; String expectedFailMsg = "Multiple YAML definitions are not supported " + "for Docker Compose and YAML Blueprint."; for (String multiYaml : multiYamls) { try { getYamlType(multiYaml); } catch (Throwable ex) { assertEquals(expectedFailMsg, ex.getMessage()); } } }
@Test public void testDeserializeSerializeSimpleCompositeTemplate() throws IOException { String expectedContent = getContent("composite.simple.yaml"); CompositeTemplate template = deserializeCompositeTemplate(expectedContent); assertNull(template.id); assertNull(template.status); assertComponentTypes(template.components); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 1, template.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 0, template.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 0, template.components); template.id = "new-id"; template.status = Status.RETIRED; ContainerDescription helloData = (ContainerDescription) template.components .get("hello").data; helloData.healthConfig = new HealthConfig(); helloData.logConfig = new LogConfig(); String content = serializeCompositeTemplate(template); assertNotNull(content); assertFalse(content.contains("new-id")); assertFalse(content.contains(Status.RETIRED.toString())); assertFalse(content.contains("health_config")); assertFalse(content.contains("log_config")); }
@Test public void testDeserializeSerializeComplexCompositeTemplateWithNetwork() throws IOException { String expectedContent = getContent("composite.complex.network.yaml"); CompositeTemplate template = deserializeCompositeTemplate(expectedContent); assertNull(template.id); assertNull(template.status); assertComponentTypes(template.components); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 3, template.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 3, template.components); String content = serializeCompositeTemplate(template); expectedContent = expectedContent.replace("h5-name", "h5"); assertEqualsYamls(toUnixLineEnding(getContent("composite.complex.network.expected.yaml")), toUnixLineEnding(content), true); DockerCompose compose = fromCompositeTemplateToDockerCompose(template); String contentCompose = serializeDockerCompose(compose); assertTrue((contentCompose != null) && (!contentCompose.isEmpty())); }
@Test public void testGetYamlType() throws IOException { assertEquals(YamlType.DOCKER_COMPOSE, getYamlType(getContent("docker.wordpress.1.yaml"))); assertEquals(YamlType.COMPOSITE_TEMPLATE, getYamlType(getContent("composite.wordpress.yaml"))); assertEquals(YamlType.UNKNOWN, getYamlType(getContent("docker.redis.v1.yaml"))); try { getYamlType(getContent("../docker-host-private-key.PEM")); fail("With invalid content should fail!"); } catch (IllegalArgumentException iae) { assertTrue(iae.getMessage().startsWith("Provided yaml is invalid")); } catch (LocalizableValidationException e) { assertTrue(e.getMessage().startsWith("Error processing YAML content:")); } }
@SuppressWarnings("rawtypes") public static void assertEqualsYamls(String expected, String actual, boolean ignoreEmptyValues) throws IOException { Map expectedMap = YamlMapper.objectMapper().readValue(expected, Map.class); Map actualMap = YamlMapper.objectMapper().readValue(actual, Map.class); if (ignoreEmptyValues) { removeEmptyValues(expectedMap); removeEmptyValues(actualMap); } Logger.getLogger(CompositeTemplateUtilTest.class.getName()).log(Level.INFO, "ignoreEmptyValues: " + ignoreEmptyValues + " \nassertEqualsYamls : expected=<" + YamlMapper.objectMapper().writeValueAsString(expectedMap) + "> and actual=<" + YamlMapper.objectMapper().writeValueAsString(actualMap) + ">"); assertEquals(expectedMap, actualMap); }
@Test public void testDeserializeSerializeComplexDockerComposeWithNetwork() throws IOException { String expectedContent = getContent("docker.complex.network.yaml"); DockerCompose compose = deserializeDockerCompose(expectedContent); String content = serializeDockerCompose(compose); assertEqualsYamls(toUnixLineEnding(expectedContent), toUnixLineEnding(content)); CompositeTemplate template = fromDockerComposeToCompositeTemplate(compose); assertNull(template.id); assertNull(template.status); assertComponentTypes(template.components); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 3, template.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 3, template.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 0, template.components); String contentTemplate = serializeCompositeTemplate(template); assertTrue((contentTemplate != null) && (!contentTemplate.isEmpty())); }
@Test public void testConvertSmallDockerCompose() throws IOException { // YAML with 'command' as string DockerCompose compose1 = deserializeDockerCompose(getContent("docker.django.yaml")); CompositeTemplate template1 = fromDockerComposeToCompositeTemplate(compose1); String template1Yaml = serializeCompositeTemplate(template1); assertTrue((template1Yaml != null) && (!template1Yaml.isEmpty())); // YAML with 'command' as list DockerCompose compose2 = deserializeDockerCompose(getContent("docker.rails.yaml")); CompositeTemplate template2 = fromDockerComposeToCompositeTemplate(compose2); String template2Yaml = serializeCompositeTemplate(template2); assertTrue((template2Yaml != null) && (!template2Yaml.isEmpty())); }
@Test public void testDeserializeSerializeComplexDockerCompose() throws IOException { String expectedContent = getContent("docker.complex.yaml"); DockerCompose compose = deserializeDockerCompose(expectedContent); String content = serializeDockerCompose(compose); assertEqualsYamls(toUnixLineEnding(expectedContent), toUnixLineEnding(content)); CompositeTemplate template = fromDockerComposeToCompositeTemplate(compose); assertNull(template.id); assertNull(template.status); assertComponentTypes(template.components); assertContainersComponents(ResourceType.CONTAINER_TYPE.getContentType(), 4, template.components); assertContainersComponents(ResourceType.NETWORK_TYPE.getContentType(), 0, template.components); assertContainersComponents(ResourceType.VOLUME_TYPE.getContentType(), 0, template.components); String contentTemplate = serializeCompositeTemplate(template); assertTrue((contentTemplate != null) && (!contentTemplate.isEmpty())); }
@Test public void testConvertCompositeTemplateToKubernetesTemplate() throws IOException { CompositeTemplate template = deserializeCompositeTemplate( getContent("composite.wordpress.kubernetes.yaml")); String mysqlServiceSerialized = serializeKubernetesEntity(mysqlService); String expectedWordpressDeployment = getContent("kubernetes.wordpress.deployment.yaml"); String expectedWordpressService = getContent("kubernetes.wordpress.service.yaml"); String expectedMysqlDeployment = getContent("kubernetes.mysql.deployment.yaml"); String expectedMySqlService = getContent("kubernetes.mysql.service.yaml");