1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/test/groovy/AbapEnvironmentPullGitRepoTest.groovy
Daniel Mieg cac595b4bb Use credentialsId in step abapEnvironmentPullGitRepo (#974)
* Add option for credentialsId
* Remove mandatory username and password
* Add null checks
2019-11-12 17:40:59 +01:00

181 lines
8.7 KiB
Groovy

import java.util.Map
import static org.hamcrest.Matchers.hasItem
import static org.junit.Assert.assertThat
import org.hamcrest.Matchers
import static org.hamcrest.Matchers.containsString
import static org.hamcrest.Matchers.equalTo
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.JenkinsStepRule
import util.JenkinsLoggingRule
import util.JenkinsReadYamlRule
import util.JenkinsShellCallRule
import util.Rules
import hudson.AbortException
public class AbapEnvironmentPullGitRepoTest extends BasePiperTest {
private ExpectedException thrown = new ExpectedException()
private JenkinsStepRule stepRule = new JenkinsStepRule(this)
private JenkinsLoggingRule loggingRule = new JenkinsLoggingRule(this)
private JenkinsShellCallRule shellRule = new JenkinsShellCallRule(this)
private JenkinsCredentialsRule credentialsRule = new JenkinsCredentialsRule(this).withCredentials('test_credentialsId', 'user', 'password')
@Rule
public RuleChain ruleChain = Rules.getCommonRules(this)
.around(new JenkinsReadYamlRule(this))
.around(thrown)
.around(stepRule)
.around(loggingRule)
.around(credentialsRule)
.around(shellRule)
@Before
public void setup() {
}
@Test
public void pullSuccessful() {
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*x-csrf-token: fetch.*/, null )
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*POST.*/, /{"d" : { "__metadata" : { "uri" : "https:\/\/example.com\/URI" } , "status" : "R", "status_descr" : "RUNNING" }}/)
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*https:\/\/example\.com.*/, /{"d" : { "__metadata" : { "uri" : "https:\/\/example.com\/URI" } , "status" : "S", "status_descr" : "SUCCESS" }}/)
helper.registerAllowedMethod("readFile", [String.class], {
/HTTP\/1.1 200 OK
set-cookie: sap-usercontext=sap-client=100; path=\/
content-type: application\/json; charset=utf-8
x-csrf-token: TOKEN/
})
loggingRule.expect("[abapEnvironmentPullGitRepo] Pull Status: RUNNING")
loggingRule.expect("[abapEnvironmentPullGitRepo] Entity URI: https://example.com/URI")
loggingRule.expect("[abapEnvironmentPullGitRepo] Pull Status: SUCCESS")
stepRule.step.abapEnvironmentPullGitRepo(script: nullScript, host: 'example.com', repositoryName: 'Z_DEMO_DM', credentialsId: 'test_credentialsId')
assertThat(shellRule.shell[0], containsString(/#!\/bin\/bash curl -I -X GET https:\/\/example.com\/sap\/opu\/odata\/sap\/MANAGE_GIT_REPOSITORY\/Pull -H 'Authorization: Basic dXNlcjpwYXNzd29yZA==' -H 'Accept: application\/json' -H 'x-csrf-token: fetch' -D headerFileAuth-1.txt/))
assertThat(shellRule.shell[1], containsString(/#!\/bin\/bash curl -X POST "https:\/\/example.com\/sap\/opu\/odata\/sap\/MANAGE_GIT_REPOSITORY\/Pull" -H 'Authorization: Basic dXNlcjpwYXNzd29yZA==' -H 'Accept: application\/json' -H 'Content-Type: application\/json' -H 'x-csrf-token: TOKEN' --cookie headerFileAuth-1.txt -D headerFilePost-1.txt -d '{ "sc_name": "Z_DEMO_DM" }'/))
assertThat(shellRule.shell[2], containsString(/#!\/bin\/bash curl -X GET "https:\/\/example.com\/URI" -H 'Authorization: Basic dXNlcjpwYXNzd29yZA==' -H 'Accept: application\/json' -D headerFilePoll-1.txt/))
assertThat(shellRule.shell[3], containsString(/#!\/bin\/bash rm -f headerFileAuth-1.txt headerFilePost-1.txt headerFilePoll-1.txt/))
}
@Test
public void pullFailsWhilePolling() {
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*x-csrf-token: fetch.*/, "TOKEN")
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*POST.*/, /{"d" : { "__metadata" : { "uri" : "https:\/\/example.com\/URI" } , "status" : "R", "status_descr" : "RUNNING" }}/)
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*https:\/\/example\.com.*/, /{"d" : { "__metadata" : { "uri" : "https:\/\/example.com\/URI" } , "status" : "E", "status_descr" : "ERROR" }}/)
helper.registerAllowedMethod("readFile", [String.class], {
/HTTP\/1.1 200 OK
set-cookie: sap-usercontext=sap-client=100; path=\/
content-type: application\/json; charset=utf-8/
})
loggingRule.expect("[abapEnvironmentPullGitRepo] Pull Status: RUNNING")
loggingRule.expect("[abapEnvironmentPullGitRepo] Pull Status: ERROR")
thrown.expect(Exception)
thrown.expectMessage("[abapEnvironmentPullGitRepo] Pull Failed")
stepRule.step.abapEnvironmentPullGitRepo(script: nullScript, host: 'example.com', repositoryName: 'Z_DEMO_DM', credentialsId: 'test_credentialsId')
}
@Test
public void pullFailsWithPostRequest() {
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*x-csrf-token: fetch.*/, "TOKEN")
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*POST.*/, /{"d" : { "__metadata" : { "uri" : "https:\/\/example.com\/URI" } , "status" : "E", "status_descr" : "ERROR" }}/)
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*https:\/\/example\.com.*/, /{"d" : { "__metadata" : { "uri" : "https:\/\/example.com\/URI" } , "status" : "E", "status_descr" : "ERROR" }}/)
helper.registerAllowedMethod("readFile", [String.class], {
/HTTP\/1.1 200 OK
set-cookie: sap-usercontext=sap-client=100; path=\/
content-type: application\/json; charset=utf-8/
})
loggingRule.expect("[abapEnvironmentPullGitRepo] Pull Status: ERROR")
thrown.expect(Exception)
thrown.expectMessage("[abapEnvironmentPullGitRepo] Pull Failed")
stepRule.step.abapEnvironmentPullGitRepo(script: nullScript, host: 'example.com', repositoryName: 'Z_DEMO_DM', credentialsId: 'test_credentialsId')
}
@Test
public void pullWithErrorResponse() {
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*x-csrf-token: fetch.*/, "TOKEN")
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*POST.*/, /{"error" : { "message" : { "lang" : "en", "value": "text" } }}/)
helper.registerAllowedMethod("readFile", [String.class], {
/HTTP\/1.1 200 OK
set-cookie: sap-usercontext=sap-client=100; path=\/
content-type: application\/json; charset=utf-8/
})
thrown.expect(Exception)
thrown.expectMessage("[abapEnvironmentPullGitRepo] Error: text")
stepRule.step.abapEnvironmentPullGitRepo(script: nullScript, host: 'example.com', repositoryName: 'Z_DEMO_DM', credentialsId: 'test_credentialsId')
}
@Test
public void connectionFails() {
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, /.*x-csrf-token: fetch.*/, null)
helper.registerAllowedMethod("readFile", [String.class], {
/HTTP\/1.1 401 Unauthorized
set-cookie: sap-usercontext=sap-client=100; path=\/
content-type: application\/json; charset=utf-8/
})
thrown.expect(Exception)
thrown.expectMessage("[abapEnvironmentPullGitRepo] Error: 401 Unauthorized")
stepRule.step.abapEnvironmentPullGitRepo(script: nullScript, host: 'example.com', repositoryName: 'Z_DEMO_DM', credentialsId: 'test_credentialsId')
}
@Test
public void checkRepositoryProvided() {
thrown.expect(IllegalArgumentException)
thrown.expectMessage("Repository / Software Component not provided")
stepRule.step.abapEnvironmentPullGitRepo(script: nullScript, host: 'example.com', credentialsId: 'test_credentialsId')
}
@Test
public void checkHostProvided() {
thrown.expect(IllegalArgumentException)
thrown.expectMessage("Host not provided")
stepRule.step.abapEnvironmentPullGitRepo(script: nullScript, repositoryName: 'REPO', credentialsId: 'test_credentialsId')
}
@Test
public void testHttpHeader() {
String header = /HTTP\/1.1 401 Unauthorized
set-cookie: sap-usercontext=sap-client=100; path=\/
content-type: text\/html; charset=utf-8
content-length: 9321
sap-system: Y11
x-csrf-token: TOKEN
www-authenticate: Basic realm="SAP NetWeaver Application Server [Y11\/100][alias]"
sap-server: true
sap-perf-fesrec: 72927.000000/
HttpHeaderProperties httpHeader = new HttpHeaderProperties(header)
assertThat(httpHeader.statusCode, equalTo(401))
assertThat(httpHeader.statusMessage, containsString("Unauthorized"))
assertThat(httpHeader.xCsrfToken, containsString("TOKEN"))
}
}