2023-05-03 18:02:11 +02:00
|
|
|
//go:build unit
|
|
|
|
// +build unit
|
|
|
|
|
2020-05-18 21:39:35 +02:00
|
|
|
package cmd
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
2020-07-23 20:20:07 +02:00
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
2020-05-18 21:39:35 +02:00
|
|
|
)
|
|
|
|
|
2021-05-10 14:05:21 +02:00
|
|
|
func TestGctsPullByCommitSuccess(t *testing.T) {
|
2020-05-18 21:39:35 +02:00
|
|
|
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("deploy latest commit", func(t *testing.T) {
|
|
|
|
|
|
|
|
httpClient := httpMockGcts{StatusCode: 200, ResponseBody: `{
|
|
|
|
"trkorr": "SIDK1234567",
|
|
|
|
"fromCommit": "f1cdb6a032c1d8187c0990b51e94e8d8bb9898b2",
|
|
|
|
"toCommit": "f1cdb6a032c1d8187c0990b51e94e8d8bb9898b2",
|
|
|
|
"log": [
|
|
|
|
{
|
|
|
|
"time": 20180606130524,
|
|
|
|
"user": "JENKINS",
|
|
|
|
"section": "REPOSITORY_FACTORY",
|
|
|
|
"action": "CREATE_REPOSITORY",
|
|
|
|
"severity": "INFO",
|
|
|
|
"message": "Start action CREATE_REPOSITORY review",
|
|
|
|
"code": "GCTS.API.410"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}`}
|
|
|
|
|
2021-05-10 14:05:21 +02:00
|
|
|
err := pullByCommit(&config, nil, nil, &httpClient)
|
2020-05-18 21:39:35 +02:00
|
|
|
|
|
|
|
if assert.NoError(t, err) {
|
|
|
|
|
|
|
|
t.Run("check url", func(t *testing.T) {
|
2021-05-10 14:05:21 +02:00
|
|
|
assert.Equal(t, "http://testHost.com:50000/sap/bc/cts_abapvcs/repository/testRepo/pullByCommit?sap-client=000&request=", httpClient.URL)
|
2020-05-18 21:39:35 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("check method", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "GET", httpClient.Method)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("check user", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "testUser", httpClient.Options.Username)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("check password", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "testPassword", httpClient.Options.Password)
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-05-10 14:05:21 +02:00
|
|
|
func TestGctsPullByCommitFailure(t *testing.T) {
|
2020-05-18 21:39:35 +02:00
|
|
|
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("http error occurred", func(t *testing.T) {
|
|
|
|
|
|
|
|
httpClient := httpMockGcts{StatusCode: 500, ResponseBody: `{
|
2021-05-10 14:05:21 +02:00
|
|
|
"exception": "No relation between system and repository"
|
|
|
|
}`}
|
|
|
|
|
|
|
|
err := pullByCommit(&config, nil, nil, &httpClient)
|
|
|
|
|
|
|
|
assert.EqualError(t, err, "a http error occurred")
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsGetRepositorySuccess(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
t.Run("Get Repository Success Test", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepo" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 200, ResponseBody: `{
|
|
|
|
"result": {
|
|
|
|
"rid": "testrepo",
|
|
|
|
"name": "testRepo",
|
|
|
|
"role": "SOURCE",
|
|
|
|
"type": "GIT",
|
|
|
|
"vsid": "GIT",
|
|
|
|
"status": "READY",
|
|
|
|
"branch": "dummy_branch",
|
|
|
|
"url": "https://example.git.com/testRepo",
|
|
|
|
"createdBy": "testUser",
|
|
|
|
"createdDate": "dummy_date",
|
|
|
|
"config": [
|
|
|
|
{
|
|
|
|
"key": "CURRENT_COMMIT",
|
|
|
|
"value": "dummy_commit_number",
|
|
|
|
"category": "GENERAL",
|
|
|
|
"scope": "local"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"objects": 1,
|
|
|
|
"currentCommit": "dummy_commit_number",
|
|
|
|
"connection": "ssl"
|
2020-05-18 21:39:35 +02:00
|
|
|
}
|
2021-05-10 14:05:21 +02:00
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
repository, err := getRepository(&config, &httpClient)
|
|
|
|
|
|
|
|
if assert.NoError(t, err) {
|
|
|
|
t.Run("check url", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "https://example.git.com/testRepo", repository.Result.Url)
|
|
|
|
})
|
|
|
|
t.Run("check rid", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "testrepo", repository.Result.Rid)
|
|
|
|
})
|
|
|
|
t.Run("check commit id", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "dummy_commit_number", repository.Result.CurrentCommit)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsGetRepositoryFailure(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepoNotExists",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
t.Run("Get Repository Success Test", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepoNotExists" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 500, ResponseBody: `{
|
|
|
|
"exception": "No relation between system and repository"
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err := getRepository(&config, &httpClient)
|
|
|
|
|
|
|
|
assert.EqualError(t, err, "a http error occurred")
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsSwitchBranchSuccess(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Branch: "dummyBranch",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("Switch Branch success", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Branch == "dummyBranch" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 200, ResponseBody: `{
|
|
|
|
"result": {
|
|
|
|
"rid": "testrepo",
|
|
|
|
"checkoutTime": 20210413082242,
|
|
|
|
"fromCommit": "from_dummy_commit",
|
|
|
|
"toCommit": "to_dummy_commit",
|
|
|
|
"caller": "testUser",
|
|
|
|
"request": "GITKUKDUMMY",
|
|
|
|
"type": "BRANCH_SW",
|
|
|
|
"state": "DONE",
|
|
|
|
"rc": "0000"
|
|
|
|
}
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
responseBody, err := switchBranch(&config, &httpClient, "dummyCurrentBranch", "dummyTargetBranch")
|
|
|
|
|
|
|
|
if assert.NoError(t, err) {
|
|
|
|
t.Run("check from commit", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "from_dummy_commit", responseBody.Result.FromCommit)
|
|
|
|
})
|
|
|
|
t.Run("check to commit", func(t *testing.T) {
|
|
|
|
assert.Equal(t, "to_dummy_commit", responseBody.Result.ToCommit)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsSwitchBranchFailure(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Branch: "dummyBranchNotExists",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
t.Run("Switch Branch failure Test", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Branch == "dummyBranchNotExists" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 500, ResponseBody: `{
|
|
|
|
"errorLog": [
|
|
|
|
{
|
|
|
|
"time": 20210414102742,
|
|
|
|
"severity": "ERROR",
|
|
|
|
"message": "The branch to switch to - 'feature1' - does not exist",
|
|
|
|
"code": "GCTS.CLIENT.1320"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"log": [
|
|
|
|
{
|
|
|
|
"time": 20210414102742,
|
|
|
|
"user": "testUser",
|
|
|
|
"section": "REPOSITORY",
|
|
|
|
"action": "SWITCH_BRANCH",
|
|
|
|
"severity": "ERROR",
|
|
|
|
"message": "20210414102742: Error action SWITCH_BRANCH 20210414_102740_B4EC329722B5C611B35B345F3B5F8FAA"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"time": 20210414102742,
|
|
|
|
"user": "testUser",
|
|
|
|
"section": "REPOSITORY",
|
|
|
|
"action": "SWITCH_BRANCH",
|
|
|
|
"severity": "ERROR",
|
|
|
|
"message": "20210414102742: Error action SWITCH_BRANCH Client error"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"exception": "Cannot switch branch of local repository to selected branch."
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err := getRepository(&config, &httpClient)
|
|
|
|
|
|
|
|
assert.EqualError(t, err, "a http error occurred")
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCreateRepositorySuccess(t *testing.T) {
|
|
|
|
config := gctsCreateRepositoryOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
RemoteRepositoryURL: "http://testRepoUrl.com",
|
|
|
|
Role: "dummyRole",
|
|
|
|
VSID: "dummyVsid",
|
|
|
|
Type: "dummyType",
|
|
|
|
}
|
|
|
|
t.Run("Create Repository Success", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepo" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 200, ResponseBody: `{
|
|
|
|
"repository": {
|
|
|
|
"rid": "testrepo",
|
|
|
|
"name": "testRepo",
|
|
|
|
"role": "dummyRole",
|
|
|
|
"type": "dummyType",
|
|
|
|
"vsid": "dummyVsid",
|
|
|
|
"status": "CREATED",
|
|
|
|
"branch": "dummyBranch",
|
|
|
|
"url": "http://testRepoUrl.com",
|
|
|
|
"createdBy": "testUser",
|
|
|
|
"createdDate": "2021-04-14",
|
|
|
|
"config": [
|
|
|
|
{
|
|
|
|
"key": "CLIENT_VCS_CONNTYPE",
|
|
|
|
"value": "ssl",
|
|
|
|
"category": "CONNECTION",
|
|
|
|
"scope": "local"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"key": "CLIENT_VCS_URI",
|
|
|
|
"value": "http://testRepoUrl.com",
|
|
|
|
"category": "CONNECTION",
|
|
|
|
"scope": "local"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"connection": "ssl"
|
|
|
|
}
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
err := createRepositoryForDeploy(&config, nil, nil, &httpClient, nil)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCreateRepositoryFailure(t *testing.T) {
|
|
|
|
config := gctsCreateRepositoryOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepoExists",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
RemoteRepositoryURL: "http://testRepoUrlFail.com",
|
|
|
|
Role: "dummyRole",
|
|
|
|
VSID: "dummyVsid",
|
|
|
|
Type: "dummyType",
|
|
|
|
}
|
|
|
|
t.Run("Create Repository Failure", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepoExists" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 500, ResponseBody: `{
|
|
|
|
"errorLog": [
|
|
|
|
{
|
|
|
|
"time": 20210506153611,
|
|
|
|
"user": "testUser",
|
|
|
|
"section": "SYSTEM",
|
2020-05-18 21:39:35 +02:00
|
|
|
"action": "CREATE_REPOSITORY",
|
2021-05-10 14:05:21 +02:00
|
|
|
"severity": "ERROR",
|
|
|
|
"message": "20210506153611: Error action CREATE_REPOSITORY Repository already exists"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"log": [
|
|
|
|
{
|
|
|
|
"time": 20210506153611,
|
|
|
|
"user": "testUser",
|
|
|
|
"section": "SYSTEM",
|
|
|
|
"action": "CREATE_REPOSITORY",
|
|
|
|
"severity": "ERROR",
|
|
|
|
"message": "20210506153611: Error action CREATE_REPOSITORY Repository already exists"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"exception": "Some Error"
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
err := createRepositoryForDeploy(&config, nil, nil, &httpClient, nil)
|
|
|
|
assert.EqualError(t, err, "creating repository on the ABAP system http://testHost.com:50000 failed: a http error occurred")
|
|
|
|
})
|
|
|
|
t.Run("Create Repository Failure", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepoExists" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 500, ResponseBody: `{
|
|
|
|
"errorLog": [
|
|
|
|
{
|
|
|
|
"time": 20210506153611,
|
|
|
|
"user": "testUser",
|
|
|
|
"section": "SYSTEM",
|
|
|
|
"action": "CREATE_REPOSITORY",
|
|
|
|
"severity": "ERROR",
|
|
|
|
"message": "20210506153611: Error action CREATE_REPOSITORY Repository already exists"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"log": [
|
|
|
|
{
|
|
|
|
"time": 20210506153611,
|
|
|
|
"user": "testUser",
|
|
|
|
"section": "SYSTEM",
|
|
|
|
"action": "CREATE_REPOSITORY",
|
|
|
|
"severity": "ERROR",
|
|
|
|
"message": "20210506153611: Error action CREATE_REPOSITORY Repository already exists"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"exception": "Repository already exists"
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
err := createRepositoryForDeploy(&config, nil, nil, &httpClient, nil)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsSetConfigByKeySuccess(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Branch: "dummyBranch",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
configKey := setConfigKeyBody{
|
|
|
|
Key: "dummy_key",
|
|
|
|
Value: "dummy_value",
|
|
|
|
}
|
|
|
|
t.Run("Set Config By key Success", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepo" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 200, ResponseBody: `{
|
|
|
|
"result": {
|
|
|
|
"key": "dummy_key",
|
|
|
|
"value": "dummy_value"
|
2020-05-18 21:39:35 +02:00
|
|
|
}
|
2021-05-10 14:05:21 +02:00
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
err := setConfigKey(&config, &httpClient, &configKey)
|
|
|
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsSetConfigByKeyFailure(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepoNotExists",
|
|
|
|
Branch: "dummyBranchNotExists",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
configKey := setConfigKeyBody{
|
|
|
|
Key: "dummy_key",
|
|
|
|
Value: "dummy_value",
|
|
|
|
}
|
|
|
|
t.Run("Set Config By key Success", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepoNotExists" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 500, ResponseBody: `{
|
|
|
|
"exception": "No relation between system and repository"
|
|
|
|
}`}
|
|
|
|
}
|
2020-05-18 21:39:35 +02:00
|
|
|
|
2021-05-10 14:05:21 +02:00
|
|
|
err := setConfigKey(&config, &httpClient, &configKey)
|
2020-05-18 21:39:35 +02:00
|
|
|
|
|
|
|
assert.EqualError(t, err, "a http error occurred")
|
2021-05-10 14:05:21 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsDeleteConfigByKeySuccess(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Branch: "dummyBranch",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
t.Run("Delete Config By key Success", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepo" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 200, ResponseBody: `{
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
err := deleteConfigKey(&config, &httpClient, "dummy_config")
|
|
|
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
})
|
2020-05-18 21:39:35 +02:00
|
|
|
|
2021-05-10 14:05:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsDeleteConfigByKeyFailure(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepoNotExists",
|
|
|
|
Branch: "dummyBranchNotExists",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
t.Run("Delete Config By key Failure", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepoNotExists" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 500, ResponseBody: `{
|
|
|
|
"exception": "No relation between system and repository"
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
err := deleteConfigKey(&config, &httpClient, "dummy_config")
|
|
|
|
|
|
|
|
assert.EqualError(t, err, "a http error occurred")
|
2020-05-18 21:39:35 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
}
|
2021-05-10 14:05:21 +02:00
|
|
|
|
|
|
|
func TestGctsConfigMetadataSuccess(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Branch: "dummyBranch",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
t.Run("Test Config Metadata Success", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepo" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 200, ResponseBody: `{
|
|
|
|
"config": [
|
|
|
|
{
|
|
|
|
"ckey": "dummy_key_system",
|
|
|
|
"ctype": "SYSTEM",
|
|
|
|
"cvisible": "X",
|
|
|
|
"datatype": "STRING",
|
|
|
|
"defaultValue": "dummy_default_system",
|
|
|
|
"description": "Dummy Key System",
|
|
|
|
"category": "SYSTEM",
|
|
|
|
"example": "dummy"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"ckey": "dummy_key_repo",
|
|
|
|
"ctype": "REPOSITORY",
|
|
|
|
"cvisible": "X",
|
|
|
|
"datatype": "STRING",
|
|
|
|
"defaultValue": "dummy_default",
|
|
|
|
"description": "Dummy Key repository",
|
|
|
|
"category": "INTERNAL",
|
|
|
|
"example": "dummy"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
configMetadata, err := getConfigurationMetadata(&config, &httpClient)
|
|
|
|
|
|
|
|
if assert.NoError(t, err) {
|
|
|
|
t.Run("Check if system config matches", func(t *testing.T) {
|
|
|
|
for _, config := range configMetadata.Config {
|
|
|
|
if config.Ctype == "SYSTEM" {
|
|
|
|
assert.Equal(t, "dummy_key_system", config.Ckey)
|
|
|
|
} else if config.Ctype == "REPOSITORY" {
|
|
|
|
assert.Equal(t, "dummy_key_repo", config.Ckey)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsConfigMetadataFailure(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHostNotregistered.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Branch: "dummyBranch",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
}
|
|
|
|
t.Run("Test Config Metadata Failure", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Host == "http://testHostNotregistered.com:50000" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 500, ResponseBody: `{
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err := getConfigurationMetadata(&config, &httpClient)
|
|
|
|
|
|
|
|
assert.EqualError(t, err, "a http error occurred")
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestDeployToAbapSystemSuccess(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepo",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
Scope: "dummyScope",
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("Deploy to ABAP system sucess", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepo" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 200, ResponseBody: `{
|
|
|
|
"result": {
|
|
|
|
"rid": "testrepo",
|
|
|
|
"name": "testRepo",
|
|
|
|
"role": "dummyRole",
|
|
|
|
"type": "dummyType",
|
|
|
|
"vsid": "dummyVsid",
|
|
|
|
"status": "CREATED",
|
|
|
|
"branch": "dummyBranch",
|
|
|
|
"url": "http://testRepoUrl.com",
|
|
|
|
"createdBy": "testUser",
|
|
|
|
"createdDate": "2021-04-14",
|
|
|
|
"config": [
|
|
|
|
{
|
|
|
|
"key": "CLIENT_VCS_CONNTYPE",
|
|
|
|
"value": "ssl",
|
|
|
|
"category": "CONNECTION",
|
|
|
|
"scope": "local"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"key": "CLIENT_VCS_URI",
|
|
|
|
"value": "http://testRepoUrl.com",
|
|
|
|
"category": "CONNECTION",
|
|
|
|
"scope": "local"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"connection": "ssl"
|
|
|
|
}
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
err := deployCommitToAbapSystem(&config, &httpClient)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsDeployToAbapSystemFailure(t *testing.T) {
|
|
|
|
config := gctsDeployOptions{
|
|
|
|
Host: "http://testHost.com:50000",
|
|
|
|
Client: "000",
|
|
|
|
Repository: "testRepoNotExists",
|
|
|
|
Username: "testUser",
|
|
|
|
Password: "testPassword",
|
|
|
|
Scope: "dummyScope",
|
|
|
|
}
|
|
|
|
t.Run("Deploy to ABAP system Failure", func(t *testing.T) {
|
|
|
|
var httpClient httpMockGcts
|
|
|
|
if config.Repository == "testRepoNotExists" {
|
|
|
|
httpClient = httpMockGcts{StatusCode: 500, ResponseBody: `{
|
|
|
|
"exception": "No relation between system and repository"
|
|
|
|
}`}
|
|
|
|
}
|
|
|
|
|
|
|
|
err := deployCommitToAbapSystem(&config, &httpClient)
|
|
|
|
|
|
|
|
assert.EqualError(t, err, "a http error occurred")
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGctsSplitConfigurationToMap(t *testing.T) {
|
|
|
|
config := []configMetadata{
|
|
|
|
{
|
|
|
|
Ckey: "dummyKey1",
|
|
|
|
Ctype: "REPOSITORY",
|
|
|
|
Datatype: "BOOLEAN",
|
|
|
|
Example: "X",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Ckey: "dummyKey2",
|
|
|
|
Ctype: "REPOSITORY",
|
|
|
|
Datatype: "BOOLEAN",
|
|
|
|
Example: "true",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Ckey: "dummyKey3",
|
|
|
|
Ctype: "REPOSITORY",
|
|
|
|
Datatype: "STRING",
|
|
|
|
Example: "dummyValue",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
configMetadata := configurationMetadataBody{
|
|
|
|
Config: config,
|
|
|
|
}
|
|
|
|
|
|
|
|
configMap := map[string]interface{}{
|
|
|
|
"dummyKey1": "true",
|
|
|
|
"dummyKey2": "true",
|
|
|
|
"dummyKey3": "dummyValue2",
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("Config Mapping test", func(t *testing.T) {
|
|
|
|
repoConfig, err := splitConfigurationToMap(configMap, configMetadata)
|
|
|
|
|
|
|
|
if assert.NoError(t, err) {
|
|
|
|
for _, config := range repoConfig {
|
|
|
|
if config.Key == "dummyKey1" {
|
|
|
|
assert.Equal(t, "X", config.Value)
|
|
|
|
} else if config.Key == "dummyKey2" {
|
|
|
|
assert.Equal(t, "true", config.Value)
|
|
|
|
} else if config.Key == "dummyKey3" {
|
|
|
|
assert.Equal(t, "dummyValue2", config.Value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|