Cleanup repotest Server constructors

Signed-off-by: George Jenkins <gvjenkins@gmail.com>
pull/13495/head
George Jenkins 10 months ago
parent 1bc7a28a45
commit 5e35c3b8e3

@ -29,11 +29,8 @@ import (
)
func TestDependencyBuildCmd(t *testing.T) {
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testcharts/*.tgz")
srv := repotest.NewTempServer(t, "testdata/testcharts/*.tgz")
defer srv.Stop()
if err != nil {
t.Fatal(err)
}
rootDir := srv.Root()
srv.LinkIndices()

@ -32,10 +32,7 @@ import (
)
func TestDependencyUpdateCmd(t *testing.T) {
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testcharts/*.tgz")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/testcharts/*.tgz")
defer srv.Stop()
t.Logf("Listening on directory %s", srv.Root())
@ -151,10 +148,7 @@ func TestDependencyUpdateCmd_DoNotDeleteOldChartsOnError(t *testing.T) {
defer resetEnv()()
ensure.HelmHome(t)
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testcharts/*.tgz")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/testcharts/*.tgz")
defer srv.Stop()
t.Logf("Listening on directory %s", srv.Root())
@ -248,10 +242,7 @@ func TestDependencyUpdateCmd_WithRepoThatWasNotAdded(t *testing.T) {
}
func setupMockRepoServer(t *testing.T) *repotest.Server {
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testcharts/*.tgz")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/testcharts/*.tgz")
t.Logf("Listening on directory %s", srv.Root())

@ -27,10 +27,7 @@ import (
)
func TestInstall(t *testing.T) {
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testcharts/*.tgz*")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/testcharts/*.tgz*")
defer srv.Stop()
srv.WithMiddleware(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) {

@ -28,10 +28,7 @@ import (
)
func TestPullCmd(t *testing.T) {
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testcharts/*.tgz*")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/testcharts/*.tgz*")
defer srv.Stop()
ociSrv, err := repotest.NewOCIServer(t, srv.Root())
@ -252,10 +249,7 @@ func TestPullCmd(t *testing.T) {
}
func TestPullWithCredentialsCmd(t *testing.T) {
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testcharts/*.tgz*")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/testcharts/*.tgz*")
defer srv.Stop()
srv.WithMiddleware(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) {

@ -34,22 +34,15 @@ import (
)
func TestRepoAddCmd(t *testing.T) {
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer srv.Stop()
// A second test server is setup to verify URL changing
srv2, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
srv2 := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer srv2.Stop()
tmpdir := filepath.Join(t.TempDir(), "path-component.yaml/data")
err = os.MkdirAll(tmpdir, 0777)
if err != nil {
if err := os.MkdirAll(tmpdir, 0777); err != nil {
t.Fatal(err)
}
repoFile := filepath.Join(tmpdir, "repositories.yaml")
@ -81,10 +74,7 @@ func TestRepoAddCmd(t *testing.T) {
}
func TestRepoAdd(t *testing.T) {
ts, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
ts := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer ts.Stop()
rootDir := t.TempDir()
@ -135,10 +125,7 @@ func TestRepoAdd(t *testing.T) {
}
func TestRepoAddCheckLegalName(t *testing.T) {
ts, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
ts := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer ts.Stop()
defer resetEnv()()
@ -192,10 +179,7 @@ func TestRepoAddConcurrentHiddenFile(t *testing.T) {
}
func repoAddConcurrent(t *testing.T, testName, repoFile string) {
ts, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
ts := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer ts.Stop()
var wg sync.WaitGroup
@ -243,7 +227,7 @@ func TestRepoAddFileCompletion(t *testing.T) {
}
func TestRepoAddWithPasswordFromStdin(t *testing.T) {
srv := repotest.NewTempServerWithCleanupAndBasicAuth(t, "testdata/testserver/*.*")
srv := repotest.NewTempServer(t, "testdata/testserver/*.*", repotest.WithBasicAuth())
defer srv.Stop()
defer resetEnv()()

@ -30,10 +30,7 @@ import (
)
func TestRepoRemove(t *testing.T) {
ts, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
ts := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer ts.Stop()
rootDir := t.TempDir()
@ -162,10 +159,7 @@ func testCacheFiles(t *testing.T, cacheIndexFile string, cacheChartsFile string,
}
func TestRepoRemoveCompletion(t *testing.T) {
ts, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
ts := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer ts.Stop()
rootDir := t.TempDir()

@ -106,10 +106,7 @@ func TestUpdateCustomCacheCmd(t *testing.T) {
cachePath := filepath.Join(rootDir, "updcustomcache")
os.Mkdir(cachePath, os.ModePerm)
ts, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
ts := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer ts.Stop()
o := &repoUpdateOptions{
@ -130,10 +127,7 @@ func TestUpdateCharts(t *testing.T) {
defer resetEnv()()
ensure.HelmHome(t)
ts, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
ts := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer ts.Stop()
r, err := repo.NewChartRepository(&repo.Entry{
@ -165,10 +159,7 @@ func TestUpdateChartsFail(t *testing.T) {
defer resetEnv()()
ensure.HelmHome(t)
ts, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
ts := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer ts.Stop()
var invalidURL = ts.URL() + "55"
@ -198,10 +189,7 @@ func TestUpdateChartsFailWithError(t *testing.T) {
defer resetEnv()()
ensure.HelmHome(t)
ts, err := repotest.NewTempServerWithCleanup(t, "testdata/testserver/*.*")
if err != nil {
t.Fatal(err)
}
ts := repotest.NewTempServer(t, "testdata/testserver/*.*")
defer ts.Stop()
var invalidURL = ts.URL() + "55"

@ -26,10 +26,7 @@ import (
)
func TestShowPreReleaseChart(t *testing.T) {
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testcharts/*.tgz*")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/testcharts/*.tgz*")
defer srv.Stop()
if err := srv.LinkIndices(); err != nil {

@ -171,7 +171,7 @@ func TestIsTar(t *testing.T) {
}
func TestDownloadTo(t *testing.T) {
srv := repotest.NewTempServerWithCleanupAndBasicAuth(t, "testdata/*.tgz*")
srv := repotest.NewTempServer(t, "testdata/*.tgz*", repotest.WithBasicAuth())
defer srv.Stop()
if err := srv.CreateIndex(); err != nil {
t.Fatal(err)
@ -218,11 +218,8 @@ func TestDownloadTo(t *testing.T) {
func TestDownloadTo_TLS(t *testing.T) {
// Set up mock server w/ tls enabled
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/*.tgz*")
srv := repotest.NewTempServer(t, "testdata/*.tgz*")
srv.Stop()
if err != nil {
t.Fatal(err)
}
srv.StartTLS()
defer srv.Stop()
if err := srv.CreateIndex(); err != nil {
@ -274,10 +271,7 @@ func TestDownloadTo_VerifyLater(t *testing.T) {
dest := t.TempDir()
// Set up a fake repo
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/*.tgz*")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/*.tgz*")
defer srv.Stop()
if err := srv.LinkIndices(); err != nil {
t.Fatal(err)

@ -292,10 +292,7 @@ version: 0.1.0`
func TestUpdateBeforeBuild(t *testing.T) {
// Set up a fake repo
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/*.tgz*")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/*.tgz*")
defer srv.Stop()
if err := srv.LinkIndices(); err != nil {
t.Fatal(err)
@ -347,13 +344,11 @@ func TestUpdateBeforeBuild(t *testing.T) {
}
// Update before Build. see issue: https://github.com/helm/helm/issues/7101
err = m.Update()
if err != nil {
if err := m.Update(); err != nil {
t.Fatal(err)
}
err = m.Build()
if err != nil {
if err := m.Build(); err != nil {
t.Fatal(err)
}
}
@ -363,10 +358,7 @@ func TestUpdateBeforeBuild(t *testing.T) {
// to be fetched.
func TestUpdateWithNoRepo(t *testing.T) {
// Set up a fake repo
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/*.tgz*")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/*.tgz*")
defer srv.Stop()
if err := srv.LinkIndices(); err != nil {
t.Fatal(err)
@ -422,8 +414,7 @@ func TestUpdateWithNoRepo(t *testing.T) {
}
// Test the update
err = m.Update()
if err != nil {
if err := m.Update(); err != nil {
t.Fatal(err)
}
}
@ -436,10 +427,7 @@ func TestUpdateWithNoRepo(t *testing.T) {
// If each of these main fields (name, version, repository) is not supplied by dep param, default value will be used.
func checkBuildWithOptionalFields(t *testing.T, chartName string, dep chart.Dependency) {
// Set up a fake repo
srv, err := repotest.NewTempServerWithCleanup(t, "testdata/*.tgz*")
if err != nil {
t.Fatal(err)
}
srv := repotest.NewTempServer(t, "testdata/*.tgz*")
defer srv.Stop()
if err := srv.LinkIndices(); err != nil {
t.Fatal(err)
@ -487,14 +475,12 @@ func checkBuildWithOptionalFields(t *testing.T, chartName string, dep chart.Depe
}
// First build will update dependencies and create Chart.lock file.
err = m.Build()
if err != nil {
if err := m.Build(); err != nil {
t.Fatal(err)
}
// Second build should be passed. See PR #6655.
err = m.Build()
if err != nil {
if err := m.Build(); err != nil {
t.Fatal(err)
}
}

@ -41,36 +41,113 @@ import (
"helm.sh/helm/v3/pkg/repo"
)
// NewTempServerWithCleanup creates a server inside of a temp dir.
type ServerOption func(*testing.T, *Server)
func WithNoAutostart() ServerOption {
return func(_ *testing.T, server *Server) {
server.autostart = false
}
}
func WithBasicAuth() ServerOption {
return func(t *testing.T, server *Server) {
server.WithMiddleware(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) {
username, password, ok := r.BasicAuth()
if !ok || username != "username" || password != "password" {
t.Errorf("Expected request to use basic auth and for username == 'username' and password == 'password', got '%v', '%s', '%s'", ok, username, password)
}
}))
}
}
// 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 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)
func NewTempServer(t *testing.T, glob string, options ...ServerOption) *Server {
tdir, err := os.MkdirTemp("", "helm-repotest-")
if err != nil {
t.Fatal(err)
}
srv := newServer(t, tdir, options...)
if glob != "" {
if _, err := srv.CopyCharts(glob); err != nil {
t.Fatal(err)
}
}
t.Cleanup(func() { os.RemoveAll(srv.docroot) })
return srv, err
if srv.autostart {
srv.Start()
}
return srv
}
// Set up a fake repo with basic auth enabled
func NewTempServerWithCleanupAndBasicAuth(t *testing.T, glob string) *Server {
srv, err := NewTempServerWithCleanup(t, glob)
srv.Stop()
// NewServer creates a repository server for testing.
//
// docroot should be a temp dir managed by the caller.
//
// By default the server will be started, serving files off of the docroot.
//
// Use CopyCharts to move charts into the repository and then index them
// for service.
func NewServer(t *testing.T, docroot string, options ...ServerOption) *Server {
srv := newServer(t, docroot, options...)
if srv.autostart {
srv.Start()
}
return srv
}
// Create the server, but don't yet start it
func newServer(t *testing.T, docroot string, options ...ServerOption) *Server {
root, err := filepath.Abs(docroot)
if err != nil {
t.Fatal(err)
}
srv.WithMiddleware(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) {
username, password, ok := r.BasicAuth()
if !ok || username != "username" || password != "password" {
t.Errorf("Expected request to use basic auth and for username == 'username' and password == 'password', got '%v', '%s', '%s'", ok, username, password)
}
}))
srv.Start()
srv := &Server{
docroot: root,
autostart: true,
}
// Add the testing repository as the only repo.
if err := setTestingRepository(srv.URL(), filepath.Join(srv.docroot, "repositories.yaml")); err != nil {
t.Fatal(err)
}
for _, option := range options {
option(t, srv)
}
return srv
}
// Server is an implementation of a repository server for testing.
type Server struct {
docroot string
srv *httptest.Server
middleware http.HandlerFunc
autostart bool
}
// WithMiddleware injects middleware in front of the server. This can be used to inject
// additional functionality like layering in an authentication frontend.
func (s *Server) WithMiddleware(middleware http.HandlerFunc) {
s.middleware = middleware
}
type OCIServer struct {
*registry.Registry
RegistryURL string
@ -238,69 +315,6 @@ func (srv *OCIServer) Run(t *testing.T, opts ...OCIServerOpt) {
result.Chart.Digest, result.Chart.Size)
}
// 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.
//
// Deprecated: use NewTempServerWithCleanup
func NewTempServer(glob string) (*Server, error) {
tdir, err := os.MkdirTemp("", "helm-repotest-")
if err != nil {
return nil, err
}
srv := NewServer(tdir)
if glob != "" {
if _, err := srv.CopyCharts(glob); err != nil {
srv.Stop()
return srv, err
}
}
return srv, nil
}
// NewServer creates a repository server for testing.
//
// docroot should be a temp dir managed by the caller.
//
// This will start the server, serving files off of the docroot.
//
// Use CopyCharts to move charts into the repository and then index them
// for service.
func NewServer(docroot string) *Server {
root, err := filepath.Abs(docroot)
if err != nil {
panic(err)
}
srv := &Server{
docroot: root,
}
srv.Start()
// Add the testing repository as the only repo.
if err := setTestingRepository(srv.URL(), filepath.Join(root, "repositories.yaml")); err != nil {
panic(err)
}
return srv
}
// Server is an implementation of a repository server for testing.
type Server struct {
docroot string
srv *httptest.Server
middleware http.HandlerFunc
}
// WithMiddleware injects middleware in front of the server. This can be used to inject
// additional functionality like layering in an authentication frontend.
func (s *Server) WithMiddleware(middleware http.HandlerFunc) {
s.middleware = middleware
}
// Root gets the docroot for the server.
func (s *Server) Root() string {
return s.docroot

@ -34,7 +34,7 @@ func TestServer(t *testing.T) {
rootDir := t.TempDir()
srv := NewServer(rootDir)
srv := newServer(t, rootDir)
defer srv.Stop()
c, err := srv.CopyCharts("testdata/*.tgz")
@ -99,10 +99,7 @@ func TestServer(t *testing.T) {
func TestNewTempServer(t *testing.T) {
ensure.HelmHome(t)
srv, err := NewTempServerWithCleanup(t, "testdata/examplechart-0.1.0.tgz")
if err != nil {
t.Fatal(err)
}
srv := NewTempServer(t, "testdata/examplechart-0.1.0.tgz")
defer srv.Stop()
res, err := http.Head(srv.URL() + "/examplechart-0.1.0.tgz")

Loading…
Cancel
Save