diff --git a/cmd/helm/repo_add_test.go b/cmd/helm/repo_add_test.go index 21835317413d9daece99f3ec5c4a17216cfee445..055ee0bfd40a6d0cc859affe9e32371d4127a376 100644 --- a/cmd/helm/repo_add_test.go +++ b/cmd/helm/repo_add_test.go @@ -29,19 +29,21 @@ import ( var testName = "test-name" func TestRepoAddCmd(t *testing.T) { - srv := repotest.NewServer("testdata/testserver") - defer srv.Stop() - - thome, err := tempHelmHome(t) + srv, thome, err := repotest.NewTempServer("testdata/testserver/*.*") if err != nil { t.Fatal(err) } + oldhome := homePath() helmHome = thome defer func() { + srv.Stop() helmHome = oldhome os.Remove(thome) }() + if err := ensureTestHome(helmpath.Home(thome), t); err != nil { + t.Fatal(err) + } tests := []releaseCase{ { @@ -61,15 +63,22 @@ func TestRepoAddCmd(t *testing.T) { } func TestRepoAdd(t *testing.T) { - ts := repotest.NewServer("testdata/testserver") - defer ts.Stop() - - thome, err := tempHelmHome(t) + ts, thome, err := repotest.NewTempServer("testdata/testserver/*.*") if err != nil { t.Fatal(err) } - defer os.Remove(thome) + + oldhome := homePath() + helmHome = thome hh := helmpath.Home(thome) + defer func() { + ts.Stop() + helmHome = oldhome + os.Remove(thome) + }() + if err := ensureTestHome(hh, t); err != nil { + t.Fatal(err) + } if err := addRepository(testName, ts.URL(), hh); err != nil { t.Error(err) diff --git a/cmd/helm/repo_update_test.go b/cmd/helm/repo_update_test.go index 6ec59c410b06ed324d7b4a54b1cb97a4bd1f266d..857fbbf8806c885f7888ce458e321fc2132a6725 100644 --- a/cmd/helm/repo_update_test.go +++ b/cmd/helm/repo_update_test.go @@ -62,19 +62,21 @@ func TestUpdateCmd(t *testing.T) { } func TestUpdateCharts(t *testing.T) { - srv := repotest.NewServer("testdata/testserver") - defer srv.Stop() - - thome, err := tempHelmHome(t) + srv, thome, err := repotest.NewTempServer("testdata/testserver/*.*") if err != nil { t.Fatal(err) } + oldhome := homePath() helmHome = thome defer func() { + srv.Stop() helmHome = oldhome os.Remove(thome) }() + if err := ensureTestHome(helmpath.Home(thome), t); err != nil { + t.Fatal(err) + } buf := bytes.NewBuffer(nil) repos := []*repo.Entry{ diff --git a/pkg/repo/repotest/server.go b/pkg/repo/repotest/server.go index 8023dbc5c77e95489acd0b5cabc12c65259901f2..9223ed0a37de0366bbabd4b04ca333bf67bf5531 100644 --- a/pkg/repo/repotest/server.go +++ b/pkg/repo/repotest/server.go @@ -27,6 +27,30 @@ import ( "k8s.io/helm/pkg/repo" ) +// NewTempServer creates a server inside of a temp dir. +// +// If the passed in string is not "", it will be treated as a shell glob, and files +// will be copied from that path to the server's docroot. +// +// The caller is responsible for destroying the temp directory as well as stopping +// the server. +func NewTempServer(glob string) (*Server, string, error) { + tdir, err := ioutil.TempDir("", "helm-repotest-") + if err != nil { + return nil, tdir, err + } + srv := NewServer(tdir) + + if glob != "" { + if _, err := srv.CopyCharts(glob); err != nil { + srv.Stop() + return srv, tdir, err + } + } + + return srv, tdir, nil +} + // NewServer creates a repository server for testing. // // docroot should be a temp dir managed by the caller. diff --git a/pkg/repo/repotest/server_test.go b/pkg/repo/repotest/server_test.go index b2a9a5b005cf8b5f2b8e570af57116065765923c..1d4c78e415868cff0e7707dfd1dce78d1d1df16b 100644 --- a/pkg/repo/repotest/server_test.go +++ b/pkg/repo/repotest/server_test.go @@ -102,3 +102,26 @@ func TestServer(t *testing.T) { t.Errorf("Expected 404, got %d", res.StatusCode) } } + +func TestNewTempServer(t *testing.T) { + srv, tdir, err := NewTempServer("testdata/examplechart-0.1.0.tgz") + if err != nil { + t.Fatal(err) + } + defer func() { + srv.Stop() + os.RemoveAll(tdir) + }() + + if _, err := os.Stat(tdir); err != nil { + t.Fatal(err) + } + + res, err := http.Head(srv.URL() + "/examplechart-0.1.0.tgz") + if err != nil { + t.Error(err) + } + if res.StatusCode != 200 { + t.Errorf("Expected 200, got %d", res.StatusCode) + } +}