From 07adf0f9d895770877dbd6755a2fdf4425195d31 Mon Sep 17 00:00:00 2001 From: Ville Aikas Date: Wed, 3 Feb 2016 12:57:48 -0800 Subject: [PATCH] Add ability for the test github registry to handle Do methods. Fix the test to use this. --- manager/manager/typeresolver_test.go | 26 +++++++++++----------- registry/testhelper.go | 33 +++++++++++++++++++++++----- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/manager/manager/typeresolver_test.go b/manager/manager/typeresolver_test.go index f76362a8d..57da1035b 100644 --- a/manager/manager/typeresolver_test.go +++ b/manager/manager/typeresolver_test.go @@ -18,7 +18,6 @@ package manager import ( "errors" - "log" "net/http" "reflect" "strings" @@ -51,16 +50,17 @@ type testGetter struct { test *testing.T } +var count = 0 + func (tg testGetter) Get(url string) (body string, code int, err error) { - tg.count = tg.count + 1 + count = count + 1 ret := tg.responses[url] - log.Printf("GET RETURNING: '%s' '%d'", ret.resp, tg.count) return ret.resp, ret.code, ret.err } func testDriver(c resolverTestCase, t *testing.T) { g := &testGetter{test: t, responses: c.responses} - log.Printf("getter: %#v", g) + count = 0 r := &typeResolver{ maxUrls: 5, rp: c.registryProvider, @@ -75,7 +75,7 @@ func testDriver(c resolverTestCase, t *testing.T) { result, err := r.ResolveTypes(conf, c.imports) - if g.count != c.urlcount { + if count != c.urlcount { t.Errorf("Expected %d url GETs but only %d found %#v", c.urlcount, g.count, g) } @@ -297,11 +297,11 @@ func TestShortGithubUrl(t *testing.T) { Content: "my-content-2"}, } - responses := map[string]responseAndError{ - "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py": responseAndError{nil, http.StatusOK, "my-content"}, - "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py.schema": responseAndError{nil, http.StatusNotFound, ""}, - "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py": responseAndError{nil, http.StatusOK, "my-content-2"}, - "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py.schema": responseAndError{nil, http.StatusNotFound, ""}, + downloadResponses := map[string]registry.DownloadResponse{ + "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py": registry.DownloadResponse{nil, http.StatusOK, "my-content"}, + "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py.schema": registry.DownloadResponse{nil, http.StatusNotFound, ""}, + "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py": registry.DownloadResponse{nil, http.StatusOK, "my-content-2"}, + "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py.schema": registry.DownloadResponse{nil, http.StatusNotFound, ""}, } githubUrlMaps := map[registry.Type]registry.TestURLAndError{ @@ -314,13 +314,13 @@ func TestShortGithubUrl(t *testing.T) { registry.NewTypeOrDie("common", "replicatedservice", "v2"): registry.TestURLAndError{"https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py", nil}, } - grp := registry.NewTestGithubRegistryProvider("github.com/kubernetes/application-dm-templates", githubUrlMaps) + grp := registry.NewTestGithubRegistryProviderWithDownloads("github.com/kubernetes/application-dm-templates", githubUrlMaps, downloadResponses) gcsrp := registry.NewTestGCSRegistryProvider("gs://charts", gcsUrlMaps) test := resolverTestCase{ config: templateShortGithubTemplate, importOut: finalImports, - urlcount: 4, - responses: responses, + urlcount: 0, + responses: map[string]responseAndError{}, registryProvider: registry.NewRegistryProvider(nil, grp, gcsrp, registry.NewInmemCredentialProvider()), } diff --git a/registry/testhelper.go b/registry/testhelper.go index b6a6938e5..9532113b3 100644 --- a/registry/testhelper.go +++ b/registry/testhelper.go @@ -19,6 +19,9 @@ package registry // TODO(jackgr): Mock github repository service to test package and template registry implementations. import ( + "bytes" + "io/ioutil" + "github.com/kubernetes/deployment-manager/common" "github.com/kubernetes/deployment-manager/util" @@ -34,14 +37,22 @@ type TestURLAndError struct { Err error } +type DownloadResponse struct { + Err error + Code int + Body string +} + type testGithubRegistryProvider struct { - shortURL string - responses map[Type]TestURLAndError + shortURL string + responses map[Type]TestURLAndError + downloadResponses map[string]DownloadResponse } type testGithubRegistry struct { githubRegistry - responses map[Type]TestURLAndError + responses map[Type]TestURLAndError + downloadResponses map[string]DownloadResponse } func NewTestGithubRegistryProvider(shortURL string, responses map[Type]TestURLAndError) GithubRegistryProvider { @@ -51,6 +62,14 @@ func NewTestGithubRegistryProvider(shortURL string, responses map[Type]TestURLAn } } +func NewTestGithubRegistryProviderWithDownloads(shortURL string, responses map[Type]TestURLAndError, downloadResponses map[string]DownloadResponse) GithubRegistryProvider { + return testGithubRegistryProvider{ + shortURL: util.TrimURLScheme(shortURL), + responses: responses, + downloadResponses: downloadResponses, + } +} + func (tgrp testGithubRegistryProvider) GetGithubRegistry(cr common.Registry) (GithubRegistry, error) { trimmed := util.TrimURLScheme(cr.URL) if strings.HasPrefix(trimmed, tgrp.shortURL) { @@ -60,8 +79,9 @@ func (tgrp testGithubRegistryProvider) GetGithubRegistry(cr common.Registry) (Gi } return &testGithubRegistry{ - githubRegistry: *ghr, - responses: tgrp.responses, + githubRegistry: *ghr, + responses: tgrp.responses, + downloadResponses: tgrp.downloadResponses, }, nil } @@ -83,7 +103,8 @@ func (tgr testGithubRegistry) GetDownloadURLs(t Type) ([]*url.URL, error) { } func (g testGithubRegistry) Do(req *http.Request) (resp *http.Response, err error) { - return nil, fmt.Errorf("Not implemented yet") + response := g.downloadResponses[req.URL.String()] + return &http.Response{StatusCode: response.Code, Body: ioutil.NopCloser(bytes.NewBufferString(response.Body))}, response.Err } type testGCSRegistryProvider struct {