mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
369 lines
11 KiB
Groovy
369 lines
11 KiB
Groovy
import hudson.AbortException
|
|
import org.jenkinsci.plugins.pipeline.utility.steps.shaded.org.yaml.snakeyaml.Yaml
|
|
import org.jenkinsci.plugins.pipeline.utility.steps.shaded.org.yaml.snakeyaml.parser.ParserException
|
|
import org.junit.Before
|
|
import org.junit.Rule
|
|
import org.junit.Test
|
|
|
|
import com.lesfurets.jenkins.unit.BasePipelineTest
|
|
import org.junit.rules.ExpectedException
|
|
import org.junit.rules.TemporaryFolder
|
|
|
|
import static com.lesfurets.jenkins.unit.global.lib.LibraryConfiguration.library
|
|
|
|
import static ProjectSource.projectSource
|
|
|
|
public class MTABuildTest extends BasePipelineTest {
|
|
|
|
@Rule
|
|
public ExpectedException thrown = new ExpectedException()
|
|
|
|
@Rule
|
|
public TemporaryFolder tmp = new TemporaryFolder()
|
|
|
|
def shellCalls = []
|
|
def echoes = []
|
|
def currentDir
|
|
def otherDir
|
|
def pipeline
|
|
def mtaBuildShEnv
|
|
|
|
|
|
@Before
|
|
public void setup(){
|
|
super.setUp()
|
|
|
|
currentDir = tmp.newFolder().toURI().getPath()[0..-2] //omit final '/'
|
|
otherDir = tmp.newFolder().toURI().getPath()[0..-2] //omit final '/'
|
|
pipeline = "${tmp.newFolder("pipeline").toURI().getPath()}pipeline"
|
|
|
|
def piperLib = library()
|
|
.name('piper-library-os')
|
|
.retriever(projectSource())
|
|
.targetPath('clonePath/is/not/necessary')
|
|
.defaultVersion('<irrelevant>')
|
|
.allowOverride(true)
|
|
.implicit(false)
|
|
.build()
|
|
helper.registerSharedLibrary(piperLib)
|
|
|
|
helper.registerAllowedMethod('sh', [String], {s -> shellCalls.add(s)} )
|
|
helper.registerAllowedMethod('echo', [String], {s -> echoes.add(s)} )
|
|
helper.registerAllowedMethod('readYaml', [Map], {
|
|
m ->
|
|
return new Yaml().load((m.file as File).text)
|
|
})
|
|
helper.registerAllowedMethod("dir", [String, Closure], {
|
|
s, c ->
|
|
currentDir = "${currentDir}/${s}"
|
|
c()
|
|
})
|
|
helper.registerAllowedMethod('pwd', [], { currentDir } )
|
|
helper.registerAllowedMethod("withEnv", [List.class, Closure.class],
|
|
{ l, c ->
|
|
mtaBuildShEnv = l
|
|
c()
|
|
})
|
|
helper.registerAllowedMethod('error', [String], { s -> throw new hudson.AbortException(s) })
|
|
|
|
binding.setVariable('PATH', '/usr/bin')
|
|
binding.setVariable('JAVA_HOME', '/opt/java')
|
|
binding.setVariable('env', [:])
|
|
|
|
}
|
|
|
|
|
|
@Test
|
|
public void straightForwardTest(){
|
|
|
|
binding.getVariable('env')['MTA_JAR_LOCATION'] = '/opt/mta'
|
|
|
|
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
|
|
|
|
defaultPipeline()
|
|
def script = loadScript(pipeline)
|
|
def mtarFilePath = script.execute()
|
|
|
|
assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ')
|
|
assert shellCalls[0].endsWith('/mta.yaml')
|
|
|
|
assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin")
|
|
|
|
assert shellCalls[1].contains(' -jar /opt/mta/mta.jar --mtar ')
|
|
|
|
assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar"
|
|
|
|
assert echoes[1] == "[mtaBuild] MTA JAR \"/opt/mta/mta.jar\" retrieved from environment."
|
|
}
|
|
|
|
|
|
@Test
|
|
public void mtarFilePathFromCommonPipelineEnviromentTest(){
|
|
|
|
binding.getVariable('env')['MTA_JAR_LOCATION'] = '/opt/mta'
|
|
|
|
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
|
|
|
|
returnMtarFilePathFromCommonPipelineEnvironmentPipeline()
|
|
def script = loadScript(pipeline)
|
|
def mtarFilePath = script.execute()
|
|
|
|
assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ')
|
|
assert shellCalls[0].endsWith('/mta.yaml')
|
|
|
|
assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin")
|
|
|
|
assert shellCalls[1].contains(' -jar /opt/mta/mta.jar --mtar ')
|
|
|
|
assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar"
|
|
|
|
assert echoes[1] == "[mtaBuild] MTA JAR \"/opt/mta/mta.jar\" retrieved from environment."
|
|
}
|
|
|
|
|
|
@Test
|
|
public void mtaBuildWithSurroundingDirTest(){
|
|
|
|
binding.getVariable('env')['MTA_JAR_LOCATION'] = '/opt/mta'
|
|
|
|
def newDirName = 'newDir'
|
|
new File("${currentDir}/${newDirName}").mkdirs()
|
|
new File("${currentDir}/${newDirName}/mta.yaml") << defaultMtaYaml()
|
|
|
|
withSurroundingDirPipeline()
|
|
def script = loadScript(pipeline)
|
|
def mtarFilePath = script.execute(newDirName)
|
|
|
|
assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ')
|
|
assert shellCalls[0].endsWith('/mta.yaml')
|
|
|
|
assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin")
|
|
|
|
assert shellCalls[1].contains(' -jar /opt/mta/mta.jar --mtar ')
|
|
|
|
assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar"
|
|
|
|
assert echoes[1] == "[mtaBuild] MTA JAR \"/opt/mta/mta.jar\" retrieved from environment."
|
|
}
|
|
|
|
@Test
|
|
void mtaHomeNotSetTest() {
|
|
|
|
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
|
|
|
|
defaultPipeline()
|
|
def script = loadScript(pipeline)
|
|
def mtarFilePath = script.execute()
|
|
|
|
assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ')
|
|
assert shellCalls[0].endsWith('/mta.yaml')
|
|
|
|
assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin")
|
|
|
|
assert shellCalls[1].contains(' -jar mta.jar --mtar ')
|
|
|
|
assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar"
|
|
|
|
assert echoes[1] == "[mtaBuild] Using MTA JAR from current working directory."
|
|
}
|
|
|
|
|
|
@Test
|
|
void mtaHomeAsParameterTest() {
|
|
|
|
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
|
|
|
|
mtaJarLocationAsParameterPipeline()
|
|
def script = loadScript(pipeline)
|
|
def mtarFilePath = script.execute()
|
|
|
|
assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ')
|
|
assert shellCalls[0].endsWith('/mta.yaml')
|
|
|
|
assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin")
|
|
|
|
assert shellCalls[1].contains(' -jar /etc/mta/mta.jar --mtar ')
|
|
|
|
assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar"
|
|
|
|
assert echoes[1] == "[mtaBuild] MTA JAR \"/etc/mta/mta.jar\" retrieved from parameters."
|
|
}
|
|
|
|
|
|
@Test
|
|
public void noMtaPresentTest(){
|
|
thrown.expect(FileNotFoundException)
|
|
|
|
defaultPipeline()
|
|
def script = loadScript(pipeline)
|
|
script.execute()
|
|
}
|
|
|
|
|
|
@Test
|
|
public void badMtaTest(){
|
|
thrown.expect(ParserException)
|
|
thrown.expectMessage('while parsing a block mapping')
|
|
|
|
new File("${currentDir}/mta.yaml") << badMtaYaml()
|
|
|
|
defaultPipeline()
|
|
def script = loadScript(pipeline)
|
|
script.execute()
|
|
}
|
|
|
|
|
|
@Test
|
|
public void noIdInMtaTest(){
|
|
thrown.expect(AbortException)
|
|
thrown.expectMessage("Property 'ID' not found in mta.yaml file at: '")
|
|
|
|
new File("${currentDir}/mta.yaml") << noIdMtaYaml()
|
|
|
|
defaultPipeline()
|
|
def script = loadScript(pipeline)
|
|
script.execute()
|
|
}
|
|
|
|
|
|
@Test
|
|
public void noBuildTargetTest(){
|
|
thrown.expect(Exception)
|
|
thrown.expectMessage("ERROR - NO VALUE AVAILABLE FOR buildTarget")
|
|
|
|
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
|
|
|
|
noBuildTargetPipeline()
|
|
def script = loadScript(pipeline)
|
|
script.execute()
|
|
}
|
|
|
|
|
|
private defaultPipeline(){
|
|
new File(pipeline) << '''
|
|
@Library('piper-library-os')
|
|
|
|
execute(){
|
|
mtaBuild buildTarget: 'NEO'
|
|
}
|
|
|
|
return this
|
|
'''
|
|
}
|
|
|
|
private returnMtarFilePathFromCommonPipelineEnvironmentPipeline(){
|
|
new File(pipeline) << '''
|
|
@Library('piper-library-os')
|
|
|
|
execute(){
|
|
mtaBuild buildTarget: 'NEO'
|
|
return commonPipelineEnvironment.getMtarFilePath()
|
|
}
|
|
|
|
return this
|
|
'''
|
|
}
|
|
|
|
private mtaJarLocationAsParameterPipeline(){
|
|
new File(pipeline) << '''
|
|
@Library('piper-library-os')
|
|
|
|
execute(){
|
|
mtaBuild mtaJarLocation: '/etc/mta', buildTarget: 'NEO'
|
|
}
|
|
|
|
return this
|
|
'''
|
|
}
|
|
|
|
private withSurroundingDirPipeline(){
|
|
new File(pipeline) << '''
|
|
@Library('piper-library-os')
|
|
|
|
execute(dirPath){
|
|
dir("${dirPath}"){
|
|
mtaBuild buildTarget: 'NEO'
|
|
}
|
|
}
|
|
|
|
return this
|
|
'''
|
|
}
|
|
|
|
|
|
private noBuildTargetPipeline(){
|
|
new File(pipeline) << '''
|
|
@Library('piper-library-os')
|
|
|
|
execute(){
|
|
mtaBuild()
|
|
}
|
|
|
|
return this
|
|
'''
|
|
}
|
|
|
|
|
|
private defaultMtaYaml(){
|
|
return '''
|
|
_schema-version: "2.0.0"
|
|
ID: "com.mycompany.northwind"
|
|
version: 1.0.0
|
|
|
|
parameters:
|
|
hcp-deployer-version: "1.0.0"
|
|
|
|
modules:
|
|
- name: "fiorinorthwind"
|
|
type: html5
|
|
path: .
|
|
parameters:
|
|
version: 1.0.0-${timestamp}
|
|
build-parameters:
|
|
builder: grunt
|
|
build-result: dist
|
|
'''
|
|
}
|
|
|
|
private badMtaYaml(){
|
|
return '''
|
|
_schema-version: "2.0.0
|
|
ID: "com.mycompany.northwind"
|
|
version: 1.0.0
|
|
|
|
parameters:
|
|
hcp-deployer-version: "1.0.0"
|
|
|
|
modules:
|
|
- name: "fiorinorthwind"
|
|
type: html5
|
|
path: .
|
|
parameters:
|
|
version: 1.0.0-${timestamp}
|
|
build-parameters:
|
|
builder: grunt
|
|
build-result: dist
|
|
'''
|
|
}
|
|
|
|
private noIdMtaYaml(){
|
|
return '''
|
|
_schema-version: "2.0.0"
|
|
version: 1.0.0
|
|
|
|
parameters:
|
|
hcp-deployer-version: "1.0.0"
|
|
|
|
modules:
|
|
- name: "fiorinorthwind"
|
|
type: html5
|
|
path: .
|
|
parameters:
|
|
version: 1.0.0-${timestamp}
|
|
build-parameters:
|
|
builder: grunt
|
|
build-result: dist
|
|
'''
|
|
}
|
|
}
|