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

361 lines
12 KiB
Groovy
Raw Normal View History

import org.junit.Before
import org.junit.Ignore
2017-07-11 15:12:03 +02:00
import org.junit.Rule
import org.junit.Test
import org.junit.rules.ExpectedException
import org.junit.rules.RuleChain
import org.yaml.snakeyaml.parser.ParserException
import hudson.AbortException
import util.BasePiperTest
2018-09-04 11:32:54 +02:00
import util.JenkinsDockerExecuteRule
import util.JenkinsLoggingRule
import util.JenkinsReadYamlRule
2018-01-16 16:03:00 +02:00
import util.JenkinsShellCallRule
2018-02-28 14:12:03 +02:00
import util.JenkinsStepRule
import util.JenkinsWriteFileRule
import util.Rules
import static org.junit.Assert.assertThat
import static org.hamcrest.Matchers.containsString
import static org.hamcrest.Matchers.hasItem
public class MtaBuildTest extends BasePiperTest {
2018-02-21 13:48:14 +02:00
private ExpectedException thrown = new ExpectedException()
private JenkinsLoggingRule loggingRule = new JenkinsLoggingRule(this)
2019-01-22 10:19:28 +02:00
private JenkinsShellCallRule shellRule = new JenkinsShellCallRule(this)
private JenkinsDockerExecuteRule dockerExecuteRule = new JenkinsDockerExecuteRule(this)
2019-01-22 10:25:42 +02:00
private JenkinsStepRule stepRule = new JenkinsStepRule(this)
private JenkinsReadYamlRule readYamlRule = new JenkinsReadYamlRule(this).registerYaml('mta.yaml', defaultMtaYaml() )
private JenkinsWriteFileRule writeFileRule = new JenkinsWriteFileRule(this)
2017-07-11 15:12:03 +02:00
@Rule
2018-02-28 14:12:03 +02:00
public RuleChain ruleChain = Rules
.getCommonRules(this)
.around(readYamlRule)
2018-02-28 14:12:03 +02:00
.around(thrown)
.around(loggingRule)
2019-01-22 10:19:28 +02:00
.around(shellRule)
.around(dockerExecuteRule)
2019-01-22 10:25:42 +02:00
.around(stepRule)
.around(writeFileRule)
2017-07-11 15:12:03 +02:00
@Before
void init() {
2017-07-11 15:12:03 +02:00
helper.registerAllowedMethod('fileExists', [String], { s -> s == 'mta.yaml' })
helper.registerAllowedMethod('httpRequest', [String.class], { s -> new SettingsStub()})
2019-01-22 10:19:28 +02:00
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, '.*\\$MTA_JAR_LOCATION.*', '')
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, '.*\\$JAVA_HOME.*', '')
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, '.*which java.*', 0)
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, '.*java -version.*', '''openjdk version \"1.8.0_121\"
OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-1~bpo8+1-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)''')
2019-01-22 10:19:28 +02:00
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, '.*mta\\.jar -v.*', '1.0.6')
2017-07-11 15:12:03 +02:00
}
@Test
void environmentPathTest() {
2019-01-22 10:25:42 +02:00
stepRule.step.mtaBuild(script: nullScript, buildTarget: 'NEO')
2019-06-13 13:51:57 +02:00
assert shellRule.shell.find { c -> c.contains('PATH=./node_modules/.bin:$PATH')}
}
2017-07-11 15:12:03 +02:00
@Test
void sedTest() {
2017-07-11 15:12:03 +02:00
2019-01-22 10:25:42 +02:00
stepRule.step.mtaBuild(script: nullScript, buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
2019-01-22 10:19:28 +02:00
assert shellRule.shell.find { c -> c =~ /sed -ie "s\/\\\$\{timestamp\}\/`date \+%Y%m%d%H%M%S`\/g" "mta.yaml"$/}
2017-07-11 15:12:03 +02:00
}
@Test
void mtarFilePathFromCommonPipelineEnvironmentTest() {
2017-07-11 15:12:03 +02:00
2019-01-22 10:25:42 +02:00
stepRule.step.mtaBuild(script: nullScript,
buildTarget: 'NEO')
def mtarFilePath = nullScript.commonPipelineEnvironment.getMtarFilePath()
2017-07-11 15:12:03 +02:00
assert mtarFilePath == "com.mycompany.northwind.mtar"
2017-07-11 15:12:03 +02:00
}
@Test
2018-02-05 16:30:21 +02:00
void mtaJarLocationAsParameterTest() {
2017-07-11 15:12:03 +02:00
stepRule.step.mtaBuild(script: nullScript, mtaBuildTool: 'classic', mtaJarLocation: '/mylocation/mta/mta.jar', buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
2019-01-22 10:19:28 +02:00
assert shellRule.shell.find { c -> c.contains('-jar /mylocation/mta/mta.jar --mtar')}
2017-07-11 15:12:03 +02:00
}
@Test
void noMtaPresentTest() {
helper.registerAllowedMethod('fileExists', [String], { false })
thrown.expect(AbortException)
thrown.expectMessage('\'mta.yaml\' not found in project sources and \'applicationName\' not provided as parameter ' +
'- cannot generate \'mta.yaml\' file.')
2017-07-11 15:12:03 +02:00
2019-01-22 10:25:42 +02:00
stepRule.step.mtaBuild(script: nullScript, buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
}
@Test
void badMtaTest() {
2018-02-05 18:15:46 +02:00
2017-07-11 15:12:03 +02:00
thrown.expect(ParserException)
thrown.expectMessage('while parsing a block mapping')
readYamlRule.registerYaml('mta.yaml', badMtaYaml())
2017-07-11 15:12:03 +02:00
2019-01-22 10:25:42 +02:00
stepRule.step.mtaBuild(script: nullScript, buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
}
@Test
void noIdInMtaTest() {
2018-02-05 18:15:46 +02:00
2017-07-11 15:12:03 +02:00
thrown.expect(AbortException)
thrown.expectMessage("Property 'ID' not found in mta.yaml file.")
2017-07-11 15:12:03 +02:00
readYamlRule.registerYaml('mta.yaml', noIdMtaYaml() )
2017-07-11 15:12:03 +02:00
2019-01-22 10:25:42 +02:00
stepRule.step.mtaBuild(script: nullScript, buildTarget: 'NEO')
2017-07-11 15:12:03 +02:00
}
@Test
2018-02-08 14:18:04 +02:00
void mtaJarLocationFromCustomStepConfigurationTest() {
nullScript.commonPipelineEnvironment.configuration = [steps:[mtaBuild:[mtaJarLocation: '/config/mta/mta.jar']]]
2018-02-08 14:18:04 +02:00
stepRule.step.mtaBuild(script: nullScript, mtaBuildTool: 'classic',
2018-02-08 14:18:04 +02:00
buildTarget: 'NEO')
2019-03-25 15:16:18 +02:00
assert shellRule.shell.find(){ c -> c.contains('java -jar /config/mta/mta.jar --mtar')}
2018-02-08 14:18:04 +02:00
}
@Test
void mtaJarLocationFromDefaultStepConfigurationTest() {
stepRule.step.mtaBuild(script: nullScript, mtaBuildTool: 'classic',
buildTarget: 'NEO')
2019-03-25 15:16:18 +02:00
assert shellRule.shell.find(){ c -> c.contains('java -jar /opt/sap/mta/lib/mta.jar --mtar')}
}
2018-02-08 14:18:04 +02:00
@Test
void buildTargetFromParametersTest() {
stepRule.step.mtaBuild(script: nullScript, mtaBuildTool: 'classic', buildTarget: 'NEO')
assert shellRule.shell.find { c -> c.contains('java -jar /opt/sap/mta/lib/mta.jar --mtar com.mycompany.northwind.mtar --build-target=NEO build')}
2018-02-08 14:18:04 +02:00
}
@Test
void buildTargetFromCustomStepConfigurationTest() {
nullScript.commonPipelineEnvironment.configuration = [steps:[mtaBuild:[buildTarget: 'NEO']]]
2018-02-08 14:18:04 +02:00
stepRule.step.mtaBuild(script: nullScript, mtaBuildTool: 'classic')
2018-02-08 14:18:04 +02:00
assert shellRule.shell.find(){ c -> c.contains('java -jar /opt/sap/mta/lib/mta.jar --mtar com.mycompany.northwind.mtar --build-target=NEO build')}
2018-02-08 14:18:04 +02:00
}
@Test
void dockerFromCustomStepConfigurationTest() {
def expectedImage = 'image:test'
def expectedEnvVars = ['env1': 'value1', 'env2': 'value2']
def expectedOptions = '--opt1=val1 --opt2=val2 --opt3'
def expectedWorkspace = '-w /path/to/workspace'
nullScript.commonPipelineEnvironment.configuration = [steps:[mtaBuild:[
dockerImage: expectedImage,
dockerOptions: expectedOptions,
dockerEnvVars: expectedEnvVars,
dockerWorkspace: expectedWorkspace
]]]
stepRule.step.mtaBuild(script: nullScript)
assert expectedImage == dockerExecuteRule.dockerParams.dockerImage
assert expectedOptions == dockerExecuteRule.dockerParams.dockerOptions
assert expectedEnvVars.equals(dockerExecuteRule.dockerParams.dockerEnvVars)
assert expectedWorkspace == dockerExecuteRule.dockerParams.dockerWorkspace
}
2018-09-04 11:32:54 +02:00
@Test
void canConfigureDockerImage() {
2019-01-22 10:25:42 +02:00
stepRule.step.mtaBuild(script: nullScript, dockerImage: 'mta-docker-image:latest')
2018-09-04 11:32:54 +02:00
assert 'mta-docker-image:latest' == dockerExecuteRule.dockerParams.dockerImage
2018-09-04 11:32:54 +02:00
}
@Test
void canConfigureDockerOptions() {
2019-01-22 10:25:42 +02:00
stepRule.step.mtaBuild(script: nullScript, dockerOptions: 'something')
2018-09-04 11:32:54 +02:00
assert 'something' == dockerExecuteRule.dockerParams.dockerOptions
2018-09-04 11:32:54 +02:00
}
2018-02-08 14:18:04 +02:00
@Test
void canConfigureMavenUserSettings() {
stepRule.step.mtaBuild(script: nullScript, projectSettingsFile: 'settings.xml')
assert shellRule.shell.find(){ c -> c.contains('cp settings.xml $HOME/.m2/settings.xml')}
}
@Test
void canConfigureMavenUserSettingsFromRemoteSource() {
stepRule.step.mtaBuild(script: nullScript, projectSettingsFile: 'https://some.host/my-settings.xml')
assert shellRule.shell.find(){ c -> c.contains('cp project-settings.xml $HOME/.m2/settings.xml')}
}
@Test
void canConfigureMavenGlobalSettings() {
stepRule.step.mtaBuild(script: nullScript, globalSettingsFile: 'settings.xml')
assert shellRule.shell.find(){ c -> c.contains('cp settings.xml $M2_HOME/conf/settings.xml')}
}
@Test
void canConfigureNpmRegistry() {
stepRule.step.mtaBuild(script: nullScript, defaultNpmRegistry: 'myNpmRegistry.com')
assert shellRule.shell.find(){ c -> c.contains('npm config set registry myNpmRegistry.com')}
}
@Test
void canConfigureMavenGlobalSettingsFromRemoteSource() {
stepRule.step.mtaBuild(script: nullScript, globalSettingsFile: 'https://some.host/my-settings.xml')
assert shellRule.shell.find(){ c -> c.contains('cp global-settings.xml $M2_HOME/conf/settings.xml')}
}
2018-02-08 14:18:04 +02:00
@Test
void buildTargetFromDefaultStepConfigurationTest() {
nullScript.commonPipelineEnvironment.defaultConfiguration = [steps:[mtaBuild:[buildTarget: 'NEO']]]
2018-02-08 14:18:04 +02:00
stepRule.step.mtaBuild(script: nullScript, mtaBuildTool: 'classic',)
2018-02-08 14:18:04 +02:00
assert shellRule.shell.find { c -> c.contains('java -jar /opt/sap/mta/lib/mta.jar --mtar com.mycompany.northwind.mtar --build-target=NEO build')}
}
2018-04-17 17:35:10 +02:00
@Test
void extensionFromParametersTest() {
stepRule.step.mtaBuild(script: nullScript, buildTarget: 'NEO', mtaBuildTool: 'classic', extension: 'param_extension')
2018-04-17 17:35:10 +02:00
assert shellRule.shell.find { c -> c.contains('java -jar /opt/sap/mta/lib/mta.jar --mtar com.mycompany.northwind.mtar --build-target=NEO --extension=param_extension build')}
2018-04-17 17:35:10 +02:00
}
@Test
void extensionFromCustomStepConfigurationTest() {
nullScript.commonPipelineEnvironment.configuration = [steps:[mtaBuild:[buildTarget: 'NEO', extension: 'config_extension']]]
2018-04-17 17:35:10 +02:00
stepRule.step.mtaBuild(script: nullScript, mtaBuildTool: 'classic',)
2018-04-17 17:35:10 +02:00
assert shellRule.shell.find(){ c -> c.contains('java -jar /opt/sap/mta/lib/mta.jar --mtar com.mycompany.northwind.mtar --build-target=NEO --extension=config_extension build')}
2018-04-17 17:35:10 +02:00
}
@Test
void canConfigureMTARName() {
stepRule.step.mtaBuild(script: nullScript, mtarName: 'custom.name.mtar')
assert shellRule.shell.find(){ c -> c.contains('--mtar custom.name.mtar')}
}
@Test
void testCloudMbt() {
nullScript.commonPipelineEnvironment.configuration = [steps:[mtaBuild:[mtaBuildTool: 'cloudMbt']]]
stepRule.step.mtaBuild(script: nullScript)
assertThat(shellRule.shell, hasItem(containsString('mbt build')))
assertThat(shellRule.shell, hasItem(containsString('--platform cf')))
assertThat(shellRule.shell, hasItem(containsString('--target ./')))
assertThat(shellRule.shell, hasItem(containsString('--mtar com.mycompany.northwind.mtar')))
}
2018-04-17 17:35:10 +02:00
2018-02-13 11:11:08 +02:00
private static defaultMtaYaml() {
2017-07-11 15:12:03 +02:00
return '''
_schema-version: "2.0.0"
ID: "com.mycompany.northwind"
version: 1.0.0
2018-02-05 17:45:24 +02:00
2017-07-11 15:12:03 +02:00
parameters:
hcp-deployer-version: "1.0.0"
2018-02-05 17:45:24 +02:00
2017-07-11 15:12:03 +02:00
modules:
- name: "fiorinorthwind"
type: html5
path: .
parameters:
version: 1.0.0-${timestamp}
build-parameters:
builder: grunt
build-result: dist
'''
}
2018-02-05 18:16:53 +02:00
private badMtaYaml() {
2017-07-11 15:12:03 +02:00
return '''
_schema-version: "2.0.0
ID: "com.mycompany.northwind"
version: 1.0.0
2018-02-05 17:45:24 +02:00
2017-07-11 15:12:03 +02:00
parameters:
hcp-deployer-version: "1.0.0"
2018-02-05 17:45:24 +02:00
2017-07-11 15:12:03 +02:00
modules:
- name: "fiorinorthwind"
type: html5
path: .
parameters:
version: 1.0.0-${timestamp}
build-parameters:
builder: grunt
build-result: dist
'''
}
2018-02-05 18:16:53 +02:00
private noIdMtaYaml() {
2017-07-11 15:12:03 +02:00
return '''
_schema-version: "2.0.0"
version: 1.0.0
2018-02-05 17:45:24 +02:00
2017-07-11 15:12:03 +02:00
parameters:
hcp-deployer-version: "1.0.0"
2018-02-05 17:45:24 +02:00
2017-07-11 15:12:03 +02:00
modules:
- name: "fiorinorthwind"
type: html5
path: .
parameters:
version: 1.0.0-${timestamp}
build-parameters:
builder: grunt
build-result: dist
'''
}
class SettingsStub {
String getContent() {
return "<xml>sometext</xml>"
}
}
2017-07-11 15:12:03 +02:00
}