1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/pkg/transportrequest/solman/create_test.go
Marcus Holl 0186989593
transport request create solman go (#2583)
* Introduce transport request create solman

* log the transport request id also in case creation failed

maybe there are some rare cases where a transport request id is returned nevertheless.

* report exit code always

* inline parameter

* Provide more parameters in log message, might help with troubleshooting

Co-authored-by: Roland Stengel <r.stengel@sap.com>
2021-03-15 16:44:18 +01:00

100 lines
2.5 KiB
Go

package solman
import (
"bytes"
"fmt"
"github.com/SAP/jenkins-library/pkg/mock"
"github.com/stretchr/testify/assert"
"testing"
)
func TestSolmanCreateTransportRequest(t *testing.T) {
a := CreateAction{
Connection: Connection{
Endpoint: "https://example.org/solman",
User: "me",
Password: "******",
},
ChangeDocumentID: "123",
DevelopmentSystemID: "XXX~EXT_SRV",
CMOpts: []string{"-Dprop1=abc", "-Dprop2=123"},
}
t.Run("straight forward", func(t *testing.T) {
e := getExecMock()
e.StdoutReturn = map[string]string{"^cmclient.*": "ABCK123456"}
examinee := a
transportRequestId, err := examinee.Perform(e)
if assert.NoError(t, err) {
assert.Equal(t, []mock.ExecCall{mock.ExecCall{
Exec: "cmclient",
Params: []string{
"--endpoint", "https://example.org/solman",
"--user", "me",
"--password", "******",
"--backend-type", "SOLMAN",
"create-transport",
"-cID", "123",
"-dID", "XXX~EXT_SRV",
},
}}, e.Calls)
assert.Equal(t, "ABCK123456", transportRequestId)
assert.Equal(t, []string{"CMCLIENT_OPTS=-Dprop1=abc -Dprop2=123"}, e.Env)
}
})
t.Run("fail with error", func(t *testing.T) {
e := getExecMock()
e.ShouldFailOnCommand = map[string]error{"^cmclient.*": fmt.Errorf("creating transport request failed")}
examinee := a
_, err := examinee.Perform(e)
assert.EqualError(t, err, "cannot create transport request: creating transport request failed")
})
t.Run("fail via return code", func(t *testing.T) {
e := getExecMock()
e.ExitCode = 42
examinee := a
_, err := examinee.Perform(e)
assert.EqualError(t, err, "cannot create transport request: create transport request command returned with exit code '42'")
})
t.Run("input missing", func(t *testing.T) {
e := getExecMock()
examinee := a
examinee.Connection = Connection{}
examinee.ChangeDocumentID = ""
_, err := examinee.Perform(e)
if assert.Error(t, err) {
// I don't want to rely on the order of the parameters
assert.Contains(t, err.Error(), "cannot create transport request: the following parameters are not available")
assert.Contains(t, err.Error(), "Connection.Endpoint")
assert.Contains(t, err.Error(), "Connection.User")
assert.Contains(t, err.Error(), "Connection.Password")
assert.Contains(t, err.Error(), "ChangeDocumentID")
assert.Empty(t, e.Calls)
}
})
}
func getExecMock() *mock.ExecMockRunner {
var out bytes.Buffer
e := &mock.ExecMockRunner{}
e.Stdout(&out)
return e
}