aboutsummaryrefslogtreecommitdiffstats
path: root/internal/pkg/testing/testing.go
blob: 4c2afad91cdc34338e95afc40a44181b6268aac8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package testing

import (
	"strings"

	kexec "k8s.io/utils/exec"
	fakeexec "k8s.io/utils/exec/testing"

	"github.com/onsi/gomega"
)

// ExpectedCmd contains properties that the testcase expects a called command
// to have as well as the output that the fake command should return
type ExpectedCmd struct {
	// Cmd should be the command-line string of the executable name and all arguments it is expected to be called with
	Cmd string
	// Output is any stdout output which Cmd should produce
	Output string
	// Stderr is any stderr output which Cmd should produce
	Stderr string
	// Err is any error that should be returned for the invocation of Cmd
	Err error
}

// AddFakeCmd takes the ExpectedCmd and appends its runner function to
// a fake command action list
func AddFakeCmd(fakeCmds []fakeexec.FakeCommandAction, expected *ExpectedCmd) []fakeexec.FakeCommandAction {
	return append(fakeCmds, func(cmd string, args ...string) kexec.Cmd {
		parts := strings.Split(expected.Cmd, " ")
		gomega.Expect(cmd).To(gomega.Equal("/fake-bin/" + parts[0]))
		gomega.Expect(strings.Join(args, " ")).To(gomega.Equal(strings.Join(parts[1:], " ")))
		return &fakeexec.FakeCmd{
			Argv: parts[1:],
			CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{
				func() ([]byte, error) {
					return []byte(expected.Output), expected.Err
				},
			},
			RunScript: []fakeexec.FakeRunAction{
				func() ([]byte, []byte, error) {
					return []byte(expected.Output), []byte(expected.Stderr), expected.Err
				},
			},
		}
	})
}

// AddFakeCmdsNoOutputNoError takes a list of commands and appends those commands
// to the expected command set. The command cannot return any output or error.
func AddFakeCmdsNoOutputNoError(fakeCmds []fakeexec.FakeCommandAction, commands []string) []fakeexec.FakeCommandAction {
	for _, cmd := range commands {
		fakeCmds = AddFakeCmd(fakeCmds, &ExpectedCmd{Cmd: cmd})
	}
	return fakeCmds
}