From a1f21f9bc94ca6c1bff1ab16e57b9247e372d55c Mon Sep 17 00:00:00 2001 From: Spencer Schrock Date: Mon, 28 Aug 2023 14:30:27 -0700 Subject: [PATCH] add test. Signed-off-by: Spencer Schrock --- clients/githubrepo/tarball_test.go | 64 ++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/clients/githubrepo/tarball_test.go b/clients/githubrepo/tarball_test.go index f99b5ee7de3..c046675f11e 100644 --- a/clients/githubrepo/tarball_test.go +++ b/clients/githubrepo/tarball_test.go @@ -15,9 +15,14 @@ package githubrepo import ( + "bytes" + "context" "errors" "fmt" "io" + "log" + "net/http" + "net/http/httptest" "os" "strings" "sync" @@ -25,6 +30,9 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" + "github.com/google/go-github/v53/github" + + "github.com/ossf/scorecard/v4/clients" ) type listfileTest struct { @@ -175,3 +183,59 @@ func TestExtractTarball(t *testing.T) { }) } } + +// temporarily redirect default logger output somewhere else. +func setLogOutput(t *testing.T, w io.Writer) { + t.Helper() + old := log.Writer() + log.SetOutput(w) + t.Cleanup(func() { log.SetOutput(old) }) +} + +//nolint:paralleltest // modifying log output +func Test_setup_empty_repo(t *testing.T) { + tests := []struct { + name string + repo string + wantLog bool + }{ + { + name: "org .github has no log message", + repo: ".github", + wantLog: false, + }, + { + name: "non .github repo has log message", + repo: "foo", + wantLog: true, + }, + } + // server always responds with bad request to trigger errTarballNotFound + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusBadRequest) + })) + t.Cleanup(ts.Close) + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + h := tarballHandler{ + httpClient: http.DefaultClient, + } + archiveURL := ts.URL + "/{archive_format}" + r := github.Repository{ + Name: &tt.repo, + ArchiveURL: &archiveURL, + } + var buf bytes.Buffer + setLogOutput(t, &buf) + h.init(context.Background(), &r, clients.HeadSHA) + err := h.setup() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if (tt.wantLog) != (buf.Len() > 0) { + t.Errorf("wanted log: %t, log: %q", tt.wantLog, buf.String()) + } + }) + } +}