1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/test/groovy/MTABuildTest.groovy

286 lines
8.9 KiB
Groovy
Raw Normal View History

2017-07-11 15:12:03 +02:00
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 org.junit.rules.ExpectedException
import org.junit.rules.RuleChain
2017-07-11 15:12:03 +02:00
import org.junit.rules.TemporaryFolder
import com.lesfurets.jenkins.unit.BasePipelineTest
import util.JenkinsLoggingRule
2018-01-16 16:03:00 +02:00
import util.JenkinsShellCallRule
import util.Rules
public class MTABuildTest extends BasePipelineTest {
2017-07-11 15:12:03 +02:00
private ExpectedException thrown = new ExpectedException()
private TemporaryFolder tmp = new TemporaryFolder()
private JenkinsLoggingRule jlr = new JenkinsLoggingRule(this)
2018-01-16 16:03:00 +02:00
private JenkinsShellCallRule jscr = new JenkinsShellCallRule(this)
2017-07-11 15:12:03 +02:00
@Rule
public RuleChain ruleChain = Rules.getCommonRules(this)
.around(thrown)
.around(tmp)
.around(jlr)
2018-01-16 16:03:00 +02:00
.around(jscr)
2017-07-11 15:12:03 +02:00
def currentDir
def otherDir
def mtaBuildShEnv
def mtaBuildScript
def cpe
2017-07-11 15:12:03 +02:00
@Before
void init() {
2017-11-21 15:27:05 +02:00
2017-07-11 15:12:03 +02:00
currentDir = tmp.newFolder().toURI().getPath()[0..-2] //omit final '/'
otherDir = tmp.newFolder().toURI().getPath()[0..-2] //omit final '/'
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()
})
binding.setVariable('PATH', '/usr/bin')
binding.setVariable('JAVA_HOME', '/opt/java')
binding.setVariable('env', [:])
mtaBuildScript = loadScript("mtaBuild.groovy").mtaBuild
cpe = loadScript('commonPipelineEnvironment.groovy').commonPipelineEnvironment
2017-07-11 15:12:03 +02:00
}
@Test
public void straightForwardTest(){
binding.getVariable('env')['MTA_JAR_LOCATION'] = '/opt/mta'
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
def mtarFilePath = mtaBuildScript.call(script: [commonPipelineEnvironment: cpe],
buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[0] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/mta.yaml"$/
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[1].contains("PATH=./node_modules/.bin:/usr/bin")
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[1].contains(' -jar /opt/mta/mta.jar --mtar ')
2017-07-11 15:12:03 +02:00
assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar"
assert jlr.log.contains( "[mtaBuild] MTA JAR \"/opt/mta/mta.jar\" retrieved from environment.")
2017-07-11 15:12:03 +02:00
}
@Test
public void mtarFilePathFromCommonPipelineEnviromentTest(){
binding.getVariable('env')['MTA_JAR_LOCATION'] = '/opt/mta'
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
mtaBuildScript.call(script: [commonPipelineEnvironment: cpe],
buildTarget: 'NEO')
def mtarFilePath = cpe.getMtarFilePath()
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[0] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/mta.yaml"$/
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[1].contains("PATH=./node_modules/.bin:/usr/bin")
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[1].contains(' -jar /opt/mta/mta.jar --mtar ')
2017-07-11 15:12:03 +02:00
assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar"
assert jlr.log.contains("[mtaBuild] MTA JAR \"/opt/mta/mta.jar\" retrieved from environment.")
2017-07-11 15:12:03 +02:00
}
@Test
public void mtaBuildWithSurroundingDirTest(){
binding.getVariable('env')['MTA_JAR_LOCATION'] = '/opt/mta'
def newDirName = 'newDir'
2018-01-31 18:17:01 +02:00
def newDirPath = "${currentDir}/${newDirName}"
def newDir = new File(newDirPath)
newDir.mkdirs()
new File(newDir, 'mta.yaml') << defaultMtaYaml()
2017-07-11 15:12:03 +02:00
2018-01-31 18:17:01 +02:00
helper.registerAllowedMethod('pwd', [], { newDirPath } )
def mtarFilePath = mtaBuildScript.call(script: [commonPipelineEnvironment: cpe], buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[0] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/newDir\/mta.yaml"$/
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[1].contains("PATH=./node_modules/.bin:/usr/bin")
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[1].contains(' -jar /opt/mta/mta.jar --mtar ')
2017-07-11 15:12:03 +02:00
assert mtarFilePath == "${currentDir}/${newDirName}/com.mycompany.northwind.mtar"
2017-07-11 15:12:03 +02:00
assert jlr.log.contains("[mtaBuild] MTA JAR \"/opt/mta/mta.jar\" retrieved from environment.")
2017-07-11 15:12:03 +02:00
}
@Test
void mtaHomeNotSetTest() {
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
def mtarFilePath = mtaBuildScript.call(script: [commonPipelineEnvironment: cpe], buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[0] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/mta.yaml"$/
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[1].contains("PATH=./node_modules/.bin:/usr/bin")
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[1].contains(' -jar mta.jar --mtar ')
2017-07-11 15:12:03 +02:00
assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar"
assert jlr.log.contains( "[mtaBuild] Using MTA JAR from current working directory." )
2017-07-11 15:12:03 +02:00
}
@Test
void mtaHomeAsParameterTest() {
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
def mtarFilePath = mtaBuildScript.call(mtaJarLocation: '/mylocation/mta', buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[0] =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" ".*\/mta.yaml"$/
2017-07-11 15:12:03 +02:00
2018-01-16 16:03:00 +02:00
assert jscr.shell[1].contains("PATH=./node_modules/.bin:/usr/bin")
2017-07-11 15:12:03 +02:00
assert jscr.shell[1].contains(' -jar /mylocation/mta/mta.jar --mtar ')
2017-07-11 15:12:03 +02:00
assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar"
assert jlr.log.contains("[mtaBuild] MTA JAR \"/mylocation/mta/mta.jar\" retrieved from parameters.".toString())
2017-07-11 15:12:03 +02:00
}
@Test
public void noMtaPresentTest(){
thrown.expect(FileNotFoundException)
mtaBuildScript.call(script: [commonPipelineEnvironment: cpe],
buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
}
@Test
public void badMtaTest(){
thrown.expect(ParserException)
thrown.expectMessage('while parsing a block mapping')
new File("${currentDir}/mta.yaml") << badMtaYaml()
mtaBuildScript.call(script: [commonPipelineEnvironment: cpe],
buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
}
@Test
public void noIdInMtaTest(){
thrown.expect(AbortException)
thrown.expectMessage("Property 'ID' not found in mta.yaml file at: '")
new File("${currentDir}/mta.yaml") << noIdMtaYaml()
mtaBuildScript.call(script: [commonPipelineEnvironment: cpe],
buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
}
@Test
public void noBuildTargetTest(){
thrown.expect(Exception)
thrown.expectMessage("ERROR - NO VALUE AVAILABLE FOR buildTarget")
new File("${currentDir}/mta.yaml") << defaultMtaYaml()
mtaBuildScript.call(script: [commonPipelineEnvironment: cpe])
2017-07-11 15:12:03 +02:00
}
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
'''
}
}