mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
1836bb728b
* introduce variable for piper bin * log the version of the piper bin * don't fail with generic message from script execution (sh)
165 lines
7.4 KiB
Groovy
165 lines
7.4 KiB
Groovy
package com.sap.piper
|
|
|
|
import hudson.AbortException
|
|
import org.junit.Before
|
|
import org.junit.Rule
|
|
import org.junit.Test
|
|
import org.junit.rules.ExpectedException
|
|
import org.junit.rules.RuleChain
|
|
import util.BasePiperTest
|
|
import util.JenkinsLoggingRule
|
|
import util.JenkinsShellCallRule
|
|
import util.Rules
|
|
|
|
import static org.hamcrest.Matchers.containsString
|
|
import static org.hamcrest.Matchers.is
|
|
import static org.junit.Assert.assertThat
|
|
|
|
class PiperGoUtilsTest extends BasePiperTest {
|
|
|
|
public ExpectedException exception = ExpectedException.none()
|
|
public JenkinsShellCallRule shellCallRule = new JenkinsShellCallRule(this)
|
|
public JenkinsLoggingRule loggingRule = new JenkinsLoggingRule(this)
|
|
|
|
@Rule
|
|
public RuleChain ruleChain = Rules.getCommonRules(this)
|
|
.around(shellCallRule)
|
|
.around(exception)
|
|
.around(loggingRule)
|
|
|
|
@Before
|
|
void init() {
|
|
helper.registerAllowedMethod("retry", [Integer, Closure], null)
|
|
}
|
|
|
|
@Test
|
|
void testUnstashPiperBinAvailable() {
|
|
|
|
def piperBinStash = 'piper-bin'
|
|
|
|
// this mocks utils.unstash
|
|
helper.registerAllowedMethod("unstash", [String.class], { stashFileName ->
|
|
if (stashFileName != piperBinStash) {
|
|
return []
|
|
}
|
|
return [piperBinStash]
|
|
})
|
|
|
|
def piperGoUtils = new PiperGoUtils(nullScript, utils)
|
|
|
|
piperGoUtils.unstashPiperBin()
|
|
}
|
|
|
|
|
|
@Test
|
|
void testUnstashPiperBinMaster() {
|
|
|
|
def piperGoUtils = new PiperGoUtils(nullScript, utils)
|
|
piperGoUtils.metaClass.getLibrariesInfo = {-> return [[name: 'piper-lib-os', version: 'master']]}
|
|
|
|
// this mocks utils.unstash - mimic stash not existing
|
|
helper.registerAllowedMethod("unstash", [String.class], { stashFileName ->
|
|
return []
|
|
})
|
|
|
|
shellCallRule.setReturnValue('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/latest/download/piper_master\'', '200')
|
|
|
|
piperGoUtils.unstashPiperBin()
|
|
assertThat(shellCallRule.shell.size(), is(3))
|
|
assertThat(shellCallRule.shell[0].toString(), is('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/latest/download/piper_master\''))
|
|
assertThat(shellCallRule.shell[1].toString(), is('chmod +x piper'))
|
|
assertThat(shellCallRule.shell[2].toString(), is('./piper version'))
|
|
}
|
|
|
|
@Test
|
|
void testUnstashPiperBinNonMaster() {
|
|
|
|
def piperGoUtils = new PiperGoUtils(nullScript, utils)
|
|
piperGoUtils.metaClass.getLibrariesInfo = {-> return [[name: 'piper-lib-os', version: 'testTag']]}
|
|
|
|
// this mocks utils.unstash - mimic stash not existing
|
|
helper.registerAllowedMethod("unstash", [String.class], { stashFileName ->
|
|
return []
|
|
})
|
|
|
|
shellCallRule.setReturnValue('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/download/testTag/piper\'', '200')
|
|
|
|
piperGoUtils.unstashPiperBin()
|
|
assertThat(shellCallRule.shell.size(), is(3))
|
|
assertThat(shellCallRule.shell[0].toString(), is('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/download/testTag/piper\''))
|
|
assertThat(shellCallRule.shell[1].toString(), is('chmod +x piper'))
|
|
assertThat(shellCallRule.shell[2].toString(), is('./piper version'))
|
|
}
|
|
|
|
@Test
|
|
void testUnstashPiperBinFallback() {
|
|
|
|
def piperGoUtils = new PiperGoUtils(nullScript, utils)
|
|
piperGoUtils.metaClass.getLibrariesInfo = {-> return [[name: 'piper-lib-os', version: 'notAvailable']]}
|
|
|
|
shellCallRule.setReturnValue('./piper version', "1.2.3")
|
|
shellCallRule.setReturnValue('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/download/notAvailable/piper\'', '404')
|
|
shellCallRule.setReturnValue('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/latest/download/piper_master\'', '200')
|
|
|
|
// this mocks utils.unstash - mimic stash not existing
|
|
helper.registerAllowedMethod("unstash", [String.class], { stashFileName ->
|
|
return []
|
|
})
|
|
|
|
piperGoUtils.unstashPiperBin()
|
|
assertThat(shellCallRule.shell.size(), is(4))
|
|
assertThat(shellCallRule.shell[0].toString(), is('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/download/notAvailable/piper\''))
|
|
assertThat(shellCallRule.shell[1].toString(), is('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/latest/download/piper_master\''))
|
|
assertThat(shellCallRule.shell[2].toString(), is('chmod +x piper'))
|
|
assertThat(shellCallRule.shell[3].toString(), is ('./piper version'))
|
|
}
|
|
|
|
@Test
|
|
void testDownloadFailedWithErrorCode() {
|
|
def piperGoUtils = new PiperGoUtils(nullScript, utils)
|
|
piperGoUtils.metaClass.getLibrariesInfo = {-> return [[name: 'piper-lib-os', version: 'notAvailable']]}
|
|
|
|
shellCallRule.setReturnValue('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/download/notAvailable/piper\'', '404')
|
|
shellCallRule.setReturnValue('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/latest/download/piper_master\'', '500')
|
|
|
|
helper.registerAllowedMethod("unstash", [String.class], { stashFileName ->
|
|
return []
|
|
})
|
|
|
|
exception.expectMessage(containsString('Download of Piper go binary failed'))
|
|
piperGoUtils.unstashPiperBin()
|
|
}
|
|
|
|
@Test
|
|
void testDownloadFailedWithHTTPCode() {
|
|
def piperGoUtils = new PiperGoUtils(nullScript, utils)
|
|
piperGoUtils.metaClass.getLibrariesInfo = {-> return [[name: 'piper-lib-os', version: 'notAvailable']]}
|
|
|
|
shellCallRule.setReturnValue('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/download/notAvailable/piper\'', '404')
|
|
shellCallRule.setReturnValue('curl --insecure --silent --location --write-out \'%{http_code}\' --output piper \'https://github.com/SAP/jenkins-library/releases/latest/download/piper_master\'', '500')
|
|
|
|
helper.registerAllowedMethod("unstash", [String.class], { stashFileName ->
|
|
return []
|
|
})
|
|
|
|
exception.expectMessage(containsString('Download of Piper go binary failed'))
|
|
piperGoUtils.unstashPiperBin()
|
|
}
|
|
|
|
@Test
|
|
void testDownloadFailedWithError() {
|
|
def piperGoUtils = new PiperGoUtils(nullScript, utils)
|
|
piperGoUtils.metaClass.getLibrariesInfo = {-> return [[name: 'piper-lib-os', version: 'notAvailable']]}
|
|
|
|
helper.registerAllowedMethod('sh', [Map.class], {m -> throw new AbortException('download failed')})
|
|
|
|
helper.registerAllowedMethod("unstash", [String.class], { stashFileName ->
|
|
return []
|
|
})
|
|
|
|
exception.expectMessage(containsString('Download of Piper go binary failed'))
|
|
piperGoUtils.unstashPiperBin()
|
|
}
|
|
}
|
|
|