mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
fd568c9174
* do not swallow exception triggered inside SWA handling --> write it to the log The real change is in src/com/sap/piper/Utils.groovy All the changes in the tests are dealing with mocking the echo method used in the Utils class mentioned above.
217 lines
7.9 KiB
Groovy
217 lines
7.9 KiB
Groovy
import org.junit.After
|
|
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 com.sap.piper.Utils
|
|
|
|
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"}')
|
|
|
|
Utils.metaClass.echo = { def m -> }
|
|
}
|
|
|
|
@After
|
|
public void tearDown() {
|
|
Utils.metaClass = null
|
|
}
|
|
|
|
@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',
|
|
verbose: true
|
|
],
|
|
stages: [
|
|
testStage: [
|
|
spinnakerPipeline: 'spinnakerTestPipeline',
|
|
pipelineParameters: [param1: 'val1']
|
|
]
|
|
]
|
|
]
|
|
|
|
shellRule.setReturnValue('curl -X GET https://spinnakerTest.url/testRef --silent --cert $clientCertificate --key $clientKey', '{"status": "FAILED"}')
|
|
shellRule.setReturnValue('curl -X GET https://spinnakerTest.url/testRef --verbose --cert $clientCertificate --key $clientKey', '{"status": "FAILED"}')
|
|
|
|
exception.expect(hudson.AbortException)
|
|
exception.expectMessage('Spinnaker pipeline failed with FAILED')
|
|
try {
|
|
stepRule.step.spinnakerTriggerPipeline(script: nullScript)
|
|
} finally {
|
|
assertThat(logginRule.log, containsString('Full Spinnaker response = '))
|
|
}
|
|
}
|
|
}
|