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/integration/TransportManagementServiceTest.groovy
2019-07-18 15:06:11 +02:00

182 lines
7.7 KiB
Groovy

package com.sap.piper.integration
import hudson.AbortException
import org.junit.Rule
import org.junit.Test
import org.junit.Ignore
import org.junit.rules.ExpectedException
import org.junit.rules.RuleChain
import util.*
import static org.hamcrest.Matchers.*
import static org.junit.Assert.assertThat
class TransportManagementServiceTest extends BasePiperTest {
private ExpectedException thrown = ExpectedException.none()
private JenkinsShellCallRule shellRule = new JenkinsShellCallRule(this)
private JenkinsLoggingRule loggingRule = new JenkinsLoggingRule(this)
@Rule
public RuleChain rules = Rules
.getCommonRules(this)
.around(new JenkinsErrorRule(this))
.around(new JenkinsReadJsonRule(this))
.around(shellRule)
.around(loggingRule)
.around(new JenkinsReadFileRule(this, 'test/resources/TransportManagementService'))
.around(thrown)
@Test
void retrieveOAuthToken__successfully() {
Map requestParams
helper.registerAllowedMethod('httpRequest', [Map.class], { m ->
requestParams = m
return [content: '{ "access_token": "myOAuthToken" }']
})
def uaaUrl = 'http://dummy.com/oauth'
def clientId = 'myId'
def clientSecret = 'mySecret'
def tms = new TransportManagementService(nullScript, [:])
def token = tms.authentication(uaaUrl, clientId, clientSecret)
assertThat(loggingRule.log, containsString("[TransportManagementService] OAuth Token retrieval started."))
assertThat(loggingRule.log, containsString("[TransportManagementService] OAuth Token retrieved successfully."))
assertThat(token, is('myOAuthToken'))
assertThat(requestParams, hasEntry('url', "${uaaUrl}/oauth/token/?grant_type=client_credentials&response_type=token"))
assertThat(requestParams, hasEntry('requestBody', "grant_type=password&username=${clientId}&password=${clientSecret}".toString()))
assertThat(requestParams.customHeaders[1].value, is("Basic ${"${clientId}:${clientSecret}".bytes.encodeBase64()}"))
}
@Test
void retrieveOAuthToken__inVerboseMode__yieldsMoreEchos() {
Map requestParams
helper.registerAllowedMethod('httpRequest', [Map.class], { m ->
requestParams = m
return [content: '{ "access_token": "myOAuthToken" }', status: 200]
})
def uaaUrl = 'http://dummy.com/oauth'
def clientId = 'myId'
def clientSecret = 'mySecret'
def tms = new TransportManagementService(nullScript, [verbose: true])
tms.authentication(uaaUrl, clientId, clientSecret)
assertThat(loggingRule.log, containsString("[TransportManagementService] OAuth Token retrieval started."))
assertThat(loggingRule.log, containsString("[TransportManagementService] UAA-URL: '${uaaUrl}', ClientId: '${clientId}'"))
assertThat(loggingRule.log, containsString("Received response '{ \"access_token\": \"myOAuthToken\" }' with status 200."))
assertThat(loggingRule.log, containsString("[TransportManagementService] OAuth Token retrieved successfully."))
}
@Test
void uploadFile__successfully() {
def url = 'http://dummy.com/oauth'
def token = 'myToken'
def file = 'myFile.mtar'
def namedUser = 'myUser'
def tms = new TransportManagementService(nullScript, [:])
def responseDetails = tms.uploadFile(url, token, file, namedUser)
def oAuthShellCall = shellRule.shell[0]
assertThat(loggingRule.log, containsString("[TransportManagementService] File upload started."))
assertThat(loggingRule.log, containsString("[TransportManagementService] File upload successful."))
assertThat(oAuthShellCall, startsWith("#!/bin/sh -e "))
assertThat(oAuthShellCall, endsWith("curl -H 'Authorization: Bearer ${token}' -F 'file=@${file}' -F 'namedUser=${namedUser}' -o responseFileUpload.txt --fail '${url}/v2/files/upload'"))
assertThat(responseDetails, hasEntry("fileId", 1234))
}
@Ignore
void uploadFile__withHttpErrorResponse__throwsError() {
def url = 'http://dummy.com/oauth'
def token = 'myWrongToken'
def file = 'myFile.mtar'
def namedUser = 'myUser'
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, ".* curl .*", {throw new AbortException()})
thrown.expect(AbortException.class)
def tms = new TransportManagementService(nullScript, [:])
tms.uploadFile(url, token, file, namedUser)
}
@Test
void uploadFile__inVerboseMode__yieldsMoreEchos() {
def url = 'http://dummy.com/oauth'
def token = 'myToken'
def file = 'myFile.mtar'
def namedUser = 'myUser'
shellRule.setReturnValue(JenkinsShellCallRule.Type.REGEX, ".* curl .*", '200')
def tms = new TransportManagementService(nullScript, [verbose: true])
tms.uploadFile(url, token, file, namedUser)
assertThat(loggingRule.log, containsString("[TransportManagementService] File upload started."))
assertThat(loggingRule.log, containsString("[TransportManagementService] URL: '${url}', File: '${file}'"))
assertThat(loggingRule.log, containsString("\"fileId\": 1234"))
assertThat(loggingRule.log, containsString("[TransportManagementService] File upload successful."))
}
@Test
void uploadFileToNode__successfully() {
Map requestParams
helper.registerAllowedMethod('httpRequest', [Map.class], { m ->
requestParams = m
return [content: '{ "upload": "success" }']
})
def url = 'http://dummy.com/oauth'
def token = 'myToken'
def nodeName = 'myNode'
def fileId = 1234
def description = "My description."
def namedUser = 'myUser'
def tms = new TransportManagementService(nullScript, [:])
def responseDetails = tms.uploadFileToNode(url, token, nodeName, fileId, description, namedUser)
def bodyRegEx = /^\{\s+"nodeName":\s+"myNode",\s+"contentType":\s+"MTA",\s+"description":\s+"My\s+description.",\s+"storageType":\s+"FILE",\s+"namedUser":\s+"myUser",\s+"entries":\s+\[\s+\{\s+"uri":\s+1234\s+}\s+]\s+}$/
assertThat(loggingRule.log, containsString("[TransportManagementService] Node upload started."))
assertThat(loggingRule.log, containsString("[TransportManagementService] Node upload successful."))
assertThat(requestParams, hasEntry('url', "${url}/v2/nodes/upload"))
assert requestParams.requestBody ==~ bodyRegEx
assertThat(requestParams.customHeaders[0].value, is("Bearer ${token}"))
assertThat(responseDetails, hasEntry("upload", "success"))
}
@Test
void uploadFileToNode__inVerboseMode__yieldsMoreEchos() {
Map requestParams
helper.registerAllowedMethod('httpRequest', [Map.class], { m ->
requestParams = m
return [content: '{ "upload": "success" }']
})
def url = 'http://dummy.com/oauth'
def token = 'myToken'
def nodeName = 'myNode'
def fileId = 1234
def description = "My description."
def namedUser = 'myUser'
def tms = new TransportManagementService(nullScript, [verbose: true])
tms.uploadFileToNode(url, token, nodeName, fileId, description, namedUser)
assertThat(loggingRule.log, containsString("[TransportManagementService] Node upload started."))
assertThat(loggingRule.log, containsString("[TransportManagementService] URL: '${url}', NodeName: '${nodeName}', FileId: '${fileId}'"))
assertThat(loggingRule.log, containsString("\"upload\": \"success\""))
assertThat(loggingRule.log, containsString("[TransportManagementService] Node upload successful."))
}
}