From 8d744dc4434ec3dbabdc63acf0cd79aa4a255a4a Mon Sep 17 00:00:00 2001 From: lichuqiang Date: Sat, 26 May 2018 11:35:47 +0800 Subject: [PATCH] update kubebuildertest to support extra commands --- test/internal/e2e/kubebuildertest.go | 83 ++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 17 deletions(-) diff --git a/test/internal/e2e/kubebuildertest.go b/test/internal/e2e/kubebuildertest.go index 226af0253b6..f4b22455791 100644 --- a/test/internal/e2e/kubebuildertest.go +++ b/test/internal/e2e/kubebuildertest.go @@ -20,33 +20,56 @@ func NewKubebuilderTest(dir, binDir string) *KubebuilderTest { os.Setenv("TEST_ASSET_KUBE_APISERVER", strings.Join([]string{binDir, "kube-apiserver"}, "/")) os.Setenv("TEST_ASSET_ETCD", strings.Join([]string{binDir, "etcd"}, "/")) cmd := exec.Command("command", "-v", "kubebuilder") - if err := kt.runCommand(cmd); err != nil { - os.Setenv("PATH",strings.Join([]string{binDir, os.Getenv("PATH")}, ":")) + if _, err := kt.runCommand(cmd); err != nil { + os.Setenv("PATH", strings.Join([]string{binDir, os.Getenv("PATH")}, ":")) } return &kt } +func (kt *KubebuilderTest) Init(initOptions []string) error { + initOptions = append([]string{"init"}, initOptions...) + cmd := exec.Command("kubebuilder", initOptions...) + _, err := kt.runCommand(cmd) + return err +} + +func (kt *KubebuilderTest) CreateResource(resourceOptions []string) error { + resourceOptions = append([]string{"create", "resource"}, resourceOptions...) + cmd := exec.Command("kubebuilder", resourceOptions...) + _, err := kt.runCommand(cmd) + return err +} + +func (kt *KubebuilderTest) CreateController(controllerOptions []string) error { + controllerOptions = append([]string{"create", "controller"}, controllerOptions...) + cmd := exec.Command("kubebuilder", controllerOptions...) + _, err := kt.runCommand(cmd) + return err +} + func (kt *KubebuilderTest) Generate(generateOptions []string) error { generateOptions = append([]string{"generate"}, generateOptions...) cmd := exec.Command("kubebuilder", generateOptions...) - return kt.runCommand(cmd) + _, err := kt.runCommand(cmd) + return err } func (kt *KubebuilderTest) Docs(docsOptions []string) error { docsOptions = append([]string{"docs"}, docsOptions...) cmd := exec.Command("kubebuilder", docsOptions...) - return kt.runCommand(cmd) + _, err := kt.runCommand(cmd) + return err } func (kt *KubebuilderTest) Build() error { var errs []string cmd := exec.Command("go", "build", "./pkg/...") - err := kt.runCommand(cmd) + _, err := kt.runCommand(cmd) if err != nil { errs = append(errs, err.Error()) } cmd = exec.Command("go", "build", "./cmd/...") - err = kt.runCommand(cmd) + _, err = kt.runCommand(cmd) if err != nil { errs = append(errs, err.Error()) } @@ -59,12 +82,12 @@ func (kt *KubebuilderTest) Build() error { func (kt *KubebuilderTest) Test() error { var errs []string cmd := exec.Command("go", "test", "./pkg/...") - err := kt.runCommand(cmd) + _, err := kt.runCommand(cmd) if err != nil { errs = append(errs, err.Error()) } cmd = exec.Command("go", "test", "./cmd/...") - err = kt.runCommand(cmd) + _, err = kt.runCommand(cmd) if err != nil { errs = append(errs, err.Error()) } @@ -77,12 +100,29 @@ func (kt *KubebuilderTest) Test() error { func (kt *KubebuilderTest) CreateConfig(configOptions []string) error { configOptions = append([]string{"create", "config"}, configOptions...) cmd := exec.Command("kubebuilder", configOptions...) - return kt.runCommand(cmd) + _, err := kt.runCommand(cmd) + return err +} + +func (kt *KubebuilderTest) BuildImage(imageOptions []string) error { + // TODO: make the Dockerfile path mutable if necessary. + imageOptions = append([]string{"build", ".", "-f", "Dockerfile.controller"}, imageOptions...) + cmd := exec.Command("docker", imageOptions...) + _, err := kt.runCommand(cmd) + return err +} + +func (kt *KubebuilderTest) CleanupImage(imageOptions []string) error { + imageOptions = append([]string{"rmi", "-f"}, imageOptions...) + cmd := exec.Command("docker", imageOptions...) + _, err := kt.runCommand(cmd) + return err } func (kt *KubebuilderTest) Diff(pathA, pathB string) error { cmd := exec.Command("diff", pathA, pathB) - return kt.runCommand(cmd) + _, err := kt.runCommand(cmd) + return err } func (kt *KubebuilderTest) DiffAll(generatedDir, expectedDir string) error { @@ -110,23 +150,25 @@ func (kt *KubebuilderTest) DiffAll(generatedDir, expectedDir string) error { func (kt *KubebuilderTest) DepEnsure() error { cmd := exec.Command("dep", "ensure") - return kt.runCommand(cmd) + _, err := kt.runCommand(cmd) + return err } func (kt *KubebuilderTest) VendorUpdate() error { cmd := exec.Command("kubebuilder", "vendor", "update") - return kt.runCommand(cmd) + _, err := kt.runCommand(cmd) + return err } func (kt *KubebuilderTest) CleanUp() error { var errs []string cmd := exec.Command("kubebuilder", "generate", "clean") - err := kt.runCommand(cmd) + _, err := kt.runCommand(cmd) if err != nil { errs = append(errs, err.Error()) } cmd = exec.Command("rm", "-r", "docs") - err = kt.runCommand(cmd) + _, err = kt.runCommand(cmd) if err != nil { errs = append(errs, err.Error()) } @@ -136,14 +178,21 @@ func (kt *KubebuilderTest) CleanUp() error { return nil } -func (kt *KubebuilderTest) runCommand(cmd *exec.Cmd) error { +// RunKubectlCommand is a general func to run kubectl commands +func (kt *KubebuilderTest) RunKubectlCommand(cmdOptions []string) (string, error) { + cmd := exec.Command("kubectl", cmdOptions...) + output, err := kt.runCommand(cmd) + return string(output), err +} + +func (kt *KubebuilderTest) runCommand(cmd *exec.Cmd) ([]byte, error) { cmd.Dir = kt.Dir cmd.Env = os.Environ() command := strings.Join(cmd.Args, " ") output, err := cmd.Output() if err != nil { - return fmt.Errorf("%s failed with error: %s", command, string(output)) + return output, fmt.Errorf("%s failed with error: %v", command, err) } log.Printf("%s finished successfully", command) - return nil + return output, nil }