1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-16 11:09:33 +02:00
sap-jenkins-library/pkg/cloudfoundry/CloudFoundry_test.go
2020-09-24 08:58:53 +02:00

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)
})
}