mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
ce96c379ef
This change add the support for running integration tests using the recently introduced step mavenExecuteIntegration in piperPipelineStageIntegration. In addition, capabilities to provide temporary credentials to these tests is added using the writeTemporaryCredentials step.
156 lines
6.1 KiB
Groovy
156 lines
6.1 KiB
Groovy
package com.sap.piper
|
|
|
|
import org.junit.Before
|
|
import org.junit.Rule
|
|
import org.junit.Test
|
|
import org.junit.rules.ExpectedException
|
|
import org.junit.rules.RuleChain
|
|
import util.BasePiperTest
|
|
import util.JenkinsCredentialsRule
|
|
import util.JenkinsFileExistsRule
|
|
import util.JenkinsLoggingRule
|
|
import util.JenkinsReadFileRule
|
|
import util.JenkinsReadYamlRule
|
|
import util.JenkinsShellCallRule
|
|
import util.JenkinsWriteFileRule
|
|
import util.Rules
|
|
|
|
import static org.junit.Assert.assertThat
|
|
import static org.hamcrest.Matchers.*
|
|
import static org.junit.Assert.assertTrue
|
|
|
|
class TemporaryCredentialsUtilsTest extends BasePiperTest {
|
|
private ExpectedException thrown = ExpectedException.none()
|
|
private JenkinsCredentialsRule credentialsRule = new JenkinsCredentialsRule(this)
|
|
private JenkinsWriteFileRule writeFileRule = new JenkinsWriteFileRule(this)
|
|
private JenkinsFileExistsRule fileExistsRule = new JenkinsFileExistsRule(this, [])
|
|
private JenkinsReadFileRule readFileRule = new JenkinsReadFileRule(this, null)
|
|
private JenkinsReadYamlRule readYamlRule = new JenkinsReadYamlRule(this)
|
|
private JenkinsShellCallRule shellRule = new JenkinsShellCallRule(this)
|
|
private JenkinsLoggingRule loggingRule = new JenkinsLoggingRule(this)
|
|
|
|
def bodyExecuted
|
|
TemporaryCredentialsUtils credUtils
|
|
|
|
@Rule
|
|
public RuleChain ruleChain = Rules
|
|
.getCommonRules(this)
|
|
.around(thrown)
|
|
.around(readYamlRule)
|
|
.around(credentialsRule)
|
|
.around(loggingRule)
|
|
.around(writeFileRule)
|
|
.around(fileExistsRule)
|
|
.around(readFileRule)
|
|
.around(shellRule)
|
|
|
|
@Before
|
|
void init() {
|
|
bodyExecuted = false
|
|
|
|
credentialsRule.reset()
|
|
.withCredentials('erp-credentials', 'test_user', '********')
|
|
.withCredentials('testCred2', 'test_other', '**')
|
|
|
|
credUtils = new TemporaryCredentialsUtils(nullScript)
|
|
}
|
|
|
|
@Test
|
|
void singleCredentialsFileWritten() {
|
|
def credential = [alias: 'ERP', credentialId: 'erp-credentials']
|
|
def directories = ['./', 'integration-tests/src/test/resources']
|
|
def filename = 'credentials.json'
|
|
fileExistsRule.registerExistingFile('./systems.yml')
|
|
|
|
credUtils.writeCredentials([credential], directories, filename )
|
|
|
|
assertThat(writeFileRule.files['./credentials.json'], containsString('"alias":"ERP","username":"test_user","password":"********"'))
|
|
}
|
|
|
|
@Test
|
|
void twoCredentialsFilesWritten() {
|
|
def credential = [alias: 'ERP', credentialId: 'erp-credentials']
|
|
def directories = ['./', 'integration-tests/src/test/resources']
|
|
def filename = 'credentials.json'
|
|
fileExistsRule.registerExistingFile('./systems.yml')
|
|
fileExistsRule.registerExistingFile('integration-tests/src/test/resources/systems.yml')
|
|
|
|
credUtils.writeCredentials([credential], directories, filename )
|
|
|
|
assertThat(writeFileRule.files["./credentials.json"], containsString('"alias":"ERP","username":"test_user","password":"********"'))
|
|
assertThat(writeFileRule.files["integration-tests/src/test/resources/credentials.json"], containsString('"alias":"ERP","username":"test_user","password":"********"'))
|
|
}
|
|
|
|
@Test
|
|
void credentialsFileNotWrittenWithEmptyList() {
|
|
def directories = ['./', 'integration-tests/src/test/resources']
|
|
def filename = 'credentials.json'
|
|
fileExistsRule.registerExistingFile('systems.yml')
|
|
|
|
credUtils.writeCredentials([], directories, filename )
|
|
|
|
loggingRule.expect('Not writing any credentials.')
|
|
}
|
|
|
|
@Test
|
|
void systemsFileNotExists() {
|
|
def credential = [alias: 'ERP', credentialId: 'erp-credentials']
|
|
def directories = ['./', 'integration-tests/src/test/resources']
|
|
def filename = 'credentials.json'
|
|
thrown.expect(hudson.AbortException)
|
|
thrown.expectMessage("None of the directories [./, integration-tests/src/test/resources/] contains any of the files systems.yml, systems.yaml or systems.json. " +
|
|
"One of those files is required in order to activate the integration test credentials configured in the pipeline configuration file of this project. " +
|
|
"Please add the file as explained in the SAP Cloud SDK documentation.")
|
|
|
|
credUtils.writeCredentials([credential], directories, filename )
|
|
}
|
|
|
|
@Test
|
|
void credentialsFileDeleted() {
|
|
def directories = ['./', 'integration-tests/src/test/resources']
|
|
def filename = 'credentials.json'
|
|
fileExistsRule.registerExistingFile('systems.yml')
|
|
fileExistsRule.registerExistingFile('./credentials.json')
|
|
|
|
credUtils.deleteCredentials(directories, filename )
|
|
|
|
assertThat(shellRule.shell, hasItem('rm -f ./credentials.json'))
|
|
}
|
|
|
|
@Test
|
|
void handleTemporaryCredentials() {
|
|
def credential = [alias: 'ERP', credentialId: 'erp-credentials']
|
|
def directories = ['./', 'integration-tests/src/test/resources']
|
|
fileExistsRule.registerExistingFile('./systems.yml')
|
|
fileExistsRule.registerExistingFile('./credentials.json')
|
|
|
|
credUtils.handleTemporaryCredentials([credential], directories) {
|
|
bodyExecuted = true
|
|
}
|
|
assertTrue(bodyExecuted)
|
|
assertThat(writeFileRule.files['./credentials.json'], containsString('"alias":"ERP","username":"test_user","password":"********"'))
|
|
assertThat(shellRule.shell, hasItem('rm -f ./credentials.json'))
|
|
}
|
|
|
|
@Test
|
|
void handleTemporaryCredentialsNoDirectories() {
|
|
thrown.expect(hudson.AbortException)
|
|
thrown.expectMessage("This should not happen: Directories for credentials files not specified.")
|
|
|
|
credUtils.handleTemporaryCredentials([], []){
|
|
bodyExecuted = true
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void handleTemporaryCredentialsNoCredentials() {
|
|
def directories = ['./', 'integration-tests/src/test/resources']
|
|
credUtils.handleTemporaryCredentials([], directories){
|
|
bodyExecuted = true
|
|
}
|
|
assertTrue(bodyExecuted)
|
|
assertThat(writeFileRule.files.keySet(), hasSize(0))
|
|
assertThat(shellRule.shell, hasSize(0))
|
|
}
|
|
}
|