1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/test/groovy/SpinnakerTriggerPipelineTest.groovy
2019-11-06 15:37:14 +01:00

203 lines
7.4 KiB
Groovy

import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.ExpectedException
import org.junit.rules.RuleChain
import util.*
import static org.hamcrest.Matchers.*
import static org.junit.Assert.assertThat
class SpinnakerTriggerPipelineTest extends BasePiperTest {
private ExpectedException exception = new ExpectedException().none()
private JenkinsStepRule stepRule = new JenkinsStepRule(this)
private JenkinsLoggingRule logginRule = new JenkinsLoggingRule(this)
private JenkinsShellCallRule shellRule = new JenkinsShellCallRule(this)
private JenkinsReadJsonRule readJsonRule = new JenkinsReadJsonRule(this)
@Rule
public RuleChain rules = Rules
.getCommonRules(this)
.around(new JenkinsReadYamlRule(this))
.around(exception)
.around(shellRule)
.around(logginRule)
.around(readJsonRule)
.around(stepRule)
class EnvMock {
def STAGE_NAME = 'testStage'
Map getEnvironment() {
return [key1: 'value1', key2: 'value2']
}
}
def credentialFileList = []
def timeout = 0
@Before
void init() {
binding.setVariable('env', new EnvMock())
credentialFileList = []
helper.registerAllowedMethod('file', [Map], { m ->
credentialFileList.add(m)
return m
})
Map credentialFileNames = [
'spinnaker-client-certificate': 'clientCert.file',
'spinnaker-client-key': 'clientKey.file'
]
helper.registerAllowedMethod('withCredentials', [List, Closure], { l, c ->
l.each { fileCredentials ->
binding.setProperty(fileCredentials.variable, credentialFileNames[fileCredentials.credentialsId])
}
try {
c()
} finally {
l.each { fileCredentials ->
binding.setProperty(fileCredentials.variable, null)
}
}
})
helper.registerAllowedMethod('timeout', [Integer.class, Closure.class] , {i, body ->
timeout = i
return body()
})
//not sure where this comes from!
helper.registerAllowedMethod('waitUntil', [Closure.class], {body ->
List responseStatus = ['RUNNING', 'PAUSED', 'NOT_STARTED']
while (!body()) {
//take another round with a different response status
responseStatus.each {status ->
shellRule.setReturnValue('curl -X GET https://spinnakerTest.url/testRef --silent --cert $clientCertificate --key $clientKey', "{\"status\": \"${status}\"}")
shellRule.setReturnValue('curl -X GET https://spinnakerTest.url/testRef --verbose --cert $clientCertificate --key $clientKey', "{\"status\": \"${status}\"}")
}
}
})
shellRule.setReturnValue('curl -H \'Content-Type: application/json\' -X POST -d \'{"parameters":{"param1":"val1"}}\' --silent --cert $clientCertificate --key $clientKey https://spinnakerTest.url/pipelines/spinnakerTestApp/spinnakerTestPipeline', '{"ref": "/testRef"}')
shellRule.setReturnValue('curl -H \'Content-Type: application/json\' -X POST -d \'{"parameters":{"param1":"val1"}}\' --verbose --cert $clientCertificate --key $clientKey https://spinnakerTest.url/pipelines/spinnakerTestApp/spinnakerTestPipeline', '{"ref": "/testRef"}')
shellRule.setReturnValue('curl -X GET https://spinnakerTest.url/testRef --silent --cert $clientCertificate --key $clientKey', '{"status": "SUCCEEDED"}')
shellRule.setReturnValue('curl -X GET https://spinnakerTest.url/testRef --verbose --cert $clientCertificate --key $clientKey', '{"status": "SUCCEEDED"}')
}
@Test
void testDefaults() {
nullScript.commonPipelineEnvironment.configuration = [
general: [
spinnakerGateUrl: 'https://spinnakerTest.url',
spinnakerApplication: 'spinnakerTestApp',
verbose: true
],
stages: [
testStage: [
spinnakerPipeline: 'spinnakerTestPipeline',
pipelineParameters: [param1: 'val1']
]
]
]
stepRule.step.spinnakerTriggerPipeline(
script: nullScript
)
assertThat(timeout, is(60))
assertThat(logginRule.log, containsString('Triggering Spinnaker pipeline with parameters:'))
assertThat(logginRule.log, containsString('Spinnaker pipeline /testRef triggered, waiting for the pipeline to finish'))
assertThat(credentialFileList,
hasItem(
allOf(
hasEntry('credentialsId', 'spinnaker-client-key'),
hasEntry('variable', 'clientKey')
)
)
)
assertThat(credentialFileList,
hasItem(
allOf(
hasEntry('credentialsId', 'spinnaker-client-certificate'),
hasEntry('variable', 'clientCertificate')
)
)
)
}
@Test
void testDisabledPipelineCheck() {
nullScript.commonPipelineEnvironment.configuration = [
general: [
spinnaker: [
gateUrl: 'https://spinnakerTest.url',
application: 'spinnakerTestApp'
]
],
stages: [
testStage: [
pipelineNameOrId: 'spinnakerTestPipeline',
pipelineParameters: [param1: 'val1']
]
]
]
stepRule.step.spinnakerTriggerPipeline(
script: nullScript,
timeout: 0
)
assertThat(logginRule.log, containsString('Exiting without waiting for Spinnaker pipeline result.'))
assertThat(timeout, is(0))
}
@Test
void testTriggerFailure() {
nullScript.commonPipelineEnvironment.configuration = [
general: [
spinnakerGateUrl: 'https://spinnakerTest.url',
spinnakerApplication: 'spinnakerTestApp'
],
stages: [
testStage: [
spinnakerPipeline: 'spinnakerTestPipeline'
]
]
]
shellRule.setReturnValue('curl -H \'Content-Type: application/json\' -X POST --silent --cert $clientCertificate --key $clientKey https://spinnakerTest.url/pipelines/spinnakerTestApp/spinnakerTestPipeline', '{}')
exception.expectMessage('Failed to trigger Spinnaker pipeline')
stepRule.step.spinnakerTriggerPipeline(
script: nullScript,
)
}
@Test
void testPipelineFailure() {
nullScript.commonPipelineEnvironment.configuration = [
general: [
spinnakerGateUrl: 'https://spinnakerTest.url',
spinnakerApplication: 'spinnakerTestApp'
],
stages: [
testStage: [
spinnakerPipeline: 'spinnakerTestPipeline',
pipelineParameters: [param1: 'val1']
]
]
]
shellRule.setReturnValue('curl -X GET https://spinnakerTest.url/testRef --silent --cert $clientCertificate --key $clientKey', '{"status": "FAILED"}')
exception.expectMessage('Spinnaker pipeline failed with FAILED')
stepRule.step.spinnakerTriggerPipeline(
script: nullScript,
)
}
}