Skip to content

Commit 81f8918

Browse files
committed
move common function to internal/test/e2e
1 parent 712c545 commit 81f8918

File tree

3 files changed

+214
-50
lines changed

3 files changed

+214
-50
lines changed
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
package e2e
2+
3+
import (
4+
"fmt"
5+
"io/ioutil"
6+
"log"
7+
"os"
8+
"os/exec"
9+
"path/filepath"
10+
"strings"
11+
)
12+
13+
type KubebuilderTest struct {
14+
Dir string
15+
}
16+
17+
func NewKubebuilderTest(dir, binDir string) *KubebuilderTest {
18+
kt := KubebuilderTest{Dir: dir}
19+
os.Setenv("TEST_ASSET_KUBECTL", strings.Join([]string{binDir, "kubectl"}, "/"))
20+
os.Setenv("TEST_ASSET_KUBE_APISERVER", strings.Join([]string{binDir, "kube-apiserver"}, "/"))
21+
os.Setenv("TEST_ASSET_ETCD", strings.Join([]string{binDir, "etcd"}, "/"))
22+
return &kt
23+
}
24+
25+
func (kt *KubebuilderTest) Generate(generateOptions []string) error {
26+
generateOptions = append([]string{"generate"}, generateOptions...)
27+
cmd := exec.Command("kubebuilder", generateOptions...)
28+
return kt.runCommand(cmd)
29+
}
30+
31+
func (kt *KubebuilderTest) Docs(docsOptions []string) error {
32+
docsOptions = append([]string{"docs"}, docsOptions...)
33+
cmd := exec.Command("kubebuilder", docsOptions...)
34+
return kt.runCommand(cmd)
35+
}
36+
37+
func (kt *KubebuilderTest) Build() error {
38+
var errs []string
39+
cmd := exec.Command("go", "build", "./pkg/...")
40+
err := kt.runCommand(cmd)
41+
if err != nil {
42+
errs = append(errs, err.Error())
43+
}
44+
cmd = exec.Command("go", "build", "./cmd/...")
45+
err = kt.runCommand(cmd)
46+
if err != nil {
47+
errs = append(errs, err.Error())
48+
}
49+
if len(errs) > 0 {
50+
return fmt.Errorf(strings.Join(errs, "\n"))
51+
}
52+
return nil
53+
}
54+
55+
func (kt *KubebuilderTest) Test() error {
56+
var errs []string
57+
cmd := exec.Command("go", "test", "./pkg/...")
58+
err := kt.runCommand(cmd)
59+
if err != nil {
60+
errs = append(errs, err.Error())
61+
}
62+
cmd = exec.Command("go", "test", "./cmd/...")
63+
err = kt.runCommand(cmd)
64+
if err != nil {
65+
errs = append(errs, err.Error())
66+
}
67+
if len(errs) > 0 {
68+
return fmt.Errorf(strings.Join(errs, "\n"))
69+
}
70+
return nil
71+
}
72+
73+
func (kt *KubebuilderTest) CreateConfig(configOptions []string) error {
74+
configOptions = append([]string{"create", "config"}, configOptions...)
75+
cmd := exec.Command("kubebuilder", configOptions...)
76+
return kt.runCommand(cmd)
77+
}
78+
79+
func (kt *KubebuilderTest) Diff(pathA, pathB string) error {
80+
cmd := exec.Command("diff", pathA, pathB)
81+
return kt.runCommand(cmd)
82+
}
83+
84+
func (kt *KubebuilderTest) DiffAll(generatedDir, expectedDir string) error {
85+
files, err := ioutil.ReadDir(expectedDir)
86+
if err != nil {
87+
return err
88+
}
89+
var errs []string
90+
for _, f := range files {
91+
generatedFile := filepath.Join(generatedDir, f.Name())
92+
if _, err := os.Stat(generatedFile); err != nil {
93+
errs = append(errs, err.Error())
94+
} else {
95+
err = kt.Diff(generatedFile, filepath.Join(expectedDir, f.Name()))
96+
if err != nil {
97+
errs = append(errs, err.Error())
98+
}
99+
}
100+
}
101+
if len(errs) > 0 {
102+
return fmt.Errorf(strings.Join(errs, "\n"))
103+
}
104+
return nil
105+
}
106+
107+
func (kt *KubebuilderTest) DepEnsure() error {
108+
cmd := exec.Command("dep", "ensure")
109+
return kt.runCommand(cmd)
110+
}
111+
112+
func (kt *KubebuilderTest) VendorUpdate() error {
113+
cmd := exec.Command("kubebuilder", "vendor", "update")
114+
return kt.runCommand(cmd)
115+
}
116+
117+
func (kt *KubebuilderTest) CleanUp() error {
118+
var errs []string
119+
cmd := exec.Command("kubebuilder", "generate", "clean")
120+
err := kt.runCommand(cmd)
121+
if err != nil {
122+
errs = append(errs, err.Error())
123+
}
124+
cmd = exec.Command("rm", "-r", "docs")
125+
err = kt.runCommand(cmd)
126+
if err != nil {
127+
errs = append(errs, err.Error())
128+
}
129+
if len(errs) > 0 {
130+
return fmt.Errorf(strings.Join(errs, "\n"))
131+
}
132+
return nil
133+
}
134+
135+
func (kt *KubebuilderTest) runCommand(cmd *exec.Cmd) error {
136+
cmd.Dir = kt.Dir
137+
cmd.Env = os.Environ()
138+
command := strings.Join(cmd.Args, " ")
139+
output, err := cmd.Output()
140+
if err != nil {
141+
return fmt.Errorf("%s failed with error: %s", command, string(output))
142+
}
143+
log.Printf("%s finished successfully", command)
144+
return nil
145+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package memcached_test
2+
3+
import (
4+
"os"
5+
"path/filepath"
6+
"runtime"
7+
"testing"
8+
"github.com/kubernetes-sigs/kubebuilder/samples/internal/test/e2e"
9+
)
10+
11+
var kubebuilderTest *e2e.KubebuilderTest
12+
13+
func setup() {
14+
_, filename, _, _ := runtime.Caller(0)
15+
projectDir := filepath.Dir(filename)
16+
kubebuilderBin := "/tmp/kubebuilder/bin"
17+
kubebuilderTest = e2e.NewKubebuilderTest(projectDir, kubebuilderBin)
18+
kubebuilderTest.CleanUp()
19+
}
20+
21+
22+
func TestMain(m *testing.M) {
23+
setup()
24+
code := m.Run()
25+
os.Exit(code)
26+
}
27+
28+
func TestGenerateBuildTest(t *testing.T) {
29+
err := kubebuilderTest.Generate([]string{"--skip-rbac-validation"})
30+
if err != nil {
31+
t.Errorf(err.Error())
32+
}
33+
err = kubebuilderTest.Build()
34+
if err != nil {
35+
t.Errorf(err.Error())
36+
}
37+
err = kubebuilderTest.Test()
38+
if err != nil {
39+
t.Errorf(err.Error())
40+
}
41+
}
42+
43+
func TestDocs(t *testing.T) {
44+
docsOptions := []string{"--docs-copyright", "Hello", "--title", "World", "--cleanup=false", "--brodocs=false"}
45+
err := kubebuilderTest.Docs(docsOptions)
46+
if err != nil {
47+
t.Errorf(err.Error())
48+
}
49+
docsDir := filepath.Join(kubebuilderTest.Dir, "docs")
50+
expectedDocsDir := filepath.Join(kubebuilderTest.Dir, "test", "docs")
51+
err = kubebuilderTest.DiffAll(docsDir, expectedDocsDir)
52+
if err != nil {
53+
t.Errorf(err.Error())
54+
}
55+
}
56+
57+
func TestCreateConfig(t *testing.T) {
58+
configOptions := []string{"--crds"}
59+
err := kubebuilderTest.CreateConfig(configOptions)
60+
if err != nil {
61+
t.Errorf(err.Error())
62+
}
63+
configFile := filepath.Join(kubebuilderTest.Dir, "hack", "install.yaml")
64+
expectedConfigFile := filepath.Join(kubebuilderTest.Dir, "test", "hack", "install.yaml")
65+
err = kubebuilderTest.Diff(configFile, expectedConfigFile)
66+
if err != nil {
67+
t.Errorf(err.Error())
68+
}
69+
}

samples/memcached-api-server/test.go

Lines changed: 0 additions & 50 deletions
This file was deleted.

0 commit comments

Comments
 (0)