2018-07-30 09:28:24 +02:00
#!groovy
2019-01-18 09:25:22 +02:00
import com.sap.piper.JenkinsUtils
2018-07-30 09:28:24 +02:00
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.ExpectedException
import org.junit.rules.RuleChain
2019-01-30 11:07:00 +02:00
2018-07-30 09:28:24 +02:00
import util.BasePiperTest
2018-09-03 11:09:09 +02:00
import util.JenkinsCredentialsRule
2018-07-30 09:28:24 +02:00
import util.JenkinsEnvironmentRule
import util.JenkinsDockerExecuteRule
import util.JenkinsLoggingRule
2019-01-30 11:07:00 +02:00
import util.JenkinsReadFileRule
2018-07-30 09:28:24 +02:00
import util.JenkinsShellCallRule
import util.JenkinsStepRule
import util.JenkinsWriteFileRule
2018-08-31 10:22:43 +02:00
import util.JenkinsReadYamlRule
2018-07-30 09:28:24 +02:00
import util.Rules
2019-01-22 17:13:59 +02:00
import static org . hamcrest . Matchers . stringContainsInOrder
2018-08-29 10:01:16 +02:00
import static org . junit . Assert . assertThat
import static org . hamcrest . Matchers . hasItem
2019-01-18 09:25:22 +02:00
import static org . hamcrest . Matchers . is
2018-11-27 12:47:44 +02:00
import static org . hamcrest . Matchers . not
2018-08-29 10:01:16 +02:00
import static org . hamcrest . Matchers . hasEntry
import static org . hamcrest . Matchers . containsString
2018-07-30 09:28:24 +02:00
class CloudFoundryDeployTest extends BasePiperTest {
2019-01-30 11:07:00 +02:00
private File tmpDir = File . createTempDir ( )
2018-07-30 09:28:24 +02:00
private ExpectedException thrown = ExpectedException . none ( )
2019-01-22 10:22:15 +02:00
private JenkinsLoggingRule loggingRule = new JenkinsLoggingRule ( this )
2019-01-22 10:19:28 +02:00
private JenkinsShellCallRule shellRule = new JenkinsShellCallRule ( this )
2019-01-22 10:29:15 +02:00
private JenkinsWriteFileRule writeFileRule = new JenkinsWriteFileRule ( this )
2019-01-30 11:07:00 +02:00
private JenkinsReadFileRule readFileRule = new JenkinsReadFileRule ( this , tmpDir . getAbsolutePath ( ) )
2019-01-22 10:34:18 +02:00
private JenkinsDockerExecuteRule dockerExecuteRule = new JenkinsDockerExecuteRule ( this )
2019-01-22 10:25:42 +02:00
private JenkinsStepRule stepRule = new JenkinsStepRule ( this )
2019-01-22 10:27:45 +02:00
private JenkinsEnvironmentRule environmentRule = new JenkinsEnvironmentRule ( this )
2019-01-22 10:27:01 +02:00
private JenkinsReadYamlRule readYamlRule = new JenkinsReadYamlRule ( this )
2018-07-30 09:28:24 +02:00
2019-01-18 09:25:22 +02:00
private writeInfluxMap = [ : ]
class JenkinsUtilsMock extends JenkinsUtils {
def isJobStartedByUser ( ) {
return true
}
}
2018-07-30 09:28:24 +02:00
@Rule
public RuleChain rules = Rules
. getCommonRules ( this )
2019-01-22 10:27:01 +02:00
. around ( readYamlRule )
2018-07-30 09:28:24 +02:00
. around ( thrown )
2019-01-22 10:22:15 +02:00
. around ( loggingRule )
2019-01-22 10:19:28 +02:00
. around ( shellRule )
2019-01-22 10:29:15 +02:00
. around ( writeFileRule )
2019-01-30 11:07:00 +02:00
. around ( readFileRule )
2019-01-22 10:34:18 +02:00
. around ( dockerExecuteRule )
2019-01-22 10:27:45 +02:00
. around ( environmentRule )
2018-09-03 11:09:09 +02:00
. around ( new JenkinsCredentialsRule ( this ) . withCredentials ( 'test_cfCredentialsId' , 'test_cf' , '********' ) )
2019-01-22 10:34:18 +02:00
. around ( stepRule ) // needs to be activated after dockerExecuteRule, otherwise executeDocker is not mocked
2018-07-30 09:28:24 +02:00
2019-01-18 09:25:22 +02:00
@Before
void init ( ) {
2019-01-18 16:33:36 +02:00
helper . registerAllowedMethod ( 'influxWriteData' , [ Map . class ] , { m - >
2019-01-18 09:25:22 +02:00
writeInfluxMap = m
} )
}
2018-07-30 09:28:24 +02:00
@Test
void testNoTool ( ) throws Exception {
nullScript . commonPipelineEnvironment . configuration = [
general: [
camSystemRole: 'testRole' ,
cfCredentialsId: 'myCreds'
] ,
stages: [
acceptance: [
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
deployUser: 'testUser' ,
]
] ,
steps: [
cloudFoundryDeploy: [ ]
]
]
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-07-30 09:28:24 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-07-30 09:28:24 +02:00
deployTool: '' ,
stageName: 'acceptance' ,
] )
2018-08-29 10:01:16 +02:00
// asserts
2019-01-22 10:22:15 +02:00
assertThat ( loggingRule . log , containsString ( '[cloudFoundryDeploy] General parameters: deployTool=, deployType=standard, cfApiEndpoint=https://api.cf.eu10.hana.ondemand.com, cfOrg=testOrg, cfSpace=testSpace, cfCredentialsId=myCreds, deployUser=testUser' ) )
2018-07-30 09:28:24 +02:00
}
@Test
void testNotAvailableTool ( ) throws Exception {
nullScript . commonPipelineEnvironment . configuration = [
general: [
cfCredentialsId: 'myCreds'
] ,
stages: [
acceptance: [
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
deployUser: 'testUser' ,
]
] ,
steps: [
cloudFoundryDeploy: [ ]
]
]
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-07-30 09:28:24 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-07-30 09:28:24 +02:00
deployTool: 'notAvailable' ,
stageName: 'acceptance'
] )
2018-08-29 10:01:16 +02:00
// asserts
2019-01-22 10:22:15 +02:00
assertThat ( loggingRule . log , containsString ( '[cloudFoundryDeploy] General parameters: deployTool=notAvailable, deployType=standard, cfApiEndpoint=https://api.cf.eu10.hana.ondemand.com, cfOrg=testOrg, cfSpace=testSpace, cfCredentialsId=myCreds, deployUser=testUser' ) )
2018-07-30 09:28:24 +02:00
}
@Test
void testCfNativeWithAppName ( ) {
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[name: 'manifestAppName']]" )
2018-10-17 11:01:09 +02:00
helper . registerAllowedMethod ( 'writeYaml' , [ Map ] , { Map parameters - >
generatedFile = parameters . file
data = parameters . data
} )
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-07-30 09:28:24 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-07-30 09:28:24 +02:00
deployTool: 'cf_native' ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfAppName: 'testAppName' ,
cfManifest: 'test.yml'
] )
2018-08-29 10:01:16 +02:00
// asserts
2019-01-22 10:34:18 +02:00
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerImage' , 's4sdk/docker-cf-cli' ) )
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerWorkspace' , '/home/piper' ) )
assertThat ( dockerExecuteRule . dockerParams . dockerEnvVars , hasEntry ( 'STATUS_CODE' , "${200}" ) )
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf login -u "test_cf" -p \'********\' -a https://api.cf.eu10.hana.ondemand.com -o "testOrg" -s "testSpace"' ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf push testAppName -f 'test.yml'" ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf logout" ) ) )
2018-07-30 09:28:24 +02:00
}
@Test
void testCfNativeWithAppNameCustomApi ( ) {
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[name: 'manifestAppName']]" )
2018-10-17 11:01:09 +02:00
helper . registerAllowedMethod ( 'writeYaml' , [ Map ] , { Map parameters - >
generatedFile = parameters . file
data = parameters . data
} )
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-07-30 09:28:24 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-07-30 09:28:24 +02:00
deployTool: 'cf_native' ,
cfApiEndpoint: 'https://customApi' ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfAppName: 'testAppName' ,
cfManifest: 'test.yml'
] )
2018-08-29 10:01:16 +02:00
// asserts
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf login -u "test_cf" -p \'********\' -a https://customApi -o "testOrg" -s "testSpace"' ) ) )
2018-07-30 09:28:24 +02:00
}
@Test
void testCfNativeWithAppNameCompatible ( ) {
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[name: 'manifestAppName']]" )
2018-10-17 11:01:09 +02:00
helper . registerAllowedMethod ( 'writeYaml' , [ Map ] , { Map parameters - >
generatedFile = parameters . file
data = parameters . data
} )
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-07-30 09:28:24 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-07-30 09:28:24 +02:00
deployTool: 'cf_native' ,
cloudFoundry: [
org: 'testOrg' ,
space: 'testSpace' ,
credentialsId: 'test_cfCredentialsId' ,
appName: 'testAppName' ,
manifest: 'test.yml'
]
] )
2018-08-29 10:01:16 +02:00
// asserts
2019-01-22 10:34:18 +02:00
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerImage' , 's4sdk/docker-cf-cli' ) )
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerWorkspace' , '/home/piper' ) )
assertThat ( dockerExecuteRule . dockerParams . dockerEnvVars , hasEntry ( 'STATUS_CODE' , "${200}" ) )
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf login -u "test_cf" -p \'********\' -a https://api.cf.eu10.hana.ondemand.com -o "testOrg" -s "testSpace"' ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf push testAppName -f 'test.yml'" ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf logout" ) ) )
2018-07-30 09:28:24 +02:00
}
@Test
void testCfNativeAppNameFromManifest ( ) {
helper . registerAllowedMethod ( 'fileExists' , [ String . class ] , { s - > return true } )
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[name: 'manifestAppName']]" )
2018-10-17 11:01:09 +02:00
helper . registerAllowedMethod ( 'writeYaml' , [ Map ] , { Map parameters - >
generatedFile = parameters . file
data = parameters . data
} )
2018-07-30 09:28:24 +02:00
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-07-30 09:28:24 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-07-30 09:28:24 +02:00
deployTool: 'cf_native' ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfManifest: 'test.yml'
] )
2018-08-29 10:01:16 +02:00
// asserts
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf login -u "test_cf" -p \'********\' -a https://api.cf.eu10.hana.ondemand.com -o "testOrg" -s "testSpace"' ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf push -f 'test.yml'" ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf logout" ) ) )
2018-07-30 09:28:24 +02:00
}
@Test
void testCfNativeWithoutAppName ( ) {
helper . registerAllowedMethod ( 'fileExists' , [ String . class ] , { s - > return true } )
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[]]" )
2018-10-17 11:01:09 +02:00
helper . registerAllowedMethod ( 'writeYaml' , [ Map ] , { Map parameters - >
generatedFile = parameters . file
data = parameters . data
} )
2018-07-30 09:28:24 +02:00
thrown . expect ( hudson . AbortException )
thrown . expectMessage ( '[cloudFoundryDeploy] ERROR: No appName available in manifest test.yml.' )
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-07-30 09:28:24 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-07-30 09:28:24 +02:00
deployTool: 'cf_native' ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfManifest: 'test.yml'
] )
}
2018-11-07 11:39:30 +02:00
@Test
2018-11-27 12:47:44 +02:00
void testCfNativeBlueGreenDefaultDeleteOldInstance ( ) {
2018-11-07 11:39:30 +02:00
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[]]" )
2018-11-07 11:39:30 +02:00
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-11-07 11:39:30 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-11-07 11:39:30 +02:00
deployTool: 'cf_native' ,
deployType: 'blue-green' ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfAppName: 'testAppName' ,
cfManifest: 'test.yml'
] )
2019-01-22 10:34:18 +02:00
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerImage' , 's4sdk/docker-cf-cli' ) )
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerWorkspace' , '/home/piper' ) )
2018-11-07 11:39:30 +02:00
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf login -u "test_cf" -p \'********\' -a https://api.cf.eu10.hana.ondemand.com -o "testOrg" -s "testSpace"' ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf blue-green-deploy testAppName --delete-old-apps -f 'test.yml'" ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf logout" ) ) )
2018-11-27 12:47:44 +02:00
}
@Test
void testCfNativeBlueGreenExplicitDeleteOldInstance ( ) {
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[]]" )
2018-11-27 12:47:44 +02:00
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-11-27 12:47:44 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-11-27 12:47:44 +02:00
deployTool: 'cf_native' ,
deployType: 'blue-green' ,
keepOldInstance: false ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfAppName: 'testAppName' ,
cfManifest: 'test.yml'
] )
2019-01-22 10:34:18 +02:00
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerImage' , 's4sdk/docker-cf-cli' ) )
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerWorkspace' , '/home/piper' ) )
2018-11-27 12:47:44 +02:00
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf login -u "test_cf" -p \'********\' -a https://api.cf.eu10.hana.ondemand.com -o "testOrg" -s "testSpace"' ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf blue-green-deploy testAppName --delete-old-apps -f 'test.yml'" ) ) )
2019-01-30 11:07:00 +02:00
assertThat ( shellRule . shell , not ( hasItem ( containsString ( "cf stop testAppName-old &>" ) ) ) )
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( "cf logout" ) ) )
2018-11-27 12:47:44 +02:00
2018-11-07 11:39:30 +02:00
}
2018-11-27 12:47:44 +02:00
@Test
void testCfNativeBlueGreenKeepOldInstance ( ) {
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[]]" )
2018-11-27 12:47:44 +02:00
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-11-27 12:47:44 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-11-27 12:47:44 +02:00
deployTool: 'cf_native' ,
deployType: 'blue-green' ,
keepOldInstance: true ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfAppName: 'testAppName' ,
cfManifest: 'test.yml'
] )
2019-01-22 10:34:18 +02:00
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerImage' , 's4sdk/docker-cf-cli' ) )
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerWorkspace' , '/home/piper' ) )
2018-11-27 12:47:44 +02:00
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf login -u "test_cf" -p \'********\' -a https://api.cf.eu10.hana.ondemand.com -o "testOrg" -s "testSpace"' ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf blue-green-deploy testAppName -f 'test.yml'" ) ) )
2019-01-30 11:07:00 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( "cf stop testAppName-old &>" ) ) )
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( "cf logout" ) ) )
2018-11-27 12:47:44 +02:00
}
2019-01-30 11:07:00 +02:00
@Test
void testCfNativeBlueGreenKeepOldInstanceShouldThrowErrorOnStopError ( ) {
// the name of the file which will be written contains a dynamically generated UUID
// we force randomUUID() to return 1 that we can use this file in the test
UUID . metaClass . static . randomUUID = { - > 1 }
new File ( tmpDir , '1-cfStopOutput.txt' ) . write ( 'any error message' )
shellRule . setReturnValue ( JenkinsShellCallRule . Type . REGEX , '^cf stop testAppName-old &> .*$' , 1 )
readYamlRule . registerYaml ( 'test.yml' , "applications: [[]]" )
thrown . expect ( hudson . AbortException )
thrown . expectMessage ( "Could not stop application testAppName-old. Error: any error message" )
stepRule . step . cloudFoundryDeploy ( [
script: nullScript ,
juStabUtils: utils ,
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
deployTool: 'cf_native' ,
deployType: 'blue-green' ,
keepOldInstance: true ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfAppName: 'testAppName' ,
cfManifest: 'test.yml'
] )
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerImage' , 's4sdk/docker-cf-cli' ) )
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerWorkspace' , '/home/piper' ) )
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf login -u "test_cf" -p \'********\' -a https://api.cf.eu10.hana.ondemand.com -o "testOrg" -s "testSpace"' ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf blue-green-deploy testAppName -f 'test.yml'" ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( "cf stop testAppName-old &> 1-cfStopOutput.txt" ) ) )
}
2018-11-27 12:47:44 +02:00
@Test
void testCfNativeStandardShouldNotStopInstance ( ) {
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[]]" )
2018-11-27 12:47:44 +02:00
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-11-27 12:47:44 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-11-27 12:47:44 +02:00
deployTool: 'cf_native' ,
deployType: 'standard' ,
keepOldInstance: true ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfAppName: 'testAppName' ,
cfManifest: 'test.yml'
] )
2019-01-30 11:07:00 +02:00
assertThat ( shellRule . shell , not ( hasItem ( containsString ( "cf stop testAppName-old &>" ) ) ) )
2018-11-27 12:47:44 +02:00
}
2018-11-07 11:39:30 +02:00
@Test
void testCfNativeWithoutAppNameBlueGreen ( ) {
helper . registerAllowedMethod ( 'fileExists' , [ String . class ] , { s - > return true } )
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[]]" )
2018-11-07 11:39:30 +02:00
thrown . expect ( hudson . AbortException )
thrown . expectMessage ( '[cloudFoundryDeploy] ERROR: Blue-green plugin requires app name to be passed (see https://github.com/bluemixgaragelondon/cf-blue-green-deploy/issues/27)' )
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-11-07 11:39:30 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-11-07 11:39:30 +02:00
deployTool: 'cf_native' ,
deployType: 'blue-green' ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfManifest: 'test.yml'
] )
}
2018-07-30 09:28:24 +02:00
@Test
void testMta ( ) {
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2018-07-30 09:28:24 +02:00
script: nullScript ,
juStabUtils: utils ,
2019-01-18 09:25:22 +02:00
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
2018-07-30 09:28:24 +02:00
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
deployTool: 'mtaDeployPlugin' ,
mtaPath: 'target/test.mtar'
] )
2018-08-29 10:01:16 +02:00
// asserts
2019-01-22 10:34:18 +02:00
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerImage' , 's4sdk/docker-cf-cli' ) )
assertThat ( dockerExecuteRule . dockerParams , hasEntry ( 'dockerWorkspace' , '/home/piper' ) )
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf login -u test_cf -p \'********\' -a https://api.cf.eu10.hana.ondemand.com -o "testOrg" -s "testSpace"' ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf deploy target/test.mtar -f' ) ) )
assertThat ( shellRule . shell , hasItem ( containsString ( 'cf logout' ) ) )
2018-07-30 09:28:24 +02:00
}
2019-01-18 09:25:22 +02:00
2019-01-22 17:13:59 +02:00
@Test
void testMtaBlueGreen ( ) {
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2019-01-22 17:13:59 +02:00
script: nullScript ,
juStabUtils: utils ,
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
deployTool: 'mtaDeployPlugin' ,
deployType: 'blue-green' ,
mtaPath: 'target/test.mtar'
] )
2019-01-22 10:19:28 +02:00
assertThat ( shellRule . shell , hasItem ( stringContainsInOrder ( [ "cf login -u test_cf" , 'cf bg-deploy' , '-f' , '--no-confirm' ] ) ) )
2019-01-22 17:13:59 +02:00
}
2019-01-18 09:25:22 +02:00
@Test
void testInfluxReporting ( ) {
2019-01-22 10:27:01 +02:00
readYamlRule . registerYaml ( 'test.yml' , "applications: [[name: 'manifestAppName']]" )
2019-01-18 09:25:22 +02:00
helper . registerAllowedMethod ( 'writeYaml' , [ Map ] , { Map parameters - >
generatedFile = parameters . file
data = parameters . data
} )
nullScript . commonPipelineEnvironment . setArtifactVersion ( '1.2.3' )
2019-01-22 10:25:42 +02:00
stepRule . step . cloudFoundryDeploy ( [
2019-01-18 09:25:22 +02:00
script: nullScript ,
juStabUtils: utils ,
jenkinsUtilsStub: new JenkinsUtilsMock ( ) ,
deployTool: 'cf_native' ,
cfOrg: 'testOrg' ,
cfSpace: 'testSpace' ,
cfCredentialsId: 'test_cfCredentialsId' ,
cfAppName: 'testAppName' ,
cfManifest: 'test.yml'
] )
// asserts
assertThat ( writeInfluxMap . customDataMap . deployment_data . artifactUrl , is ( 'n/a' ) )
assertThat ( writeInfluxMap . customDataMap . deployment_data . deployTime , containsString ( new Date ( ) . format ( 'MMM dd, yyyy' ) ) )
assertThat ( writeInfluxMap . customDataMap . deployment_data . jobTrigger , is ( 'USER' ) )
assertThat ( writeInfluxMap . customDataMapTags . deployment_data . artifactVersion , is ( '1.2.3' ) )
assertThat ( writeInfluxMap . customDataMapTags . deployment_data . deployUser , is ( 'test_cf' ) )
assertThat ( writeInfluxMap . customDataMapTags . deployment_data . deployResult , is ( 'SUCCESS' ) )
assertThat ( writeInfluxMap . customDataMapTags . deployment_data . cfApiEndpoint , is ( 'https://api.cf.eu10.hana.ondemand.com' ) )
assertThat ( writeInfluxMap . customDataMapTags . deployment_data . cfOrg , is ( 'testOrg' ) )
assertThat ( writeInfluxMap . customDataMapTags . deployment_data . cfSpace , is ( 'testSpace' ) )
}
2018-07-30 09:28:24 +02:00
}