2020-08-21 14:49:48 +02:00
package cmd
import (
2022-06-29 15:50:33 +02:00
"encoding/json"
2022-02-11 11:16:40 +02:00
"fmt"
2020-08-21 14:49:48 +02:00
"io/ioutil"
"os"
"testing"
"github.com/SAP/jenkins-library/pkg/abaputils"
"github.com/stretchr/testify/assert"
)
2022-06-29 15:50:33 +02:00
var executionLogStringClone string
func init ( ) {
executionLog := abaputils . PullEntity {
ToExecutionLog : abaputils . AbapLogs {
Results : [ ] abaputils . LogResults {
{
Index : "1" ,
Type : "LogEntry" ,
Description : "S" ,
Timestamp : "/Date(1644332299000+0000)/" ,
} ,
} ,
} ,
}
executionLogResponse , _ := json . Marshal ( executionLog )
executionLogStringClone = string ( executionLogResponse )
}
2020-08-21 14:49:48 +02:00
func TestCloneStep ( t * testing . T ) {
t . Run ( "Run Step - Successful" , func ( t * testing . T ) {
var autils = abaputils . AUtilsMock { }
defer autils . Cleanup ( )
autils . ReturnedConnectionDetailsHTTP . Password = "password"
autils . ReturnedConnectionDetailsHTTP . User = "user"
autils . ReturnedConnectionDetailsHTTP . URL = "https://example.com"
autils . ReturnedConnectionDetailsHTTP . XCsrfToken = "xcsrftoken"
dir , errDir := ioutil . TempDir ( "" , "test read addon descriptor" )
if errDir != nil {
t . Fatal ( "Failed to create temporary directory" )
}
oldCWD , _ := os . Getwd ( )
_ = os . Chdir ( dir )
// clean up tmp dir
defer func ( ) {
_ = os . Chdir ( oldCWD )
_ = os . RemoveAll ( dir )
} ( )
body := ` -- -
repositories :
- name : / DMO / REPO_A
tag : v - 1.0 .1 - build - 0001
branch : branchA
version : 1.0 .1
- name : / DMO / REPO_B
tag : rel - 2.1 .1 - build - 0001
branch : branchB
version : 2.1 .1
`
file , _ := os . Create ( "filename.yaml" )
file . Write ( [ ] byte ( body ) )
config := abapEnvironmentCloneGitRepoOptions {
CfAPIEndpoint : "https://api.endpoint.com" ,
CfOrg : "testOrg" ,
CfSpace : "testSpace" ,
CfServiceInstance : "testInstance" ,
CfServiceKeyName : "testServiceKey" ,
Username : "testUser" ,
Password : "testPassword" ,
RepositoryName : "testRepo1" ,
BranchName : "testBranch1" ,
Repositories : "filename.yaml" ,
}
2022-02-11 11:16:40 +02:00
logResultSuccess := fmt . Sprintf ( ` { "d": { "sc_name": "/DMO/SWC", "status": "S", "to_Log_Overview": { "results": [ { "log_index": 1, "log_name": "Main Import", "type_of_found_issues": "Success", "timestamp": "/Date(1644332299000+0000)/", "to_Log_Protocol": { "results": [ { "log_index": 1, "index_no": "1", "log_name": "", "type": "Info", "descr": "Main import", "timestamp": null, "criticality": 0 } ] } } ] } } } ` )
2020-08-21 14:49:48 +02:00
client := & abaputils . ClientMock {
BodyList : [ ] string {
2022-06-29 15:50:33 +02:00
` { "d" : ` + executionLogStringClone + ` } ` ,
2022-02-11 11:16:40 +02:00
logResultSuccess ,
` { "d" : { "EntitySets" : [ "LogOverviews" ] } } ` ,
2020-08-21 14:49:48 +02:00
` { "d" : { "status" : "S" } } ` ,
` { "d" : { "status" : "R" } } ` ,
` { "d" : { "status" : "R" } } ` ,
` { "d" : { "status" : "R" } } ` ,
2022-06-29 15:50:33 +02:00
` { "d" : ` + executionLogStringClone + ` } ` ,
2022-02-11 11:16:40 +02:00
logResultSuccess ,
` { "d" : { "EntitySets" : [ "LogOverviews" ] } } ` ,
2020-08-21 14:49:48 +02:00
` { "d" : { "status" : "S" } } ` ,
` { "d" : { "status" : "R" } } ` ,
` { "d" : { "status" : "R" } } ` ,
` { "d" : { "status" : "R" } } ` ,
2022-06-29 15:50:33 +02:00
` { "d" : ` + executionLogStringClone + ` } ` ,
2022-02-11 11:16:40 +02:00
logResultSuccess ,
` { "d" : { "EntitySets" : [ "LogOverviews" ] } } ` ,
2020-08-21 14:49:48 +02:00
` { "d" : { "status" : "S" } } ` ,
` { "d" : { "status" : "R" } } ` ,
` { "d" : { "status" : "R" } } ` ,
` { "d" : { "status" : "R" } } ` ,
} ,
Token : "myToken" ,
StatusCode : 200 ,
}
2021-08-04 17:31:16 +02:00
err := runAbapEnvironmentCloneGitRepo ( & config , & autils , client )
2020-08-21 14:49:48 +02:00
assert . NoError ( t , err , "Did not expect error" )
assert . Equal ( t , 0 , len ( client . BodyList ) , "Not all requests were done" )
} )
t . Run ( "Run Step - failing" , func ( t * testing . T ) {
var autils = abaputils . AUtilsMock { }
defer autils . Cleanup ( )
autils . ReturnedConnectionDetailsHTTP . Password = "password"
autils . ReturnedConnectionDetailsHTTP . User = "user"
autils . ReturnedConnectionDetailsHTTP . URL = "https://example.com"
autils . ReturnedConnectionDetailsHTTP . XCsrfToken = "xcsrftoken"
config := abapEnvironmentCloneGitRepoOptions {
CfAPIEndpoint : "https://api.endpoint.com" ,
CfOrg : "testOrg" ,
CfSpace : "testSpace" ,
CfServiceInstance : "testInstance" ,
CfServiceKeyName : "testServiceKey" ,
Username : "testUser" ,
Password : "testPassword" ,
RepositoryName : "testRepo1" ,
BranchName : "testBranch1" ,
}
client := & abaputils . ClientMock {
BodyList : [ ] string {
` { "d" : { } } ` ,
` { "d" : { "status" : "R" } } ` ,
} ,
Token : "myToken" ,
StatusCode : 200 ,
}
2021-08-04 17:31:16 +02:00
err := runAbapEnvironmentCloneGitRepo ( & config , & autils , client )
2020-08-21 14:49:48 +02:00
if assert . Error ( t , err , "Expected error" ) {
2021-12-20 18:58:58 +02:00
assert . Equal ( t , "Clone of repository / software component 'testRepo1', branch 'testBranch1' failed on the ABAP system: Request to ABAP System not successful" , err . Error ( ) , "Expected different error message" )
2020-08-21 14:49:48 +02:00
}
} )
}
func TestCloneStepErrorMessages ( t * testing . T ) {
t . Run ( "Status Error" , func ( t * testing . T ) {
var autils = abaputils . AUtilsMock { }
defer autils . Cleanup ( )
autils . ReturnedConnectionDetailsHTTP . Password = "password"
autils . ReturnedConnectionDetailsHTTP . User = "user"
autils . ReturnedConnectionDetailsHTTP . URL = "https://example.com"
autils . ReturnedConnectionDetailsHTTP . XCsrfToken = "xcsrftoken"
2020-11-02 15:17:13 +02:00
dir , errDir := ioutil . TempDir ( "" , "test read addon descriptor" )
if errDir != nil {
t . Fatal ( "Failed to create temporary directory" )
}
oldCWD , _ := os . Getwd ( )
_ = os . Chdir ( dir )
// clean up tmp dir
defer func ( ) {
_ = os . Chdir ( oldCWD )
_ = os . RemoveAll ( dir )
} ( )
body := ` -- -
repositories :
- name : / DMO / REPO_A
tag : v - 1.0 .1 - build - 0001
branch : branchA
version : 1.0 .1
commitID : ABCD1234
`
file , _ := os . Create ( "filename.yaml" )
file . Write ( [ ] byte ( body ) )
2020-08-21 14:49:48 +02:00
config := abapEnvironmentCloneGitRepoOptions {
CfAPIEndpoint : "https://api.endpoint.com" ,
CfOrg : "testOrg" ,
CfSpace : "testSpace" ,
CfServiceInstance : "testInstance" ,
CfServiceKeyName : "testServiceKey" ,
Username : "testUser" ,
Password : "testPassword" ,
2020-11-02 15:17:13 +02:00
Repositories : "filename.yaml" ,
2020-08-21 14:49:48 +02:00
}
2022-02-11 11:16:40 +02:00
logResultError := fmt . Sprintf ( ` { "d": { "sc_name": "/DMO/SWC", "status": "S", "to_Log_Overview": { "results": [ { "log_index": 1, "log_name": "Main Import", "type_of_found_issues": "Error", "timestamp": "/Date(1644332299000+0000)/", "to_Log_Protocol": { "results": [ { "log_index": 1, "index_no": "1", "log_name": "", "type": "Info", "descr": "Main import", "timestamp": null, "criticality": 0 } ] } } ] } } } ` )
2020-08-21 14:49:48 +02:00
client := & abaputils . ClientMock {
BodyList : [ ] string {
2022-06-29 15:50:33 +02:00
` { "d" : ` + executionLogStringClone + ` } ` ,
2022-02-11 11:16:40 +02:00
logResultError ,
` { "d" : { "EntitySets" : [ "LogOverviews" ] } } ` ,
2020-08-21 14:49:48 +02:00
` { "d" : { "status" : "E" } } ` ,
` { "d" : { "status" : "R" } } ` ,
` { "d" : { "status" : "R" } } ` ,
} ,
Token : "myToken" ,
StatusCode : 200 ,
}
2021-08-04 17:31:16 +02:00
err := runAbapEnvironmentCloneGitRepo ( & config , & autils , client )
2020-08-21 14:49:48 +02:00
if assert . Error ( t , err , "Expected error" ) {
2021-12-20 18:58:58 +02:00
assert . Equal ( t , "Clone of repository / software component '/DMO/REPO_A', branch 'branchA', commit 'ABCD1234' failed on the ABAP System" , err . Error ( ) , "Expected different error message" )
2020-08-21 14:49:48 +02:00
}
} )
t . Run ( "Poll Request Error" , func ( t * testing . T ) {
var autils = abaputils . AUtilsMock { }
defer autils . Cleanup ( )
autils . ReturnedConnectionDetailsHTTP . Password = "password"
autils . ReturnedConnectionDetailsHTTP . User = "user"
autils . ReturnedConnectionDetailsHTTP . URL = "https://example.com"
autils . ReturnedConnectionDetailsHTTP . XCsrfToken = "xcsrftoken"
config := abapEnvironmentCloneGitRepoOptions {
CfAPIEndpoint : "https://api.endpoint.com" ,
CfOrg : "testOrg" ,
CfSpace : "testSpace" ,
CfServiceInstance : "testInstance" ,
CfServiceKeyName : "testServiceKey" ,
Username : "testUser" ,
Password : "testPassword" ,
RepositoryName : "testRepo1" ,
BranchName : "testBranch1" ,
}
client := & abaputils . ClientMock {
BodyList : [ ] string {
` { "d" : { } } ` ,
` { "d" : { "status" : "R" } } ` ,
` { "d" : { "status" : "R" } } ` ,
} ,
Token : "myToken" ,
StatusCode : 200 ,
}
2021-08-04 17:31:16 +02:00
err := runAbapEnvironmentCloneGitRepo ( & config , & autils , client )
2020-08-21 14:49:48 +02:00
if assert . Error ( t , err , "Expected error" ) {
2021-12-20 18:58:58 +02:00
assert . Equal ( t , "Clone of repository / software component 'testRepo1', branch 'testBranch1' failed on the ABAP system: Request to ABAP System not successful" , err . Error ( ) , "Expected different error message" )
2020-08-21 14:49:48 +02:00
}
} )
t . Run ( "Trigger Clone Error" , func ( t * testing . T ) {
var autils = abaputils . AUtilsMock { }
defer autils . Cleanup ( )
autils . ReturnedConnectionDetailsHTTP . Password = "password"
autils . ReturnedConnectionDetailsHTTP . User = "user"
autils . ReturnedConnectionDetailsHTTP . URL = "https://example.com"
autils . ReturnedConnectionDetailsHTTP . XCsrfToken = "xcsrftoken"
config := abapEnvironmentCloneGitRepoOptions {
CfAPIEndpoint : "https://api.endpoint.com" ,
CfOrg : "testOrg" ,
CfSpace : "testSpace" ,
CfServiceInstance : "testInstance" ,
CfServiceKeyName : "testServiceKey" ,
Username : "testUser" ,
Password : "testPassword" ,
RepositoryName : "testRepo1" ,
BranchName : "testBranch1" ,
}
client := & abaputils . ClientMock {
BodyList : [ ] string {
` { "d" : { } } ` ,
` { "d" : { "status" : "R" } } ` ,
} ,
Token : "myToken" ,
StatusCode : 200 ,
}
2021-08-04 17:31:16 +02:00
err := runAbapEnvironmentCloneGitRepo ( & config , & autils , client )
2020-08-21 14:49:48 +02:00
if assert . Error ( t , err , "Expected error" ) {
2021-12-20 18:58:58 +02:00
assert . Equal ( t , "Clone of repository / software component 'testRepo1', branch 'testBranch1' failed on the ABAP system: Request to ABAP System not successful" , err . Error ( ) , "Expected different error message" )
2020-08-21 14:49:48 +02:00
}
} )
t . Run ( "Missing file error" , func ( t * testing . T ) {
var autils = abaputils . AUtilsMock { }
defer autils . Cleanup ( )
autils . ReturnedConnectionDetailsHTTP . Password = "password"
autils . ReturnedConnectionDetailsHTTP . User = "user"
autils . ReturnedConnectionDetailsHTTP . URL = "https://example.com"
autils . ReturnedConnectionDetailsHTTP . XCsrfToken = "xcsrftoken"
config := abapEnvironmentCloneGitRepoOptions {
CfAPIEndpoint : "https://api.endpoint.com" ,
CfOrg : "testOrg" ,
CfSpace : "testSpace" ,
CfServiceInstance : "testInstance" ,
CfServiceKeyName : "testServiceKey" ,
Username : "testUser" ,
Password : "testPassword" ,
RepositoryName : "testRepo1" ,
BranchName : "testBranch1" ,
Repositories : "filename.yaml" ,
}
client := & abaputils . ClientMock {
BodyList : [ ] string {
` { "d" : { } } ` ,
` { "d" : { "status" : "R" } } ` ,
} ,
Token : "myToken" ,
StatusCode : 200 ,
}
2021-08-04 17:31:16 +02:00
err := runAbapEnvironmentCloneGitRepo ( & config , & autils , client )
2020-08-21 14:49:48 +02:00
if assert . Error ( t , err , "Expected error" ) {
2020-10-05 14:38:35 +02:00
assert . Equal ( t , "Something failed during the clone: Could not find filename.yaml" , err . Error ( ) , "Expected different error message" )
2020-08-21 14:49:48 +02:00
}
} )
}