Skip to content

Commit

Permalink
move common function to internal/test/e2e
Browse files Browse the repository at this point in the history
  • Loading branch information
Liujingfang1 committed May 22, 2018
1 parent 712c545 commit 81f8918
Show file tree
Hide file tree
Showing 3 changed files with 214 additions and 50 deletions.
145 changes: 145 additions & 0 deletions samples/internal/test/e2e/kubebuildertest.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
package e2e

import (
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
)

type KubebuilderTest struct {
Dir string
}

func NewKubebuilderTest(dir, binDir string) *KubebuilderTest {
kt := KubebuilderTest{Dir: dir}
os.Setenv("TEST_ASSET_KUBECTL", strings.Join([]string{binDir, "kubectl"}, "/"))
os.Setenv("TEST_ASSET_KUBE_APISERVER", strings.Join([]string{binDir, "kube-apiserver"}, "/"))
os.Setenv("TEST_ASSET_ETCD", strings.Join([]string{binDir, "etcd"}, "/"))
return &kt
}

func (kt *KubebuilderTest) Generate(generateOptions []string) error {
generateOptions = append([]string{"generate"}, generateOptions...)
cmd := exec.Command("kubebuilder", generateOptions...)
return kt.runCommand(cmd)
}

func (kt *KubebuilderTest) Docs(docsOptions []string) error {
docsOptions = append([]string{"docs"}, docsOptions...)
cmd := exec.Command("kubebuilder", docsOptions...)
return kt.runCommand(cmd)
}

func (kt *KubebuilderTest) Build() error {
var errs []string
cmd := exec.Command("go", "build", "./pkg/...")
err := kt.runCommand(cmd)
if err != nil {
errs = append(errs, err.Error())
}
cmd = exec.Command("go", "build", "./cmd/...")
err = kt.runCommand(cmd)
if err != nil {
errs = append(errs, err.Error())
}
if len(errs) > 0 {
return fmt.Errorf(strings.Join(errs, "\n"))
}
return nil
}

func (kt *KubebuilderTest) Test() error {
var errs []string
cmd := exec.Command("go", "test", "./pkg/...")
err := kt.runCommand(cmd)
if err != nil {
errs = append(errs, err.Error())
}
cmd = exec.Command("go", "test", "./cmd/...")
err = kt.runCommand(cmd)
if err != nil {
errs = append(errs, err.Error())
}
if len(errs) > 0 {
return fmt.Errorf(strings.Join(errs, "\n"))
}
return nil
}

func (kt *KubebuilderTest) CreateConfig(configOptions []string) error {
configOptions = append([]string{"create", "config"}, configOptions...)
cmd := exec.Command("kubebuilder", configOptions...)
return kt.runCommand(cmd)
}

func (kt *KubebuilderTest) Diff(pathA, pathB string) error {
cmd := exec.Command("diff", pathA, pathB)
return kt.runCommand(cmd)
}

func (kt *KubebuilderTest) DiffAll(generatedDir, expectedDir string) error {
files, err := ioutil.ReadDir(expectedDir)
if err != nil {
return err
}
var errs []string
for _, f := range files {
generatedFile := filepath.Join(generatedDir, f.Name())
if _, err := os.Stat(generatedFile); err != nil {
errs = append(errs, err.Error())
} else {
err = kt.Diff(generatedFile, filepath.Join(expectedDir, f.Name()))
if err != nil {
errs = append(errs, err.Error())
}
}
}
if len(errs) > 0 {
return fmt.Errorf(strings.Join(errs, "\n"))
}
return nil
}

func (kt *KubebuilderTest) DepEnsure() error {
cmd := exec.Command("dep", "ensure")
return kt.runCommand(cmd)
}

func (kt *KubebuilderTest) VendorUpdate() error {
cmd := exec.Command("kubebuilder", "vendor", "update")
return kt.runCommand(cmd)
}

func (kt *KubebuilderTest) CleanUp() error {
var errs []string
cmd := exec.Command("kubebuilder", "generate", "clean")
err := kt.runCommand(cmd)
if err != nil {
errs = append(errs, err.Error())
}
cmd = exec.Command("rm", "-r", "docs")
err = kt.runCommand(cmd)
if err != nil {
errs = append(errs, err.Error())
}
if len(errs) > 0 {
return fmt.Errorf(strings.Join(errs, "\n"))
}
return nil
}

func (kt *KubebuilderTest) runCommand(cmd *exec.Cmd) 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))
}
log.Printf("%s finished successfully", command)
return nil
}
69 changes: 69 additions & 0 deletions samples/memcached-api-server/memcached_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package memcached_test

import (
"os"
"path/filepath"
"runtime"
"testing"
"github.com/kubernetes-sigs/kubebuilder/samples/internal/test/e2e"
)

var kubebuilderTest *e2e.KubebuilderTest

func setup() {
_, filename, _, _ := runtime.Caller(0)
projectDir := filepath.Dir(filename)
kubebuilderBin := "/tmp/kubebuilder/bin"
kubebuilderTest = e2e.NewKubebuilderTest(projectDir, kubebuilderBin)
kubebuilderTest.CleanUp()
}


func TestMain(m *testing.M) {
setup()
code := m.Run()
os.Exit(code)
}

func TestGenerateBuildTest(t *testing.T) {
err := kubebuilderTest.Generate([]string{"--skip-rbac-validation"})
if err != nil {
t.Errorf(err.Error())
}
err = kubebuilderTest.Build()
if err != nil {
t.Errorf(err.Error())
}
err = kubebuilderTest.Test()
if err != nil {
t.Errorf(err.Error())
}
}

func TestDocs(t *testing.T) {
docsOptions := []string{"--docs-copyright", "Hello", "--title", "World", "--cleanup=false", "--brodocs=false"}
err := kubebuilderTest.Docs(docsOptions)
if err != nil {
t.Errorf(err.Error())
}
docsDir := filepath.Join(kubebuilderTest.Dir, "docs")
expectedDocsDir := filepath.Join(kubebuilderTest.Dir, "test", "docs")
err = kubebuilderTest.DiffAll(docsDir, expectedDocsDir)
if err != nil {
t.Errorf(err.Error())
}
}

func TestCreateConfig(t *testing.T) {
configOptions := []string{"--crds"}
err := kubebuilderTest.CreateConfig(configOptions)
if err != nil {
t.Errorf(err.Error())
}
configFile := filepath.Join(kubebuilderTest.Dir, "hack", "install.yaml")
expectedConfigFile := filepath.Join(kubebuilderTest.Dir, "test", "hack", "install.yaml")
err = kubebuilderTest.Diff(configFile, expectedConfigFile)
if err != nil {
t.Errorf(err.Error())
}
}
50 changes: 0 additions & 50 deletions samples/memcached-api-server/test.go

This file was deleted.

0 comments on commit 81f8918

Please sign in to comment.