/******************************************************************************* * Copyright (c) 2016, 2017 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.dash.test.yaml; import static org.junit.Assert.assertEquals; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.text.Document; import org.eclipse.text.edits.TextEdit; import org.junit.Assert; import org.junit.Test; import org.osgi.framework.Bundle; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.ApplicationManifestHandler; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFCloudDomain; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFStack; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.deployment.CloudApplicationDeploymentProperties; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.deployment.DeploymentProperties; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.deployment.YamlGraphDeploymentProperties; import org.springframework.ide.eclipse.boot.dash.test.AllBootDashTests; import org.springframework.ide.eclipse.boot.dash.test.mocks.MockCFDomain; import org.springsource.ide.eclipse.commons.frameworks.core.util.IOUtil; /** * Manifest YAML file and Deployment properties compare and merge tests. * * @author Alex Boyko * */ public class ManifestCompareMergeTests { public static final String DEFAULT_BUILDPACK = "java_buildpack_offline"; public static final List<CFCloudDomain> SPRING_CLOUD_DOMAINS = Arrays.<CFCloudDomain>asList( new MockCFDomain("springsource.org"), new MockCFDomain("spring.io"), new MockCFDomain("spring.framework")); public static final List<CFStack> SPRING_CLOUD_STACKS = Arrays.asList(new CFStack[] { new CFStack() { @Override public String getName() { return "stack1"; } }}); public static Map<String, Object> createCloudDataMap() { Map<String, Object> cloudData = new HashMap<>(); cloudData.put(ApplicationManifestHandler.DOMAINS_PROP, SPRING_CLOUD_DOMAINS); cloudData.put(ApplicationManifestHandler.BUILDPACK_PROP, DEFAULT_BUILDPACK); cloudData.put(ApplicationManifestHandler.STACK_PROP, SPRING_CLOUD_STACKS); return cloudData; } private static void performMergeTest(File manifest, DeploymentProperties props, File expected) throws Exception { String yamlContents = IOUtil.toString(new FileInputStream(manifest)); String expectText = expected == null ? null : IOUtil.toString(new FileInputStream(expected)); //Note: You don't need to close the FileInputStreams because IOUtil does that already. performMergeTest(props, yamlContents, expectText); } private static void performMergeTest(DeploymentProperties props, String manifest, String expectText) throws Exception { YamlGraphDeploymentProperties yamlGraphProps = new YamlGraphDeploymentProperties(manifest, props.getAppName(), createCloudDataMap()); TextEdit edit = yamlGraphProps.getDifferences(props); if (expectText == null) { assertEquals(null, edit); } else { Document doc = new Document(manifest); edit.apply(doc); assertEquals(expectText.trim(), doc.get().trim()); } } public static File getTestFile(String path) throws IOException { Bundle bundle = Platform.getBundle(AllBootDashTests.PLUGIN_ID); File bundleFile = FileLocator.getBundleFile(bundle); Assert.assertNotNull(bundleFile); Assert.assertTrue("The bundle "+bundle.getBundleId()+" must be unpacked to allow using the embedded test resources", bundleFile.isDirectory()); return new File(bundleFile, path); } @Test public void test_health_check_port() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setHealthCheckType("port"); performMergeTest(props, "applications:\n" + "- name: app\n" + " no-route: true\n" , // ==> null ); performMergeTest(props, "applications:\n" + "- name: app\n" + " no-route: true\n" + " health-check-type: port\n" , // ==> null ); performMergeTest(props, "applications:\n" + "- name: app\n" + " no-route: true\n" + " health-check-type: none\n" , // ==> "applications:\n" + "- name: app\n" + " no-route: true\n" ); } @Test public void test_health_check_none() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setHealthCheckType("none"); performMergeTest(props, "applications:\n" + "- name: app\n" + " no-route: true\n" , // ==> "applications:\n" + "- name: app\n" + " health-check-type: none\n" + " no-route: true\n" ); performMergeTest(props, "applications:\n" + "- name: app\n" + " no-route: true\n" + " health-check-type: port\n" , // ==> "applications:\n" + "- name: app\n" + " no-route: true\n" + " health-check-type: none\n" ); performMergeTest(props, "applications:\n" + "- name: app\n" + " no-route: true\n" + " health-check-type: none\n" , // ==> null ); } @Test public void test_memory_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/memory-1.yml"), props, getTestFile("mergeTestsData/memory-1-expected.yml")); } @Test public void test_memory_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/memory-2.yml"), props, getTestFile("mergeTestsData/memory-2-expected.yml")); } @Test public void test_memory_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/memory-3.yml"), props, getTestFile("mergeTestsData/memory-3-expected.yml")); } @Test public void test_memory_4() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/memory-4.yml"), props, null); } @Test public void test_memory_5() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/memory-5.yml"), props, null); } @Test public void test_memory_6() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(3000); performMergeTest(getTestFile("mergeTestsData/memory-5.yml"), props, getTestFile("mergeTestsData/memory-6-expected.yml")); } @Test public void test_appNameNoMatch_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app1"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/appNameNoMatch-1.yml"), props, getTestFile("mergeTestsData/appNameNoMatch-1-expected.yml")); } @Test public void test_appNameNoMatch_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app1"); props.setUris(Collections.singletonList("test-app-1.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/appNameNoMatch-2.yml"), props, getTestFile("mergeTestsData/appNameNoMatch-2-expected.yml")); } @Test public void test_appNameNoMatch_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app1"); props.setUris(Collections.singletonList("test-app-1.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/appNameNoMatch-3.yml"), props, getTestFile("mergeTestsData/appNameNoMatch-3-expected.yml")); } @Test public void test_appNameNoMatch_4() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app1"); props.setUris(Collections.singletonList("app-1.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/appNameNoMatch-4.yml"), props, getTestFile("mergeTestsData/appNameNoMatch-4-expected.yml")); } @Test public void test_noAppsNode_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/noAppsNode-1.yml"), props, getTestFile("mergeTestsData/noAppsNode-1-expected.yml")); } @Test public void test_noAppsNode_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app1"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/noAppsNode-2.yml"), props, getTestFile("mergeTestsData/noAppsNode-2-expected.yml")); } @Test public void test_noManifest_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/noManifest-1.yml"), props, getTestFile("mergeTestsData/noManifest-1-expected.yml")); } @Test public void test_noManifest_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/noManifest-2.yml"), props, getTestFile("mergeTestsData/noManifest-2-expected.yml")); } @Test public void test_map_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); Map<String, String> env = new LinkedHashMap<>(); env.put("KEY1", "value1"); env.put("KEY2", "value2"); env.put("KEY3", "value3"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/map-1.yml"), props, getTestFile("mergeTestsData/map-1-expected.yml")); } @Test public void test_map_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); Map<String, String> env = new LinkedHashMap<>(); env.put("KEY1", "value1"); env.put("KEY2", "value2"); env.put("KEY3", "value3"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/map-2.yml"), props, getTestFile("mergeTestsData/map-2-expected.yml")); } @Test public void test_map_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/map-3.yml"), props, getTestFile("mergeTestsData/map-3-expected.yml")); } @Test public void test_map_4() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/map-4.yml"), props, getTestFile("mergeTestsData/map-4-expected.yml")); } @Test public void test_map_5() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); Map<String, String> env = new LinkedHashMap<>(); env.put("KEY1", "value1"); env.put("KEY2", "value2"); env.put("KEY3", "value3"); env.put("KEY4", "value4"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/map-5.yml"), props, getTestFile("mergeTestsData/map-5-expected.yml")); } @Test public void test_map_6() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); Map<String, String> env = new LinkedHashMap<>(); env.put("KEY1", "value1"); env.put("KEY2", "value2"); env.put("KEY3", "value3"); env.put("KEY4", "value4"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/map-6.yml"), props, getTestFile("mergeTestsData/map-6-expected.yml")); } @Test public void test_map_7() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); Map<String, String> env = new LinkedHashMap<>(); env.put("KEY1", "value1"); env.put("KEY2", "value2"); env.put("KEY3", "value3"); env.put("KEY4", "value4"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/map-7.yml"), props, getTestFile("mergeTestsData/map-7-expected.yml")); } @Test public void test_map_8() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/map-8.yml"), props, getTestFile("mergeTestsData/map-8-expected.yml")); } @Test public void test_map_9() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); Map<String, String> env = new LinkedHashMap<>(); env.put("KEY1", "value1"); env.put("KEY2", "value2"); env.put("KEY3", "value3"); env.put("KEY4", "value4"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/map-9.yml"), props, getTestFile("mergeTestsData/map-9-expected.yml")); } @Test public void test_map_10() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); Map<String, String> env = new LinkedHashMap<>(); env.put("KEY1", "value1"); env.put("KEY2", "value2"); env.put("KEY3", "value3"); env.put("KEY4", "value4"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/map-10.yml"), props, getTestFile("mergeTestsData/map-10-expected.yml")); } @Test public void test_map_11() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); Map<String, String> env = new LinkedHashMap<>(); env.put("KEY1", "value1"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/map-11.yml"), props, getTestFile("mergeTestsData/map-11-expected.yml")); } @Test public void test_instances_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/instances-1.yml"), props, getTestFile("mergeTestsData/instances-1-expected.yml")); } @Test public void test_instances_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/instances-2.yml"), props, getTestFile("mergeTestsData/instances-2-expected.yml")); } @Test public void test_instances_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/instances-3.yml"), props, getTestFile("mergeTestsData/instances-3-expected.yml")); } @Test public void test_instances_4() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/instances-4.yml"), props, null); } @Test public void test_instances_5() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/instances-5.yml"), props, getTestFile("mergeTestsData/instances-5-expected.yml")); } @Test public void test_root_comment_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(512); performMergeTest(getTestFile("mergeTestsData/root-comment-1.yml"), props, getTestFile("mergeTestsData/root-comment-1-expected.yml")); } @Test public void test_root_comment_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(512); performMergeTest(getTestFile("mergeTestsData/root-comment-2.yml"), props, getTestFile("mergeTestsData/root-comment-2-expected.yml")); } @Test public void test_root_comment_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(512); props.setInstances(2); performMergeTest(getTestFile("mergeTestsData/root-comment-3.yml"), props, getTestFile("mergeTestsData/root-comment-3-expected.yml")); } @Test public void test_root_comment_4() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.singletonList("test-app.springsource.org")); props.setMemory(512); performMergeTest(getTestFile("mergeTestsData/root-comment-4.yml"), props, getTestFile("mergeTestsData/root-comment-4-expected.yml")); } @Test public void test_no_route_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.<String>emptyList()); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/no-route-1.yml"), props, getTestFile("mergeTestsData/no-route-1-expected.yml")); } @Test public void test_no_route_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.<String>emptyList()); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/no-route-2.yml"), props, getTestFile("mergeTestsData/no-route-2-expected.yml")); } @Test public void test_no_route_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.<String>emptyList()); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/no-route-3.yml"), props, null); } @Test public void test_no_hostname_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("my-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/no-hostname-1.yml"), props, getTestFile("mergeTestsData/no-hostname-1-expected.yml")); } @Test public void test_no_hostname_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/no-hostname-2.yml"), props, getTestFile("mergeTestsData/no-hostname-2-expected.yml")); } @Test public void test_no_hostname_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/no-hostname-3.yml"), props, null); } @Test public void test_random_route_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/random-route-1.yml"), props, null); } @Test public void test_random_route_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("my-app1.springsource.org", "my-app2.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/random-route-2.yml"), props, getTestFile("mergeTestsData/random-route-2-expected.yml")); } @Test public void test_random_route_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app2.springsource.org")); props.setMemory(1024); props.setBuildpack("java_buildpack_offline"); performMergeTest(getTestFile("mergeTestsData/random-route-3.yml"), props, getTestFile("mergeTestsData/random-route-3-expected.yml")); } @Test public void test_hosts_domains_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("my-app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/hosts-domains-1.yml"), props, getTestFile("mergeTestsData/hosts-domains-1-expected.yml")); } @Test public void test_hosts_domains_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app1.springsource.org", "app2.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/hosts-domains-2.yml"), props, getTestFile("mergeTestsData/hosts-domains-2-expected.yml")); } @Test public void test_hosts_domains_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app1.springsource.org", "app2.springsource.org", "app1.spring.io", "app2.spring.io")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/hosts-domains-3.yml"), props, null); } @Test public void test_hosts_domains_4() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app1.springsource.org", "app2.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/hosts-domains-4.yml"), props, getTestFile("mergeTestsData/hosts-domains-4-expected.yml")); } @Test public void test_hosts_domains_5() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app.springsource.org")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/hosts-domains-5.yml"), props, getTestFile("mergeTestsData/hosts-domains-5-expected.yml")); } @Test public void test_hosts_domains_6() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("spring.framework")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/hosts-domains-6.yml"), props, getTestFile("mergeTestsData/hosts-domains-6-expected.yml")); } @Test public void test_hosts_domains_7() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app1.springsource.org", "app2.springsource.org", "app3.springsource.org", "app1.spring.io", "app2.spring.io", "app3.spring.io", "app1.spring.framework", "app2.spring.framework", "app3.spring.framework")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/hosts-domains-7.yml"), props, null); } @Test public void test_hosts_domains_8() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app1.spring.io", "app2.spring.io")); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/hosts-domains-8.yml"), props, getTestFile("mergeTestsData/hosts-domains-8-expected.yml")); } @Test public void test_root_node_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(3); props.setUris(Arrays.asList("app.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-node-1.yml"), props, getTestFile("mergeTestsData/root-node-1-expected.yml")); } @Test public void test_root_node_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-node-2.yml"), props, getTestFile("mergeTestsData/root-node-2-expected.yml")); } @Test public void test_root_list_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); props.setServices(Arrays.asList("s1", "s2", "s3")); performMergeTest(getTestFile("mergeTestsData/root-list-1.yml"), props, getTestFile("mergeTestsData/root-list-1-expected.yml")); } @Test public void test_root_list_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); props.setServices(Arrays.asList("s1", "s2", "s3", "s4", "s5")); performMergeTest(getTestFile("mergeTestsData/root-list-2.yml"), props, getTestFile("mergeTestsData/root-list-2-expected.yml")); } @Test public void test_root_list_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); props.setServices(Arrays.asList("s1", "s3", "s4", "s5")); performMergeTest(getTestFile("mergeTestsData/root-list-3.yml"), props, getTestFile("mergeTestsData/root-list-3-expected.yml")); } @Test public void test_root_map_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); Map<String, String> env = new HashMap<>(); env.put("k1", "v1"); env.put("k2", "v2"); env.put("k3", "v3"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/root-map-1.yml"), props, getTestFile("mergeTestsData/root-map-1-expected.yml")); } @Test public void test_root_map_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); Map<String, String> env = new HashMap<>(); env.put("k1", "v1"); env.put("k2", "v2-alt"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/root-map-2.yml"), props, getTestFile("mergeTestsData/root-map-2-expected.yml")); } @Test public void test_root_map_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-map-3.yml"), props, getTestFile("mergeTestsData/root-map-3-expected.yml")); } @Test public void test_root_map_4() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); Map<String, String> env = new HashMap<>(); env.put("k2", "v2"); props.setEnvironmentVariables(env); performMergeTest(getTestFile("mergeTestsData/root-map-4.yml"), props, getTestFile("mergeTestsData/root-map-4-expected.yml")); } @Test public void test_root_noroute_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-noroute-1.yml"), props, getTestFile("mergeTestsData/root-noroute-1-expected.yml")); } @Test public void test_root_noroute_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); performMergeTest(getTestFile("mergeTestsData/root-noroute-2.yml"), props, getTestFile("mergeTestsData/root-noroute-2-expected.yml")); } @Test public void test_root_randomroute_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app-1.springsource.org", "app-2.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-randomroute-1.yml"), props, getTestFile("mergeTestsData/root-randomroute-1-expected.yml")); } @Test public void test_root_randomroute_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-randomroute-2.yml"), props, null); } @Test public void test_root_nohost_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("my-app.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-nohost-1.yml"), props, getTestFile("mergeTestsData/root-nohost-1-expected.yml")); } @Test public void test_root_nohost_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("springsource.org", "spring.io")); performMergeTest(getTestFile("mergeTestsData/root-nohost-2.yml"), props, getTestFile("mergeTestsData/root-nohost-2-expected.yml")); } @Test public void test_root_nohost_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-nohost-3.yml"), props, null); } @Test public void test_root_hosts_domains_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app1.springsource.org", "app2.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-hosts-domains-1.yml"), props, getTestFile("mergeTestsData/root-hosts-domains-1-expected.yml")); } @Test public void test_root_hosts_domains_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("my-app.springsource.org", "test-app1.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-hosts-domains-2.yml"), props, getTestFile("mergeTestsData/root-hosts-domains-2-expected.yml")); } @Test public void test_root_hosts_domains_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("test-app-1.springsource.org", "test-app-3.springsource.org")); performMergeTest(getTestFile("mergeTestsData/root-hosts-domains-3.yml"), props, getTestFile("mergeTestsData/root-hosts-domains-3-expected.yml")); } @Test public void test_routes_1() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app-1.springsource.org", "app-2.springsource.org", "app-3.springsource.org")); performMergeTest(getTestFile("mergeTestsData/routes-1.yml"), props, getTestFile("mergeTestsData/routes-1-expected.yml")); } @Test public void test_routes_2() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app-1.springsource.org", "app-2.springsource.org", "app-3.springsource.org")); performMergeTest(getTestFile("mergeTestsData/routes-2.yml"), props, getTestFile("mergeTestsData/routes-2-expected.yml")); } @Test public void test_routes_3() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app-1.springsource.org", "app-2.springsource.org", "app-3.springsource.org")); performMergeTest(getTestFile("mergeTestsData/routes-3.yml"), props, getTestFile("mergeTestsData/routes-3-expected.yml")); } @Test public void test_routes_4() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app-1.springsource.org", "app-2.springsource.org", "app-3.springsource.org")); performMergeTest(getTestFile("mergeTestsData/routes-4.yml"), props, getTestFile("mergeTestsData/routes-4-expected.yml")); } @Test public void test_routes_5() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app-1.springsource.org", "app-2.springsource.org", "app-3.springsource.org")); performMergeTest(getTestFile("mergeTestsData/routes-5.yml"), props, getTestFile("mergeTestsData/routes-5-expected.yml")); } @Test public void test_routes_6() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("demo-app"); props.setMemory(1024); props.setInstances(1); props.setUris(Arrays.asList("route-2.springsource.org")); performMergeTest(getTestFile("mergeTestsData/routes-6.yml"), props, getTestFile("mergeTestsData/routes-6-expected.yml")); } @Test public void test_routes_paths_ports() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setMemory(2048); props.setInstances(1); props.setUris(Arrays.asList("app-1.springsource.org", "app-2.springsource.org", "app-3.springsource.org", "app-4.springsource.org/myappPath/moresegments", "tcp.springsource.org:9003")); performMergeTest(getTestFile("mergeTestsData/routes-paths-ports.yml"), props, getTestFile("mergeTestsData/routes-paths-ports-expected.yml")); } @Test public void test_no_route_5() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Collections.<String>emptyList()); props.setMemory(2048); performMergeTest(getTestFile("mergeTestsData/no-route-5.yml"), props, getTestFile("mergeTestsData/no-route-5-expected.yml")); } @Test public void test_random_route_4() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app-1.springsource.org", "app-2.springsource.org", "app-3.springsource.org")); props.setMemory(512); performMergeTest(getTestFile("mergeTestsData/random-route-4.yml"), props, null); } @Test public void test_random_route_5() throws Exception { CloudApplicationDeploymentProperties props = new CloudApplicationDeploymentProperties(); props.setAppName("app"); props.setUris(Arrays.asList("app.springsource.org")); props.setMemory(512); performMergeTest(getTestFile("mergeTestsData/random-route-5.yml"), props, getTestFile("mergeTestsData/random-route-5-expected.yml")); } }