mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
182 lines
7.7 KiB
Groovy
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."))
|
|
}
|
|
|
|
}
|