mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
ef0b1bd9dd
Starting point for that refactoring: it turned out that the tests was not independent. The DefaultValueCache which is a singleton keeps the status over various tests. Success of test execution depends on the order test execution. We have now * a dedicated rule for resetting the default value cache * JenkinsConfiguration rule (which already provided facilities for dealing with the configuration) has been replaced by a readYaml rule. From the PipelineUnit test framework we get already a handler for libraryResource, which is also part of the setup of the default values. * An auxiliar class which combines the * JenkinsSetupRule (registers the lib) * JenkinsReadYamlRule (provides facilities for Yaml parsing) * JenkinsResetDefaultValueCacheRule (cleans up the DefaultValueCache) into a rule chain. By using this rule chain we ensure that our setup OK (piper lib registered, and default config can be setup in a clean way).
471 lines
19 KiB
Groovy
471 lines
19 KiB
Groovy
import hudson.AbortException
|
|
|
|
import org.junit.rules.TemporaryFolder
|
|
|
|
import com.lesfurets.jenkins.unit.BasePipelineTest
|
|
|
|
import org.junit.Before
|
|
import org.junit.Rule
|
|
import org.junit.Test
|
|
import org.junit.rules.ExpectedException
|
|
import org.junit.rules.RuleChain
|
|
|
|
|
|
import util.JenkinsLoggingRule
|
|
import util.JenkinsShellCallRule
|
|
import util.Rules
|
|
|
|
class NeoDeploymentTest extends BasePipelineTest {
|
|
|
|
private ExpectedException thrown = new ExpectedException().none()
|
|
private TemporaryFolder tmp = new TemporaryFolder()
|
|
private JenkinsLoggingRule jlr = new JenkinsLoggingRule(this)
|
|
private JenkinsShellCallRule jscr = new JenkinsShellCallRule(this)
|
|
|
|
@Rule
|
|
public RuleChain ruleChain = Rules.getCommonRules(this)
|
|
.around(thrown)
|
|
.around(tmp)
|
|
.around(jlr)
|
|
.around(jscr)
|
|
|
|
def workspacePath
|
|
def warArchiveName
|
|
def propertiesFileName
|
|
def archiveName
|
|
|
|
|
|
def neoDeployScript
|
|
def cpe
|
|
|
|
@Before
|
|
void init() {
|
|
|
|
workspacePath = "${tmp.newFolder("workspace").toURI().getPath()}"
|
|
warArchiveName = 'warArchive.war'
|
|
propertiesFileName = 'config.properties'
|
|
archiveName = "archive.mtar"
|
|
|
|
helper.registerAllowedMethod('dockerExecute', [Map, Closure], null)
|
|
helper.registerAllowedMethod('error', [String], { s -> throw new AbortException(s) })
|
|
helper.registerAllowedMethod('fileExists', [String], { s -> return new File(workspacePath, s).exists() })
|
|
helper.registerAllowedMethod('usernamePassword', [Map], { m -> return m })
|
|
helper.registerAllowedMethod('withCredentials', [List, Closure], { l, c ->
|
|
if(l[0].credentialsId == 'myCredentialsId') {
|
|
binding.setProperty('username', 'anonymous')
|
|
binding.setProperty('password', '********')
|
|
} else if(l[0].credentialsId == 'CI_CREDENTIALS_ID') {
|
|
binding.setProperty('username', 'defaultUser')
|
|
binding.setProperty('password', '********')
|
|
}
|
|
try {
|
|
c()
|
|
} finally {
|
|
binding.setProperty('username', null)
|
|
binding.setProperty('password', null)
|
|
}
|
|
|
|
})
|
|
|
|
binding.setVariable('env', [:])
|
|
|
|
neoDeployScript = loadScript("neoDeploy.groovy").neoDeploy
|
|
cpe = loadScript('commonPipelineEnvironment.groovy').commonPipelineEnvironment
|
|
|
|
|
|
}
|
|
|
|
|
|
@Test
|
|
void straightForwardTestConfigViaConfigProperties() {
|
|
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
|
|
new File(workspacePath, archiveName) << "dummy archive"
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: archiveName,
|
|
neoCredentialsId: 'myCredentialsId'
|
|
)
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/opt\/neo\/tools\/neo\.sh" deploy-mta --host 'test\.deploy\.host\.com' --account 'trialuser123' --synchronous --user 'anonymous' --password '\*\*\*\*\*\*\*\*' --source ".*"/
|
|
|
|
assert jlr.log.contains("[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment.")
|
|
|
|
}
|
|
|
|
@Test
|
|
void straightForwardTestConfigViaConfiguration() {
|
|
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
|
|
new File(workspacePath, archiveName) << "dummy archive"
|
|
|
|
cpe.configuration.put('steps', [neoDeploy: [host: 'test.deploy.host.com',
|
|
account: 'trialuser123']])
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: archiveName,
|
|
neoCredentialsId: 'myCredentialsId'
|
|
)
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/opt\/neo\/tools\/neo\.sh" deploy-mta --host 'test\.deploy\.host\.com' --account 'trialuser123' --synchronous --user 'anonymous' --password '\*\*\*\*\*\*\*\*' --source ".*"/
|
|
|
|
assert jlr.log.contains("[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment.")
|
|
|
|
}
|
|
|
|
@Test
|
|
void straightForwardTestConfigViaConfigurationAndViaConfigProperties() {
|
|
|
|
//configuration via configurationFramekwork superseds.
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
|
|
new File(workspacePath, archiveName) << "dummy archive"
|
|
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'configProperties.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'configPropsUser123')
|
|
|
|
cpe.configuration.put('steps', [neoDeploy: [host: 'configuration-frwk.deploy.host.com',
|
|
account: 'configurationFrwkUser123']])
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: archiveName,
|
|
neoCredentialsId: 'myCredentialsId'
|
|
)
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/opt\/neo\/tools\/neo\.sh" deploy-mta --host 'configuration-frwk\.deploy\.host\.com' --account 'configurationFrwkUser123' --synchronous --user 'anonymous' --password '\*\*\*\*\*\*\*\*' --source ".*"/
|
|
|
|
assert jlr.log.contains("[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment.")
|
|
|
|
}
|
|
|
|
|
|
@Test
|
|
void badCredentialsIdTest() {
|
|
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
|
|
new File(workspacePath, archiveName) << "dummy archive"
|
|
|
|
thrown.expect(MissingPropertyException)
|
|
thrown.expectMessage('No such property: username')
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: archiveName,
|
|
neoCredentialsId: 'badCredentialsId'
|
|
)
|
|
}
|
|
|
|
|
|
@Test
|
|
void credentialsIdNotProvidedTest() {
|
|
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
|
|
new File(workspacePath, archiveName) << "dummy archive"
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: archiveName
|
|
)
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/opt\/neo\/tools\/neo\.sh" deploy-mta --host 'test\.deploy\.host\.com' --account 'trialuser123' --synchronous --user 'defaultUser' --password '\*\*\*\*\*\*\*\*' --source ".*"/
|
|
|
|
assert jlr.log.contains("[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment.")
|
|
}
|
|
|
|
|
|
@Test
|
|
void neoHomeNotSetTest() {
|
|
|
|
new File(workspacePath, archiveName) << "dummy archive"
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: archiveName
|
|
)
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "neo.sh" deploy-mta --host 'test\.deploy\.host\.com' --account 'trialuser123' --synchronous --user 'defaultUser' --password '\*\*\*\*\*\*\*\*' --source ".*"/
|
|
|
|
assert jlr.log.contains("Using Neo executable from PATH.")
|
|
}
|
|
|
|
|
|
@Test
|
|
void neoHomeAsParameterTest() {
|
|
|
|
new File(workspacePath, archiveName) << "dummy archive"
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: archiveName,
|
|
neoCredentialsId: 'myCredentialsId',
|
|
neoHome: '/etc/neo'
|
|
)
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/etc\/neo\/tools\/neo\.sh" deploy-mta --host 'test\.deploy\.host\.com' --account 'trialuser123' --synchronous --user 'anonymous' --password '\*\*\*\*\*\*\*\*' --source ".*"/
|
|
}
|
|
|
|
|
|
@Test
|
|
void archiveNotProvidedTest() {
|
|
|
|
thrown.expect(Exception)
|
|
thrown.expectMessage('Archive path not configured (parameter "archivePath").')
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe])
|
|
}
|
|
|
|
|
|
@Test
|
|
void wrongArchivePathProvidedTest() {
|
|
|
|
thrown.expect(AbortException)
|
|
thrown.expectMessage("Archive cannot be found")
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: archiveName)
|
|
}
|
|
|
|
|
|
@Test
|
|
void scriptNotProvidedTest() {
|
|
|
|
new File(workspacePath, archiveName) << "dummy archive"
|
|
|
|
thrown.expect(Exception)
|
|
thrown.expectMessage('ERROR - NO VALUE AVAILABLE FOR host')
|
|
|
|
neoDeployScript.call(archivePath: archiveName)
|
|
}
|
|
|
|
@Test
|
|
void mtaDeployModeTest() {
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
new File(workspacePath, archiveName) << "dummy archive"
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe], archivePath: archiveName, deployMode: 'mta')
|
|
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/opt\/neo\/tools\/neo\.sh" deploy-mta --host 'test\.deploy\.host\.com' --account 'trialuser123' --synchronous --user 'defaultUser' --password '\*\*\*\*\*\*\*\*' --source ".*"/
|
|
assert jlr.log.contains("[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment.")
|
|
}
|
|
|
|
@Test
|
|
void warFileParamsDeployModeTest() {
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
applicationName: 'testApp',
|
|
runtime: 'neo-javaee6-wp',
|
|
runtimeVersion: '2.125',
|
|
deployMode: 'warParams',
|
|
vmSize: 'lite',
|
|
warAction: 'deploy',
|
|
archivePath: warArchiveName)
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/opt\/neo\/tools\/neo\.sh" deploy --host 'test\.deploy\.host\.com' --account 'trialuser123' --application 'testApp' --runtime 'neo-javaee6-wp' --runtime-version '2\.125' --size 'lite' --user 'defaultUser' --password '\*\*\*\*\*\*\*\*' --source ".*\.war"/
|
|
assert jlr.log.contains("[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment.")
|
|
}
|
|
|
|
@Test
|
|
void warFileParamsDeployModeRollingUpdateTest() {
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: warArchiveName,
|
|
deployMode: 'warParams',
|
|
applicationName: 'testApp',
|
|
runtime: 'neo-javaee6-wp',
|
|
runtimeVersion: '2.125',
|
|
warAction: 'rolling-update',
|
|
vmSize: 'lite')
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/opt\/neo\/tools\/neo\.sh" rolling-update --host 'test\.deploy\.host\.com' --account 'trialuser123' --application 'testApp' --runtime 'neo-javaee6-wp' --runtime-version '2\.125' --size 'lite' --user 'defaultUser' --password '\*\*\*\*\*\*\*\*' --source ".*\.war"/
|
|
assert jlr.log.contains("[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment.")
|
|
}
|
|
|
|
@Test
|
|
void warPropertiesFileDeployModeTest() {
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
new File(workspacePath, propertiesFileName) << "dummy properties file"
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: warArchiveName,
|
|
deployMode: 'warPropertiesFile',
|
|
propertiesFile: propertiesFileName,
|
|
applicationName: 'testApp',
|
|
runtime: 'neo-javaee6-wp',
|
|
runtimeVersion: '2.125',
|
|
warAction: 'deploy',
|
|
vmSize: 'lite')
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/opt\/neo\/tools\/neo\.sh" deploy .*\.properties --user 'defaultUser' --password '\*\*\*\*\*\*\*\*' --source ".*\.war"/
|
|
assert jlr.log.contains("[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment.")
|
|
}
|
|
|
|
@Test
|
|
void warPropertiesFileDeployModeRollingUpdateTest() {
|
|
binding.getVariable('env')['NEO_HOME'] = '/opt/neo'
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
new File(workspacePath, propertiesFileName) << "dummy properties file"
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: warArchiveName,
|
|
deployMode: 'warPropertiesFile',
|
|
propertiesFile: propertiesFileName,
|
|
applicationName: 'testApp',
|
|
runtime: 'neo-javaee6-wp',
|
|
runtimeVersion: '2.125',
|
|
warAction: 'rolling-update',
|
|
vmSize: 'lite')
|
|
|
|
assert jscr.shell[0] =~ /#!\/bin\/bash "\/opt\/neo\/tools\/neo\.sh" rolling-update .*\.properties --user 'defaultUser' --password '\*\*\*\*\*\*\*\*' --source ".*\.war"/
|
|
assert jlr.log.contains("[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment.")
|
|
}
|
|
|
|
@Test
|
|
void applicationNameNotProvidedTest() {
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
|
|
thrown.expect(Exception)
|
|
thrown.expectMessage('ERROR - NO VALUE AVAILABLE FOR applicationName')
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: warArchiveName,
|
|
deployMode: 'warParams',
|
|
runtime: 'neo-javaee6-wp',
|
|
runtimeVersion: '2.125'
|
|
)
|
|
}
|
|
|
|
@Test
|
|
void runtimeNotProvidedTest() {
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
|
|
thrown.expect(Exception)
|
|
thrown.expectMessage('ERROR - NO VALUE AVAILABLE FOR runtime')
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: warArchiveName,
|
|
applicationName: 'testApp',
|
|
deployMode: 'warParams',
|
|
runtimeVersion: '2.125')
|
|
}
|
|
|
|
@Test
|
|
void runtimeVersionNotProvidedTest() {
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
|
|
thrown.expect(Exception)
|
|
thrown.expectMessage('ERROR - NO VALUE AVAILABLE FOR runtimeVersion')
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: warArchiveName,
|
|
applicationName: 'testApp',
|
|
deployMode: 'warParams',
|
|
runtime: 'neo-javaee6-wp')
|
|
}
|
|
|
|
@Test
|
|
void illegalDeployModeTest() {
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
|
|
thrown.expect(Exception)
|
|
thrown.expectMessage("[neoDeploy] Invalid deployMode = 'illegalMode'. Valid 'deployMode' values are: 'mta', 'warParams' and 'warPropertiesFile'")
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: warArchiveName,
|
|
deployMode: 'illegalMode',
|
|
applicationName: 'testApp',
|
|
runtime: 'neo-javaee6-wp',
|
|
runtimeVersion: '2.125',
|
|
warAction: 'deploy',
|
|
vmSize: 'lite')
|
|
}
|
|
|
|
@Test
|
|
void illegalVMSizeTest() {
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
|
|
thrown.expect(Exception)
|
|
thrown.expectMessage("[neoDeploy] Invalid vmSize = 'illegalVM'. Valid 'vmSize' values are: 'lite', 'pro', 'prem' and 'prem-plus'.")
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: warArchiveName,
|
|
deployMode: 'warParams',
|
|
applicationName: 'testApp',
|
|
runtime: 'neo-javaee6-wp',
|
|
runtimeVersion: '2.125',
|
|
warAction: 'deploy',
|
|
vmSize: 'illegalVM')
|
|
}
|
|
|
|
@Test
|
|
void illegalWARActionTest() {
|
|
new File(workspacePath, warArchiveName) << "dummy war archive"
|
|
|
|
thrown.expect(Exception)
|
|
thrown.expectMessage("[neoDeploy] Invalid warAction = 'illegalWARAction'. Valid 'warAction' values are: 'deploy' and 'rolling-update'.")
|
|
|
|
cpe.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com')
|
|
cpe.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123')
|
|
|
|
neoDeployScript.call(script: [commonPipelineEnvironment: cpe],
|
|
archivePath: warArchiveName,
|
|
deployMode: 'warParams',
|
|
applicationName: 'testApp',
|
|
runtime: 'neo-javaee6-wp',
|
|
runtimeVersion: '2.125',
|
|
warAction: 'illegalWARAction',
|
|
vmSize: 'lite')
|
|
}
|
|
}
|