diff --git a/cmd/csaf_downloader/downloader_test.go b/cmd/csaf_downloader/downloader_test.go index 79f49a58..46c091d7 100644 --- a/cmd/csaf_downloader/downloader_test.go +++ b/cmd/csaf_downloader/downloader_test.go @@ -10,25 +10,74 @@ package main import ( "context" + "html/template" "log/slog" "net/http" "net/http/httptest" + "os" + "strings" "testing" "github.com/csaf-poc/csaf_distribution/v3/internal/options" "github.com/csaf-poc/csaf_distribution/v3/util" ) +type ProviderParams struct { + url string + enableSha256 bool + enableSha512 bool +} + +func ProviderHandler(params *ProviderParams, directoryProvider bool) http.HandlerFunc { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + path := "../../testdata/" + if directoryProvider { + path += "simple-directory-provider" + } else { + path += "simple-rolie-provider" + } + + path += r.URL.Path + + if strings.HasSuffix(r.URL.Path, "/") { + path += "index.html" + } + + content, err := os.ReadFile(path) + if err != nil { + w.WriteHeader(http.StatusNotFound) + return + } + switch { + case strings.HasSuffix(path, ".html"): + w.Header().Add("Content-Type", "text/html") + case strings.HasSuffix(path, ".json"): + w.Header().Add("Content-Type", "application/json") + default: + w.Header().Add("Content-Type", "text/plain") + } + + tmplt, err := template.New("base").Parse(string(content)) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + return + } + tmplt.Execute(w, params) + }) +} + func TestShaMarking(t *testing.T) { tests := []struct { - name string - wantSha256 bool - wantSha512 bool + name string + directoryProvider bool + wantSha256 bool + wantSha512 bool }{ { - name: "want sha256 and sha512", - wantSha256: true, - wantSha512: true, + name: "want sha256 and sha512", + directoryProvider: false, + wantSha256: true, + wantSha512: true, }, } @@ -38,8 +87,12 @@ func TestShaMarking(t *testing.T) { t.Run(test.name, func(tt *testing.T) { tt.Parallel() serverURL := "" - fs := http.FileServer(http.Dir("../../testdata/simple-rolie-provider")) - server := httptest.NewTLSServer(fs) + params := ProviderParams{ + url: "", + enableSha256: true, + enableSha512: true, + } + server := httptest.NewTLSServer(ProviderHandler(¶ms, test.directoryProvider)) defer server.Close() serverURL = server.URL