From 4ac40fada2aa36ae7aa375d6a13289f6e121c47d Mon Sep 17 00:00:00 2001 From: Adam Reese Date: Fri, 16 Mar 2018 13:21:22 -0700 Subject: [PATCH] ref(tests): remove generator from functional tests (#377) --- Makefile | 12 ++--- tests/cmd/generate.go | 101 ------------------------------------------ tests/tests_test.go | 97 +++++++++++++++++++++++++++++++++------- 3 files changed, 84 insertions(+), 126 deletions(-) delete mode 100644 tests/cmd/generate.go diff --git a/Makefile b/Makefile index 0b76cd17d..57b5b6dca 100644 --- a/Makefile +++ b/Makefile @@ -91,17 +91,13 @@ test-unit: vendor # # This will clone the github.com/deis/empty-testbed repo and run the brigade.js # file found there. -.PHONY: test-functional -test-functional: vendor test-functional-prepare -test-functional: - go test --tags integration ./tests - # Test Repo is https://github.com/deis/empty-testbed TEST_REPO_COMMIT = 589e15029e1e44dee48de4800daf1f78e64287c0 KUBECONFIG ?= ${HOME}/.kube/config -.PHONY: test-functional-prepare -test-functional-prepare: - go run ./tests/cmd/generate.go -kubeconfig $(KUBECONFIG) $(TEST_REPO_COMMIT) +.PHONY: test-functional +test-functional: vendor +test-functional: + go test --tags integration ./tests -kubeconfig $(KUBECONFIG) $(TEST_REPO_COMMIT) # JS test is local only .PHONY: test-js diff --git a/tests/cmd/generate.go b/tests/cmd/generate.go deleted file mode 100644 index f86cd1a34..000000000 --- a/tests/cmd/generate.go +++ /dev/null @@ -1,101 +0,0 @@ -// +build integration - -package main - -import ( - "encoding/json" - "flag" - "fmt" - "io/ioutil" - "os" - - "github.com/google/go-github/github" - "k8s.io/api/core/v1" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/tools/clientcmd" - - "github.com/Azure/brigade/pkg/storage/kube" - "github.com/Azure/brigade/pkg/webhook" -) - -var ( - kubeconfig string - master string - namespace string -) - -func init() { - flag.StringVar(&kubeconfig, "kubeconfig", "", "absolute path to the kubeconfig file") - flag.StringVar(&master, "master", "", "master url") - flag.StringVar(&namespace, "namespace", os.Getenv("BRIGADE_NAMESPACE"), "kubernetes namespace") -} - -func getKubeClient() (*kubernetes.Clientset, error) { - // creates the connection - config, err := clientcmd.BuildConfigFromFlags(master, kubeconfig) - if err != nil { - return nil, err - } - - // creates the clientset - return kubernetes.NewForConfig(config) -} - -func main() { - flag.Parse() - - if flag.NArg() < 1 { - fmt.Fprintln(os.Stderr, "required arg: Git SHA") - os.Exit(1) - } - commit := flag.Arg(0) - - eventType := "push" - - data, err := ioutil.ReadFile("./tests/testdata/test-repo-push.json") - if err != nil { - panic(err) - } - - event, err := github.ParseWebHook(eventType, data) - if err != nil { - panic(err) - } - - var repo string - - switch event := event.(type) { - case *github.PushEvent: - event.HeadCommit.ID = github.String(commit) - repo = event.Repo.GetFullName() - case *github.PullRequestEvent: - event.PullRequest.Head.SHA = github.String(commit) - repo = event.Repo.GetFullName() - } - - out, err := json.MarshalIndent(event, "", " ") - if err != nil { - panic(err) - } - - clientset, err := getKubeClient() - if err != nil { - panic(err) - } - - if namespace == "" { - namespace = v1.NamespaceDefault - } - proj, err := kube.New(clientset, namespace).GetProject(repo) - if err != nil { - panic(err) - } - - hmac := webhook.SHA1HMAC([]byte(proj.SharedSecret), out) - - ioutil.WriteFile("./tests/testdata/test-repo-generated.json", out, 0755) - ioutil.WriteFile("./tests/testdata/test-repo-generated.hash", []byte(hmac), 0755) - - fmt.Fprintln(os.Stdout, string(out)) - fmt.Fprintln(os.Stdout, hmac) -} diff --git a/tests/tests_test.go b/tests/tests_test.go index b77296984..017aa9205 100644 --- a/tests/tests_test.go +++ b/tests/tests_test.go @@ -3,35 +3,98 @@ package tests import ( + "bytes" + "encoding/json" + "flag" + "fmt" "io/ioutil" "net/http" "net/url" "os" "testing" + + "github.com/google/go-github/github" + "k8s.io/api/core/v1" + + "github.com/Azure/brigade/pkg/storage/kube" + "github.com/Azure/brigade/pkg/webhook" ) -func TestFunctional(t *testing.T) { - githubPushFile, err := os.Open("testdata/test-repo-generated.json") +var ( + kubeconfig string + namespace string +) + +func init() { + flag.StringVar(&kubeconfig, "kubeconfig", "", "absolute path to the kubeconfig file") + flag.StringVar(&namespace, "namespace", os.Getenv("BRIGADE_NAMESPACE"), "kubernetes namespace") +} + +func generate() (payload []byte, hmac string) { + if flag.NArg() < 1 { + fmt.Fprintln(os.Stderr, "required arg: Git SHA") + os.Exit(1) + } + commit := flag.Arg(0) + + eventType := "push" + + data, err := ioutil.ReadFile("./testdata/test-repo-push.json") if err != nil { - t.Fatal(err) + panic(err) } - defer githubPushFile.Close() - hubSignature, err := ioutil.ReadFile("testdata/test-repo-generated.hash") + + event, err := github.ParseWebHook(eventType, data) if err != nil { - t.Fatal(err) - } - requests := []*http.Request{ - { - Method: "POST", - URL: &url.URL{Scheme: "http", Host: "localhost:7744", Path: "/events/github"}, - Body: githubPushFile, - Header: http.Header{ - "X-Github-Event": []string{"push"}, - "X-Hub-Signature": []string{string(hubSignature)}, - }, - }, + panic(err) } + var repo string + + switch event := event.(type) { + case *github.PushEvent: + event.HeadCommit.ID = github.String(commit) + repo = event.Repo.GetFullName() + case *github.PullRequestEvent: + event.PullRequest.Head.SHA = github.String(commit) + repo = event.Repo.GetFullName() + } + + out, err := json.MarshalIndent(event, "", " ") + if err != nil { + panic(err) + } + + clientset, err := kube.GetClient("", kubeconfig) + if err != nil { + panic(err) + } + + if namespace == "" { + namespace = v1.NamespaceDefault + } + + proj, err := kube.New(clientset, namespace).GetProject(repo) + if err != nil { + panic(err) + } + hmac = webhook.SHA1HMAC([]byte(proj.SharedSecret), out) + return out, hmac +} + +func TestFunctional(t *testing.T) { + payload, hmac := generate() + + requests := []*http.Request{{ + Method: "POST", + URL: &url.URL{Scheme: "http", Host: "localhost:7744", Path: "/events/github"}, + Body: ioutil.NopCloser(bytes.NewReader(payload)), + Header: http.Header{ + "X-Github-Event": []string{"push"}, + "X-Hub-Signature": []string{hmac}, + }, + }} + for _, request := range requests { resp, err := http.DefaultClient.Do(request) if err != nil {