From 6ca6dfee25c947758fac0abfb28e10049809d3ec Mon Sep 17 00:00:00 2001 From: koplas Date: Mon, 16 Sep 2024 16:01:41 +0200 Subject: [PATCH] Add initial downloader tests --- cmd/csaf_downloader/downloader.go | 6 +++ cmd/csaf_downloader/downloader_test.go | 54 +++++++++++++++++++++----- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/cmd/csaf_downloader/downloader.go b/cmd/csaf_downloader/downloader.go index 3cb7332..2936899 100644 --- a/cmd/csaf_downloader/downloader.go +++ b/cmd/csaf_downloader/downloader.go @@ -39,6 +39,7 @@ import ( type downloader struct { cfg *config + client *util.Client // Used for testing keys *crypto.KeyRing validator csaf.RemoteValidator forwarder *forwarder @@ -123,6 +124,11 @@ func (d *downloader) httpClient() util.Client { client := util.Client(&hClient) + // Overwrite for testing purposes + if client != nil { + client = *d.client + } + // Add extra headers. if len(d.cfg.ExtraHeader) > 0 { client = &util.HeaderClient{ diff --git a/cmd/csaf_downloader/downloader_test.go b/cmd/csaf_downloader/downloader_test.go index dac2e18..79f49a5 100644 --- a/cmd/csaf_downloader/downloader_test.go +++ b/cmd/csaf_downloader/downloader_test.go @@ -11,22 +11,56 @@ package main import ( "context" "log/slog" + "net/http" + "net/http/httptest" "testing" - "github.com/csaf-poc/csaf_distribution/v3/csaf" "github.com/csaf-poc/csaf_distribution/v3/internal/options" + "github.com/csaf-poc/csaf_distribution/v3/util" ) func TestShaMarking(t *testing.T) { - cfg := config{LogLevel: &options.LogLevel{Level: slog.LevelDebug}} - cfg.prepare() - d, err := newDownloader(&cfg) - if err != nil { - t.Fatalf("could not init downloader: %v", err) + tests := []struct { + name string + wantSha256 bool + wantSha512 bool + }{ + { + name: "want sha256 and sha512", + wantSha256: true, + wantSha512: true, + }, } - defer d.close() - ctx := context.Background() - files := []csaf.AdvisoryFile{} - d.downloadFiles(ctx, csaf.TLPLabelWhite, files) + t.Parallel() + for _, testToRun := range tests { + test := testToRun + t.Run(test.name, func(tt *testing.T) { + tt.Parallel() + serverURL := "" + fs := http.FileServer(http.Dir("../../testdata/simple-rolie-provider")) + server := httptest.NewTLSServer(fs) + defer server.Close() + + serverURL = server.URL + + hClient := server.Client() + client := util.Client(hClient) + + cfg := config{LogLevel: &options.LogLevel{Level: slog.LevelDebug}} + cfg.prepare() + d, err := newDownloader(&cfg) + if err != nil { + t.Fatalf("could not init downloader: %v", err) + } + defer d.close() + d.client = &client + + ctx := context.Background() + err = d.run(ctx, []string{serverURL + "/provider-metadata.json"}) + if err != nil { + t.Errorf("SHA marking: Expected no error, got: %v", err) + } + }) + } }