/** * © Copyright 2015 Hewlett Packard Enterprise Development LP * Copyright (c) ActiveState 2014 - ALL RIGHTS RESERVED. */ package com.hpe.cloudfoundryjenkins; import hudson.FilePath; import hudson.model.FreeStyleBuild; import hudson.model.FreeStyleProject; import hudson.model.TaskListener; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.jvnet.hudson.test.JenkinsRule; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.hpe.cloudfoundryjenkins.CloudFoundryPushPublisher.DescriptorImpl.*; import static org.junit.Assert.*; public class DeploymentInfoTest { @Rule public ExpectedException exception = ExpectedException.none(); @Rule public JenkinsRule j = new JenkinsRule(); @Test public void testReadManifestFileAllOptions() throws Exception { File manifestFile = new File(getClass().getResource("all-options-manifest.yml").toURI()); FilePath manifestFilePath = new FilePath(manifestFile); ManifestReader manifestReader = new ManifestReader(manifestFilePath); Map<String, Object> appInfo = manifestReader.getApplicationInfo(); DeploymentInfo deploymentInfo = new DeploymentInfo(System.out, appInfo, "jenkins-build-name", "domain-name", ""); assertEquals("hello-java", deploymentInfo.getAppName()); assertEquals(512, deploymentInfo.getMemory()); assertEquals("testhost", deploymentInfo.getHostname()); assertEquals(4, deploymentInfo.getInstances()); assertEquals(42, deploymentInfo.getTimeout()); assertEquals(true, deploymentInfo.isNoRoute()); assertEquals("testdomain.local", deploymentInfo.getDomain()); assertEquals("target" + File.separator + "hello-java-1.0.war", deploymentInfo.getAppPath()); assertEquals("https://github.com/heroku/heroku-buildpack-hello", deploymentInfo.getBuildpack()); assertEquals("customstack", deploymentInfo.getStack()); assertEquals("echo Hello", deploymentInfo.getCommand()); Map<String, String> expectedEnvs = new HashMap<String, String>(); expectedEnvs.put("ENV_VAR_ONE", "value1"); expectedEnvs.put("ENV_VAR_TWO", "value2"); expectedEnvs.put("ENV_VAR_THREE", "value3"); assertEquals(expectedEnvs, deploymentInfo.getEnvVars()); List<String> expectedServices = new ArrayList<String>(); expectedServices.add("service_name_one"); expectedServices.add("service_name_two"); expectedServices.add("service_name_three"); assertEquals(expectedServices, deploymentInfo.getServicesNames()); } @Test public void testReadManifestFileDefaultOptions() throws Exception { File manifestFile = new File(getClass().getResource("no-options-manifest.yml").toURI()); FilePath manifestFilePath = new FilePath(manifestFile); ManifestReader manifestReader = new ManifestReader(manifestFilePath); Map<String, Object> appInfo = manifestReader.getApplicationInfo(); DeploymentInfo deploymentInfo = new DeploymentInfo(System.out, appInfo, "jenkins-build-name", "domain-name", ""); assertEquals("jenkins-build-name", deploymentInfo.getAppName()); assertEquals(DEFAULT_MEMORY, deploymentInfo.getMemory()); assertEquals("jenkins-build-name", deploymentInfo.getHostname()); assertEquals(DEFAULT_INSTANCES, deploymentInfo.getInstances()); assertEquals(DEFAULT_STACK, deploymentInfo.getStack()); assertEquals(DEFAULT_TIMEOUT, deploymentInfo.getTimeout()); assertEquals(false, deploymentInfo.isNoRoute()); assertEquals("domain-name", deploymentInfo.getDomain()); assertEquals("", deploymentInfo.getAppPath()); assertNull(deploymentInfo.getBuildpack()); assertNull(deploymentInfo.getCommand()); assertTrue(deploymentInfo.getEnvVars().isEmpty()); assertTrue(deploymentInfo.getServicesNames().isEmpty()); } @Test public void testReadManifestFileMacroTokens() throws Exception { FreeStyleProject project = j.createFreeStyleProject(); FreeStyleBuild build = project.scheduleBuild2(0).get(); build.setDisplayName("test-build"); TaskListener listener = j.createTaskListener(); File manifestFile = new File(getClass().getResource("token-macro-manifest.yml").toURI()); FilePath manifestFilePath = new FilePath(manifestFile); ManifestReader manifestReader = new ManifestReader(manifestFilePath); Map<String, Object> appInfo = manifestReader.getApplicationInfo(); DeploymentInfo deploymentInfo = new DeploymentInfo(build, listener, System.out, appInfo, "jenkins-build-name", "domain-name", ""); assertEquals("test-build", deploymentInfo.getAppName()); } @Test public void testIgnoreUnknownEnvVarsFileMacroTokens() throws Exception { FreeStyleProject project = j.createFreeStyleProject(); FreeStyleBuild build = project.scheduleBuild2(0).get(); build.setDisplayName("test-build"); TaskListener listener = j.createTaskListener(); File manifestFile = new File(getClass().getResource("unknown-env-var-token-manifest.yml").toURI()); FilePath manifestFilePath = new FilePath(manifestFile); ManifestReader manifestReader = new ManifestReader(manifestFilePath); Map<String, Object> appInfo = manifestReader.getApplicationInfo(); DeploymentInfo deploymentInfo = new DeploymentInfo(build, listener, System.out, appInfo, "jenkins-build-name", "domain-name", ""); assertEquals("test-build", deploymentInfo.getAppName()); Map<String, String> expectedEnvs = new HashMap<String, String>(); expectedEnvs.put("ENV_VAR_ONE", "$SOME_UNKNOWN_MACRO"); assertEquals(expectedEnvs, deploymentInfo.getEnvVars()); } @Test public void testOptionalJenkinsConfigAllOptions() throws Exception { List<CloudFoundryPushPublisher.EnvironmentVariable> envVars = new ArrayList<CloudFoundryPushPublisher.EnvironmentVariable>(); envVars.add(new CloudFoundryPushPublisher.EnvironmentVariable("ENV_VAR_ONE", "value1")); envVars.add(new CloudFoundryPushPublisher.EnvironmentVariable("ENV_VAR_TWO", "value2")); envVars.add(new CloudFoundryPushPublisher.EnvironmentVariable("ENV_VAR_THREE", "value3")); List<CloudFoundryPushPublisher.ServiceName> services = new ArrayList<CloudFoundryPushPublisher.ServiceName>(); services.add(new CloudFoundryPushPublisher.ServiceName("service_name_one")); services.add(new CloudFoundryPushPublisher.ServiceName("service_name_two")); services.add(new CloudFoundryPushPublisher.ServiceName("service_name_three")); CloudFoundryPushPublisher.ManifestChoice jenkinsManifest = new CloudFoundryPushPublisher.ManifestChoice("jenkinsConfig", null, "hello-java", 512, "testhost", 4, 42, true, "target/hello-java-1.0.war", "https://github.com/heroku/heroku-buildpack-hello", "customstack", "echo Hello", "testdomain.local", envVars, services); DeploymentInfo deploymentInfo = new DeploymentInfo(System.out, jenkinsManifest, "jenkins-build-name", "domain-name"); assertEquals("hello-java", deploymentInfo.getAppName()); assertEquals(512, deploymentInfo.getMemory()); assertEquals("testhost", deploymentInfo.getHostname()); assertEquals(4, deploymentInfo.getInstances()); assertEquals(42, deploymentInfo.getTimeout()); assertEquals(true, deploymentInfo.isNoRoute()); assertEquals("testdomain.local", deploymentInfo.getDomain()); assertEquals("target" + File.separator + "hello-java-1.0.war", deploymentInfo.getAppPath()); assertEquals("https://github.com/heroku/heroku-buildpack-hello", deploymentInfo.getBuildpack()); assertEquals("customstack", deploymentInfo.getStack()); assertEquals("echo Hello", deploymentInfo.getCommand()); Map<String, String> expectedEnvs = new HashMap<String, String>(); expectedEnvs.put("ENV_VAR_ONE", "value1"); expectedEnvs.put("ENV_VAR_TWO", "value2"); expectedEnvs.put("ENV_VAR_THREE", "value3"); assertEquals(expectedEnvs, deploymentInfo.getEnvVars()); List<String> expectedServices = new ArrayList<String>(); expectedServices.add("service_name_one"); expectedServices.add("service_name_two"); expectedServices.add("service_name_three"); assertEquals(expectedServices, deploymentInfo.getServicesNames()); } @Test public void testReadJenkinsConfigDefaultOptions() throws Exception { CloudFoundryPushPublisher.ManifestChoice jenkinsManifest = new CloudFoundryPushPublisher.ManifestChoice("jenkinsConfig", null, "", 0, "", 0, 0, false, "", "", "", "", "", null, null); DeploymentInfo deploymentInfo = new DeploymentInfo(System.out, jenkinsManifest, "jenkins-build-name", "domain-name"); assertEquals("jenkins-build-name", deploymentInfo.getAppName()); assertEquals(DEFAULT_MEMORY, deploymentInfo.getMemory()); assertEquals("jenkins-build-name", deploymentInfo.getHostname()); assertEquals(DEFAULT_INSTANCES, deploymentInfo.getInstances()); assertEquals(DEFAULT_TIMEOUT, deploymentInfo.getTimeout()); assertEquals(DEFAULT_STACK, deploymentInfo.getStack()); assertEquals(false, deploymentInfo.isNoRoute()); assertEquals("domain-name", deploymentInfo.getDomain()); assertEquals("", deploymentInfo.getAppPath()); assertNull(deploymentInfo.getBuildpack()); assertNull(deploymentInfo.getCommand()); assertTrue(deploymentInfo.getEnvVars().isEmpty()); assertTrue(deploymentInfo.getServicesNames().isEmpty()); } @Test public void testReadJenkinsConfigMacroTokens() throws Exception { FreeStyleProject project = j.createFreeStyleProject(); FreeStyleBuild build = project.scheduleBuild2(0).get(); build.setDisplayName("test-build"); TaskListener listener = j.createTaskListener(); CloudFoundryPushPublisher.ManifestChoice jenkinsManifest = new CloudFoundryPushPublisher.ManifestChoice("jenkinsConfig", null, "${BUILD_DISPLAY_NAME}", 0, "", 0, 0, false, "", "", "", "", "", null, null); DeploymentInfo deploymentInfo = new DeploymentInfo(build, listener, System.out, jenkinsManifest, "jenkins-build-name", "domain-name"); assertEquals("test-build", deploymentInfo.getAppName()); } }