mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
203 lines
7.4 KiB
Groovy
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,
|
|
)
|
|
}
|
|
}
|