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/com/sap/piper/TemporaryCredentialsUtilsTest.groovy
Kevin Hudemann ce96c379ef
Add mavenExecuteIntegration and writeTemporaryCredentials to piperPipelineStageIntegration (#1927)
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.
2020-08-14 15:22:05 +02:00

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))
}
}