chore: improve test assertions and descriptions for file download test (#1745)

improve test assertions and descriptions for file download test

Signed-off-by: zhaque44 <haque.zubair@gmail.com>
This commit is contained in:
Zubair Haque 2024-10-19 07:52:01 -05:00 committed by GitHub
parent 922cc15c50
commit 61439fbc34
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 23 additions and 24 deletions

1
go.mod
View File

@ -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

1
go.sum
View File

@ -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=

View File

@ -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")
})
}
}