1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-16 11:09:33 +02:00
sap-jenkins-library/test/groovy/ContainerExecuteStructureTestsTest.groovy
2020-04-17 11:59:51 +02:00

157 lines
6.1 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 static org.hamcrest.Matchers.*
import static org.junit.Assert.assertThat
class ContainerExecuteStructureTestsTest extends BasePiperTest {
private ExpectedException thrown = ExpectedException.none()
private JenkinsStepRule jsr = new JenkinsStepRule(this)
private JenkinsLoggingRule jlr = new JenkinsLoggingRule(this)
private JenkinsShellCallRule jscr = new JenkinsShellCallRule(this)
private JenkinsDockerExecuteRule jedr = new JenkinsDockerExecuteRule(this)
@Rule
public RuleChain rules = Rules
.getCommonRules(this)
.around(new JenkinsReadYamlRule(this))
.around(thrown)
.around(jedr)
.around(jscr)
.around(jlr)
.around(jsr) // needs to be activated after jedr, otherwise executeDocker is not mocked
@Before
void init() throws Exception {
helper.registerAllowedMethod('stash', [String.class], null)
helper.registerAllowedMethod("findFiles", [Map.class], { map ->
def files
if(map.glob == 'notFound.json')
files = []
else if(map.glob == 'cst/*.yml')
files = [
new File("cst/test1.yml"),
new File("cst/test2.yml")
]
else
files = [new File(map.glob)]
return files.toArray()
})
}
@After
void cleanup() {
nullScript.env = [ON_K8S: null]
}
@Test
void testExecuteContainterStructureTestsDefault() throws Exception {
helper.registerAllowedMethod('readFile', [String.class], {s ->
return '{testResult: true}'
})
jsr.step.containerExecuteStructureTests(
script: nullScript,
juStabUtils: utils,
testConfiguration: 'cst/*.yml',
testImage: 'myRegistry/myImage:myTag'
)
// asserts
assertThat(jscr.shell, hasItem(allOf(
stringContainsInOrder(['#!/busybox/sh', 'container-structure-test', '--config']),
containsString("--config cst${File.separator}test1.yml"),
containsString("--config cst${File.separator}test2.yml"),
containsString('--driver docker'),
containsString('--image myRegistry/myImage:myTag'),
containsString('--test-report cst-report.json'),
)))
//currently no default Docker image
assertThat(jedr.dockerParams.dockerImage, is('ppiper/container-structure-test'))
assertThat(jedr.dockerParams.dockerOptions, is("-u 0 --entrypoint=''"))
assertThat(jedr.dockerParams.containerCommand, is('/busybox/tail -f /dev/null'))
assertThat(jedr.dockerParams.containerShell, is('/busybox/sh'))
assertThat(jlr.log, containsString('{testResult: true}'))
assertThat(jscr.shell, hasItem('docker pull myRegistry/myImage:myTag'))
}
@Test
void testExecuteContainterStructureTestsK8S() throws Exception {
def envDefault = nullScript.env
nullScript.env = [ON_K8S: 'true']
jsr.step.containerExecuteStructureTests(
script: nullScript,
juStabUtils: utils,
containerCommand: '/busybox/tail -f /dev/null',
containerShell: '/bin/sh',
dockerImage: 'myRegistry:55555/pathTo/myImage:myTag',
testConfiguration: 'cst/*.yml',
testImage: 'myRegistry/myImage:myTag'
)
nullScript.env = envDefault
// asserts
assertThat(jscr.shell, hasItem(allOf(
stringContainsInOrder(['#!/bin/sh', 'container-structure-test', '--config']),
containsString("--config cst${File.separator}test1.yml"),
containsString("--config cst${File.separator}test2.yml"),
containsString('--driver tar'),
containsString('--image myRegistry/myImage:myTag'),
containsString('--test-report cst-report.json'),
)))
assertThat(jedr.dockerParams.dockerImage, is('myRegistry:55555/pathTo/myImage:myTag'))
assertThat(jedr.dockerParams.containerCommand, is('/busybox/tail -f /dev/null'))
assertThat(jscr.shell, not(hasItem('docker pull myRegistry/myImage:myTag')))
}
@Test
void testExecuteContainterStructureTestsError() throws Exception {
helper.registerAllowedMethod('readFile', [String.class], {s ->
return '{testResult: true}'
})
helper.registerAllowedMethod('sh', [String.class], {s ->
if (s.startsWith('#!/busybox/sh\ncontainer-structure-test test')) {
throw new GroovyRuntimeException('shell call failed')
}
return null
})
thrown.expectMessage('ERROR: The execution of the container structure tests failed, see the log for details.')
jsr.step.containerExecuteStructureTests(
script: nullScript,
juStabUtils: utils,
containerCommand: '/busybox/tail -f /dev/null',
containerShell: '/busybox/sh',
testConfiguration: 'cst/*.yml',
testImage: 'myRegistry/myImage:myTag'
)
}
@Test
void testExecuteContainterStructureTestsErrorNoFailure() throws Exception {
helper.registerAllowedMethod('readFile', [String.class], {s ->
return '{testResult: true}'
})
helper.registerAllowedMethod('sh', [String.class], {s ->
if (s.startsWith('#!/busybox/sh\ncontainer-structure-test test')) {
throw new GroovyRuntimeException('shell call failed')
}
return null
})
jsr.step.containerExecuteStructureTests(
script: nullScript,
juStabUtils: utils,
containerCommand: '/busybox/tail -f /dev/null',
containerShell: '/busybox/sh',
failOnError: false,
testConfiguration: 'cst/*.yml',
testImage: 'myRegistry/myImage:myTag'
)
assertThat(jlr.log, containsString('Test execution failed'))
}
}