2019-03-12 16:48:35 +02:00
|
|
|
import com.sap.piper.JenkinsUtils
|
|
|
|
import com.sap.piper.Utils
|
|
|
|
|
|
|
|
import hudson.AbortException
|
|
|
|
|
|
|
|
import org.junit.Assert
|
|
|
|
import org.junit.Before
|
|
|
|
import org.junit.Rule
|
|
|
|
import org.junit.Test
|
|
|
|
import org.junit.rules.ExpectedException
|
|
|
|
import org.junit.rules.RuleChain
|
|
|
|
|
|
|
|
import util.*
|
|
|
|
|
|
|
|
|
|
|
|
class MulticloudDeployTest extends BasePiperTest {
|
|
|
|
|
|
|
|
private ExpectedException thrown = new ExpectedException().none()
|
|
|
|
private JenkinsStepRule stepRule = new JenkinsStepRule(this)
|
|
|
|
private JenkinsMockStepRule neoDeployRule = new JenkinsMockStepRule(this, 'neoDeploy')
|
|
|
|
private JenkinsMockStepRule cloudFoundryDeployRule = new JenkinsMockStepRule(this, 'cloudFoundryDeploy')
|
|
|
|
private JenkinsReadMavenPomRule readMavenPomRule = new JenkinsReadMavenPomRule(this, 'test/resources/deploy')
|
|
|
|
|
|
|
|
private Map neo1 = [:]
|
|
|
|
private Map neo2 = [:]
|
|
|
|
private Map cloudFoundry1 = [:]
|
|
|
|
private Map cloudFoundry2 = [:]
|
|
|
|
|
|
|
|
@Rule
|
|
|
|
public RuleChain ruleChain = Rules
|
|
|
|
.getCommonRules(this)
|
|
|
|
.around(new JenkinsReadYamlRule(this))
|
|
|
|
.around(thrown)
|
|
|
|
.around(stepRule)
|
|
|
|
.around(neoDeployRule)
|
|
|
|
.around(cloudFoundryDeployRule)
|
|
|
|
.around(readMavenPomRule)
|
|
|
|
|
|
|
|
@Before
|
|
|
|
void init() {
|
|
|
|
|
|
|
|
neo1 = [
|
|
|
|
host: 'test.deploy.host1.com',
|
|
|
|
account: 'trialuser1',
|
|
|
|
credentialsId: 'credentialsId1'
|
|
|
|
]
|
|
|
|
|
|
|
|
neo2 = [
|
|
|
|
host: 'test.deploy.host2.com',
|
|
|
|
account: 'trialuser2',
|
|
|
|
credentialsId: 'credentialsId2'
|
|
|
|
]
|
|
|
|
|
|
|
|
cloudFoundry1 = [
|
|
|
|
appName:'testAppName1',
|
|
|
|
manifest: 'test.yml',
|
|
|
|
org: 'testOrg1',
|
|
|
|
space: 'testSpace1',
|
|
|
|
credentialsId: 'cfCredentialsId1'
|
|
|
|
]
|
|
|
|
|
|
|
|
cloudFoundry2 = [
|
|
|
|
appName:'testAppName2',
|
|
|
|
manifest: 'test.yml',
|
|
|
|
org: 'testOrg2',
|
|
|
|
space: 'testSpace2',
|
|
|
|
credentialsId: 'cfCredentialsId2'
|
|
|
|
]
|
|
|
|
|
|
|
|
nullScript.commonPipelineEnvironment.configuration = [
|
|
|
|
general: [
|
|
|
|
neoTargets: [
|
|
|
|
neo1, neo2
|
|
|
|
],
|
|
|
|
cfTargets: [
|
|
|
|
cloudFoundry1, cloudFoundry2
|
|
|
|
]
|
|
|
|
],
|
|
|
|
stages: [
|
|
|
|
acceptance: [
|
|
|
|
org: 'testOrg',
|
|
|
|
space: 'testSpace',
|
|
|
|
deployUser: 'testUser'
|
|
|
|
]
|
|
|
|
],
|
|
|
|
steps: [
|
|
|
|
cloudFoundryDeploy: [
|
|
|
|
deployTool: 'cf_native',
|
|
|
|
deployType: 'blue-green',
|
|
|
|
keepOldInstance: true,
|
|
|
|
cf_native: [
|
2019-10-25 17:49:54 +02:00
|
|
|
dockerImage: 'ppiper/cf-cli',
|
2019-03-12 16:48:35 +02:00
|
|
|
dockerWorkspace: '/home/piper'
|
|
|
|
]
|
|
|
|
]
|
|
|
|
]
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void errorNoTargetsDefined() {
|
|
|
|
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.neoTargets = []
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.cfTargets = []
|
|
|
|
|
|
|
|
thrown.expect(Exception)
|
|
|
|
thrown.expectMessage('Deployment skipped because no targets defined!')
|
|
|
|
|
|
|
|
stepRule.step.multicloudDeploy(
|
2020-06-24 10:56:36 +02:00
|
|
|
script: nullScript
|
2019-03-12 16:48:35 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void errorNoSourceForNeoDeploymentTest() {
|
|
|
|
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.neoTargets = [neo1]
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.cfTargets = []
|
|
|
|
|
|
|
|
thrown.expect(Exception)
|
|
|
|
thrown.expectMessage('ERROR - NO VALUE AVAILABLE FOR source')
|
|
|
|
|
|
|
|
stepRule.step.multicloudDeploy(
|
2020-06-24 10:56:36 +02:00
|
|
|
script: nullScript
|
2019-03-12 16:48:35 +02:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void neoDeploymentTest() {
|
|
|
|
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.neoTargets = [neo1]
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.cfTargets = []
|
|
|
|
|
|
|
|
stepRule.step.multicloudDeploy(
|
|
|
|
script: nullScript,
|
|
|
|
source: 'file.mtar'
|
|
|
|
)
|
|
|
|
|
|
|
|
assert neoDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert neoDeployRule.hasParameter('warAction', 'deploy')
|
|
|
|
assert neoDeployRule.hasParameter('source', 'file.mtar')
|
|
|
|
assert neoDeployRule.hasParameter('neo', neo1)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void neoRollingUpdateTest() {
|
|
|
|
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.neoTargets = []
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.cfTargets = []
|
|
|
|
|
|
|
|
def neoParam = [
|
|
|
|
host: 'test.param.deploy.host.com',
|
|
|
|
account: 'trialparamNeoUser',
|
|
|
|
credentialsId: 'paramNeoCredentialsId'
|
|
|
|
]
|
|
|
|
|
|
|
|
stepRule.step.multicloudDeploy(
|
|
|
|
script: nullScript,
|
|
|
|
neoTargets: [neoParam],
|
|
|
|
source: 'file.mtar',
|
|
|
|
enableZeroDowntimeDeployment: true
|
|
|
|
)
|
|
|
|
|
|
|
|
assert neoDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert neoDeployRule.hasParameter('warAction', 'rolling-update')
|
|
|
|
assert neoDeployRule.hasParameter('source', 'file.mtar')
|
|
|
|
assert neoDeployRule.hasParameter('neo', neoParam)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void cfDeploymentTest() {
|
|
|
|
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.neoTargets = []
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.cfTargets = []
|
|
|
|
|
|
|
|
def cloudFoundry = [
|
|
|
|
appName:'paramTestAppName',
|
|
|
|
manifest: 'test.yml',
|
|
|
|
org: 'paramTestOrg',
|
|
|
|
space: 'paramTestSpace',
|
|
|
|
credentialsId: 'paramCfCredentialsId'
|
|
|
|
]
|
|
|
|
|
|
|
|
stepRule.step.multicloudDeploy([
|
|
|
|
script: nullScript,
|
|
|
|
cfTargets: [cloudFoundry]
|
|
|
|
])
|
|
|
|
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployType', 'standard')
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('cloudFoundry', cloudFoundry)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('mtaPath', nullScript.commonPipelineEnvironment.mtarFilePath)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployTool', 'cf_native')
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void cfBlueGreenDeploymentTest() {
|
|
|
|
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.neoTargets = []
|
|
|
|
nullScript.commonPipelineEnvironment.configuration.general.cfTargets = [cloudFoundry1]
|
|
|
|
|
|
|
|
stepRule.step.multicloudDeploy([
|
|
|
|
script: nullScript,
|
|
|
|
enableZeroDowntimeDeployment: true
|
|
|
|
])
|
|
|
|
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployType', 'blue-green')
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('cloudFoundry', cloudFoundry1)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('mtaPath', nullScript.commonPipelineEnvironment.mtarFilePath)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployTool', 'cf_native')
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void multicloudDeploymentTest() {
|
|
|
|
|
|
|
|
stepRule.step.multicloudDeploy([
|
|
|
|
script: nullScript,
|
|
|
|
enableZeroDowntimeDeployment: true,
|
|
|
|
source: 'file.mtar'
|
|
|
|
])
|
|
|
|
|
|
|
|
assert neoDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert neoDeployRule.hasParameter('warAction', 'rolling-update')
|
|
|
|
assert neoDeployRule.hasParameter('source', 'file.mtar')
|
|
|
|
assert neoDeployRule.hasParameter('neo', neo1)
|
|
|
|
|
|
|
|
assert neoDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert neoDeployRule.hasParameter('warAction', 'rolling-update')
|
2020-06-24 10:56:36 +02:00
|
|
|
assert neoDeployRule.hasParameter('source', 'file.mtar')
|
|
|
|
assert neoDeployRule.hasParameter('neo', neo2)
|
|
|
|
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployType', 'blue-green')
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('cloudFoundry', cloudFoundry1)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('mtaPath', nullScript.commonPipelineEnvironment.mtarFilePath)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployTool', 'cf_native')
|
|
|
|
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployType', 'blue-green')
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('cloudFoundry', cloudFoundry2)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('mtaPath', nullScript.commonPipelineEnvironment.mtarFilePath)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployTool', 'cf_native')
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void multicloudParallelDeploymentTest() {
|
|
|
|
|
|
|
|
stepRule.step.multicloudDeploy([
|
|
|
|
script: nullScript,
|
|
|
|
enableZeroDowntimeDeployment: true,
|
|
|
|
parallelExecution: true,
|
|
|
|
source: 'file.mtar'
|
|
|
|
])
|
|
|
|
|
|
|
|
assert neoDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert neoDeployRule.hasParameter('warAction', 'rolling-update')
|
|
|
|
assert neoDeployRule.hasParameter('source', 'file.mtar')
|
|
|
|
assert neoDeployRule.hasParameter('neo', neo1)
|
|
|
|
|
|
|
|
assert neoDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert neoDeployRule.hasParameter('warAction', 'rolling-update')
|
2019-03-12 16:48:35 +02:00
|
|
|
assert neoDeployRule.hasParameter('source', 'file.mtar')
|
|
|
|
assert neoDeployRule.hasParameter('neo', neo2)
|
|
|
|
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployType', 'blue-green')
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('cloudFoundry', cloudFoundry1)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('mtaPath', nullScript.commonPipelineEnvironment.mtarFilePath)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployTool', 'cf_native')
|
|
|
|
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('script', nullScript)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployType', 'blue-green')
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('cloudFoundry', cloudFoundry2)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('mtaPath', nullScript.commonPipelineEnvironment.mtarFilePath)
|
|
|
|
assert cloudFoundryDeployRule.hasParameter('deployTool', 'cf_native')
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|