mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
7f36ca0f74
instead of having two checks, one for the first part of the command and one for asserting the trailing file name at the end of the command.
364 lines
11 KiB
Groovy
364 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] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/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] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/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] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/newDir\/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] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/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] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/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
|
|
'''
|
|
}
|
|
}
|