diff --git a/pkg/downloader/manager_test.go b/pkg/downloader/manager_test.go index 2425894d6..ad0faf671 100644 --- a/pkg/downloader/manager_test.go +++ b/pkg/downloader/manager_test.go @@ -576,7 +576,7 @@ func TestKey(t *testing.T) { // See issue https://github.com/helm/helm/issues/11509 func TestUpdateOnlyRequiredRepos(t *testing.T) { // Set up a fake repo - srv, err := repotest.NewTempServerWithCleanup(t, "testdata/*.tgz*") + srv, err := repotest.NewTempServerWithCleanupAndMultipleRepos(t, "testdata/*.tgz*") if err != nil { t.Fatal(err) diff --git a/pkg/repo/repotest/server.go b/pkg/repo/repotest/server.go index 90ad3d856..1eaa31f26 100644 --- a/pkg/repo/repotest/server.go +++ b/pkg/repo/repotest/server.go @@ -50,7 +50,22 @@ import ( // The caller is responsible for stopping the server. // The temp dir will be removed by testing package automatically when test finished. func NewTempServerWithCleanup(t *testing.T, glob string) (*Server, error) { - srv, err := NewTempServer(glob) + srv, _, err := NewTempServer(glob) + t.Cleanup(func() { os.RemoveAll(srv.docroot) }) + return srv, err +} + +// Set up a server with multiple fake repo +func NewTempServerWithCleanupAndMultipleRepos(t *testing.T, glob string) (*Server, error) { + srv, tdir, err := NewTempServer(glob) + urls := []string{srv.URL(), "http://foobarbazz:9001"} + if err := setTestingRepositories(urls, filepath.Join(tdir, "repositories.yaml")); err != nil { + panic(err) + } + if _, err := srv.CopyCharts(glob); err != nil { + srv.Stop() + return srv, err + } t.Cleanup(func() { os.RemoveAll(srv.docroot) }) return srv, err } @@ -248,21 +263,21 @@ func (srv *OCIServer) Run(t *testing.T, opts ...OCIServerOpt) { // the server. // // Deprecated: use NewTempServerWithCleanup -func NewTempServer(glob string) (*Server, error) { +func NewTempServer(glob string) (*Server, string, error) { tdir, err := ioutil.TempDir("", "helm-repotest-") if err != nil { - return nil, err + return nil, tdir, err } srv := NewServer(tdir) if glob != "" { if _, err := srv.CopyCharts(glob); err != nil { srv.Stop() - return srv, err + return srv, tdir, err } } - return srv, nil + return srv, tdir, nil } // NewServer creates a repository server for testing. @@ -400,6 +415,7 @@ func (s *Server) Stop() { // URL returns the URL of the server. // // Example: +// // http://localhost:1776 func (s *Server) URL() string { return s.srv.URL @@ -423,3 +439,16 @@ func setTestingRepository(url, fname string) error { }) return r.WriteFile(fname, 0644) } + +// setTestingRepository sets up a testing repository.yaml with only the given URL. +func setTestingRepositories(urls []string, fname string) error { + r := repo.NewFile() + for _, url := range urls { + r.Add(&repo.Entry{ + Name: "test", + URL: url, + }) + } + + return r.WriteFile(fname, 0644) +}