mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-16 11:09:33 +02:00
223 lines
6.4 KiB
Go
223 lines
6.4 KiB
Go
package cloudfoundry
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/SAP/jenkins-library/pkg/mock"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func loginMockCleanup(m *mock.ExecMockRunner) {
|
|
m.ShouldFailOnCommand = map[string]error{}
|
|
m.StdoutReturn = map[string]string{}
|
|
m.Calls = []mock.ExecCall{}
|
|
}
|
|
|
|
func TestCloudFoundryLoginCheck(t *testing.T) {
|
|
|
|
m := &mock.ExecMockRunner{}
|
|
|
|
t.Run("CF Login check: logged in", func(t *testing.T) {
|
|
|
|
defer loginMockCleanup(m)
|
|
|
|
cfconfig := LoginOptions{
|
|
CfAPIEndpoint: "https://api.endpoint.com",
|
|
}
|
|
cf := CFUtils{Exec: m, loggedIn: true}
|
|
loggedIn, err := cf.LoginCheck(cfconfig)
|
|
if assert.NoError(t, err) {
|
|
assert.True(t, loggedIn)
|
|
}
|
|
})
|
|
|
|
t.Run("CF Login check: not logged in", func(t *testing.T) {
|
|
|
|
defer loginMockCleanup(m)
|
|
|
|
cfconfig := LoginOptions{
|
|
CfAPIEndpoint: "https://api.endpoint.com",
|
|
}
|
|
cf := CFUtils{Exec: m, loggedIn: false}
|
|
loggedIn, err := cf.LoginCheck(cfconfig)
|
|
if assert.NoError(t, err) {
|
|
assert.False(t, loggedIn)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestCloudFoundryLogin(t *testing.T) {
|
|
|
|
m := &mock.ExecMockRunner{}
|
|
|
|
t.Run("CF Login: missing parameter", func(t *testing.T) {
|
|
|
|
defer loginMockCleanup(m)
|
|
|
|
cfconfig := LoginOptions{}
|
|
cf := CFUtils{Exec: m}
|
|
err := cf.Login(cfconfig)
|
|
assert.EqualError(t, err, "Failed to login to Cloud Foundry: Parameters missing. Please provide the Cloud Foundry Endpoint, Org, Space, Username and Password")
|
|
})
|
|
t.Run("CF Login: failure", func(t *testing.T) {
|
|
|
|
defer loginMockCleanup(m)
|
|
|
|
m.ShouldFailOnCommand = map[string]error{"cf login .*": fmt.Errorf("wrong password or account does not exist")}
|
|
|
|
cfconfig := LoginOptions{
|
|
CfAPIEndpoint: "https://api.endpoint.com",
|
|
CfSpace: "testSpace",
|
|
CfOrg: "testOrg",
|
|
Username: "testUser",
|
|
Password: "testPassword",
|
|
}
|
|
|
|
cf := CFUtils{Exec: m}
|
|
err := cf.Login(cfconfig)
|
|
if assert.EqualError(t, err, "Failed to login to Cloud Foundry: wrong password or account does not exist") {
|
|
assert.False(t, cf.loggedIn)
|
|
assert.Equal(t, []mock.ExecCall{
|
|
{Exec: "cf", Params: []string{
|
|
"login",
|
|
"-a", "https://api.endpoint.com",
|
|
"-o", "testOrg",
|
|
"-s", "testSpace",
|
|
"-u", "testUser",
|
|
"-p", "testPassword",
|
|
}},
|
|
}, m.Calls)
|
|
}
|
|
})
|
|
|
|
t.Run("CF Login: success", func(t *testing.T) {
|
|
|
|
defer loginMockCleanup(m)
|
|
|
|
m.StdoutReturn = map[string]string{"cf api:*": "Not logged in"}
|
|
|
|
cfconfig := LoginOptions{
|
|
CfAPIEndpoint: "https://api.endpoint.com",
|
|
CfSpace: "testSpace",
|
|
CfOrg: "testOrg",
|
|
Username: "testUser",
|
|
Password: "testPassword",
|
|
}
|
|
cf := CFUtils{Exec: m}
|
|
err := cf.Login(cfconfig)
|
|
if assert.NoError(t, err) {
|
|
assert.True(t, cf.loggedIn)
|
|
assert.Equal(t, []mock.ExecCall{
|
|
{Exec: "cf", Params: []string{
|
|
"login",
|
|
"-a", "https://api.endpoint.com",
|
|
"-o", "testOrg",
|
|
"-s", "testSpace",
|
|
"-u", "testUser",
|
|
"-p", "testPassword",
|
|
}},
|
|
}, m.Calls)
|
|
}
|
|
})
|
|
|
|
t.Run("CF Login: with additional login options", func(t *testing.T) {
|
|
|
|
defer loginMockCleanup(m)
|
|
|
|
cfconfig := LoginOptions{
|
|
CfAPIEndpoint: "https://api.endpoint.com",
|
|
CfSpace: "testSpace",
|
|
CfOrg: "testOrg",
|
|
Username: "testUser",
|
|
Password: "testPassword",
|
|
CfLoginOpts: []string{
|
|
// should never used in productive environment, but it is useful for rapid prototyping/troubleshooting
|
|
"--skip-ssl-validation",
|
|
"--origin", "ldap",
|
|
},
|
|
}
|
|
cf := CFUtils{Exec: m}
|
|
err := cf.Login(cfconfig)
|
|
if assert.NoError(t, err) {
|
|
assert.True(t, cf.loggedIn)
|
|
assert.Equal(t, []mock.ExecCall{
|
|
{Exec: "cf", Params: []string{
|
|
"login",
|
|
"-a", "https://api.endpoint.com",
|
|
"-o", "testOrg",
|
|
"-s", "testSpace",
|
|
"-u", "testUser",
|
|
"-p", "testPassword",
|
|
"--skip-ssl-validation",
|
|
"--origin", "ldap",
|
|
}},
|
|
}, m.Calls)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestCloudFoundryLogout(t *testing.T) {
|
|
t.Run("CF Logout", func(t *testing.T) {
|
|
cf := CFUtils{Exec: &mock.ExecMockRunner{}, loggedIn: true}
|
|
err := cf.Logout()
|
|
if assert.NoError(t, err) {
|
|
assert.False(t, cf.loggedIn)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestCloudFoundryReadServiceKeyAbapEnvironment(t *testing.T) {
|
|
|
|
t.Run("CF ReadServiceKey", func(t *testing.T) {
|
|
|
|
//given
|
|
m := &mock.ExecMockRunner{}
|
|
defer loginMockCleanup(m)
|
|
|
|
const testURL = "testurl.com"
|
|
const oDataURL = "/sap/opu/odata/sap/MANAGE_GIT_REPOSITORY/Pull"
|
|
const username = "test_user"
|
|
const password = "test_password"
|
|
const serviceKey = `
|
|
cf comment test \n\n
|
|
{"sap.cloud.service":"com.sap.cloud.abap","url": "` + testURL + `" ,"systemid":"H01","abap":{"username":"` + username + `","password":"` + password + `","communication_scenario_id": "SAP_COM_0510","communication_arrangement_id": "SK_I6CBIRFZPPJDKYNATQA32W","communication_system_id": "SK_I6CBIRFZPPJDKYNATQA32W","communication_inbound_user_id": "CC0000000001","communication_inbound_user_auth_mode": "2"},"binding":{"env": "cf","version": "0.0.1.1","type": "basic","id": "i6cBiRfZppJdKynaTqa32W"},"preserve_host_header": true}`
|
|
|
|
m.StdoutReturn = map[string]string{"cf service-key testInstance testServiceKeyName": serviceKey}
|
|
|
|
cfconfig := ServiceKeyOptions{
|
|
CfAPIEndpoint: "https://api.endpoint.com",
|
|
CfSpace: "testSpace",
|
|
CfOrg: "testOrg",
|
|
CfServiceInstance: "testInstance",
|
|
CfServiceKeyName: "testServiceKeyName",
|
|
Username: "testUser",
|
|
Password: "testPassword",
|
|
}
|
|
|
|
//when
|
|
var err error
|
|
var abapServiceKey string
|
|
cf := CFUtils{Exec: m}
|
|
|
|
abapServiceKey, err = cf.ReadServiceKey(cfconfig)
|
|
|
|
//then
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, []mock.ExecCall{
|
|
{Exec: "cf", Params: []string{
|
|
"login",
|
|
"-a", "https://api.endpoint.com",
|
|
"-o", "testOrg",
|
|
"-s", "testSpace",
|
|
"-u", "testUser",
|
|
"-p", "testPassword",
|
|
}},
|
|
{Exec: "cf", Params: []string{"service-key", "testInstance", "testServiceKeyName"}},
|
|
{Exec: "cf", Params: []string{"logout"}},
|
|
}, m.Calls)
|
|
}
|
|
assert.Equal(t, ` {"sap.cloud.service":"com.sap.cloud.abap","url": "`+testURL+`" ,"systemid":"H01","abap":{"username":"`+username+`","password":"`+password+`","communication_scenario_id": "SAP_COM_0510","communication_arrangement_id": "SK_I6CBIRFZPPJDKYNATQA32W","communication_system_id": "SK_I6CBIRFZPPJDKYNATQA32W","communication_inbound_user_id": "CC0000000001","communication_inbound_user_auth_mode": "2"},"binding":{"env": "cf","version": "0.0.1.1","type": "basic","id": "i6cBiRfZppJdKynaTqa32W"},"preserve_host_header": true}`, abapServiceKey)
|
|
})
|
|
}
|