diff --git a/go.mod b/go.mod index 4f1d8cd5..44ad1e21 100644 --- a/go.mod +++ b/go.mod @@ -198,6 +198,7 @@ require ( github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/getsops/gopgagent v0.0.0-20240527072608-0c14999532fe // indirect github.com/getsops/sops/v3 v3.9.1 // indirect + github.com/ghodss/yaml v1.0.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-jose/go-jose/v4 v4.0.4 // indirect github.com/go-logr/logr v1.4.2 // indirect diff --git a/go.sum b/go.sum index 48b7f42a..674f720c 100644 --- a/go.sum +++ b/go.sum @@ -491,6 +491,7 @@ github.com/getsops/gopgagent v0.0.0-20240527072608-0c14999532fe h1:QKe/kmAYbndxw github.com/getsops/gopgagent v0.0.0-20240527072608-0c14999532fe/go.mod h1:awFzISqLJoZLm+i9QQ4SgMNHDqljH6jWV0B36V5MrUM= github.com/getsops/sops/v3 v3.9.1 h1:wXsqzEsUPVQPcxsvjpwpqqD3DVRe9UZKJ7LSf5rzuLA= github.com/getsops/sops/v3 v3.9.1/go.mod h1:k3XzAfcvMI1Rfyw2tky0/RakHrdbVcUrtCGTYsmkMY8= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= diff --git a/pkg/app/init_test.go b/pkg/app/init_test.go index f9f40b3e..59d9124d 100644 --- a/pkg/app/init_test.go +++ b/pkg/app/init_test.go @@ -8,27 +8,28 @@ import ( "path/filepath" "regexp" "testing" + + "github.com/stretchr/testify/assert" ) func TestDownloadfile(t *testing.T) { - var ts *httptest.Server cases := []struct { name string handler func(http.ResponseWriter, *http.Request) - url string filepath string wantContent string wantError string }{ { - name: "download success", + name: "successful download of file content", handler: func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) fmt.Fprint(w, "helmfile") }, wantContent: "helmfile", }, { - name: "download 404", + name: "404 error when file not found", handler: func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) fmt.Fprint(w, "not found") @@ -36,7 +37,7 @@ func TestDownloadfile(t *testing.T) { wantError: "download .*? error, code: 404", }, { - name: "download 500", + name: "500 error on server failure", handler: func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, "server error") @@ -44,14 +45,16 @@ func TestDownloadfile(t *testing.T) { wantError: "download .*? error, code: 500", }, { - name: "download path error", + name: "error due to invalid file path", handler: func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) fmt.Fprint(w, "helmfile") }, filepath: "abc/down.txt", wantError: "open .*? no such file or directory", }, } + for _, c := range cases { t.Run(c.name, func(t *testing.T) { dir := t.TempDir() @@ -60,30 +63,24 @@ func TestDownloadfile(t *testing.T) { downfile = filepath.Join(dir, c.filepath) } - ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - c.handler(w, r) - })) + ts := httptest.NewServer(http.HandlerFunc(c.handler)) defer ts.Close() - url := ts.URL - if c.url != "" { - url = c.url - } - err := downloadfile(downfile, url) + + err := downloadfile(downfile, ts.URL) + if c.wantError != "" { - if err == nil { - t.Errorf("download got no error, want error: %v", c.wantError) - } else if matched, regexErr := regexp.MatchString(c.wantError, err.Error()); regexErr != nil || !matched { - t.Errorf("download got error: %v, want error: %v", err, c.wantError) + assert.Error(t, err) + if err != nil { + matched, regexErr := regexp.MatchString(c.wantError, err.Error()) + assert.NoError(t, regexErr) + assert.True(t, matched, "expected error message to match regex: %s", c.wantError) } return } + content, err := os.ReadFile(downfile) - if err != nil { - t.Errorf("read download file error: %v", err) - } - if string(content) != c.wantContent { - t.Errorf("download file content got: %v, want content: %v", string(content), c.wantContent) - } + assert.NoError(t, err) + assert.Equal(t, c.wantContent, string(content), "unexpected content in downloaded file") }) } }