| // Copyright 2023 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package worker |
| |
| import ( |
| "context" |
| "errors" |
| "fmt" |
| "os" |
| "testing" |
| |
| "golang.org/x/exp/slog" |
| "golang.org/x/pkgsite-metrics/internal/derrors" |
| "golang.org/x/pkgsite-metrics/internal/log" |
| "golang.org/x/pkgsite-metrics/internal/proxy" |
| test "golang.org/x/pkgsite-metrics/internal/testing" |
| ) |
| |
| func TestPrepareModule(t *testing.T) { |
| test.NeedsIntegrationEnv(t) |
| ctx := context.Background() |
| slog.SetDefault(slog.New(log.NewLineHandler(os.Stderr))) |
| const insecure = true |
| proxyClient, err := proxy.New("https://proxy.golang.org/cached-only") |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| for _, test := range []struct { |
| modulePath, version string |
| init bool |
| want error |
| }{ |
| // Bad version; proxy should return an error. |
| {"rsc.io/quote", "x", true, derrors.ProxyError}, |
| // This module has a go.mod file... |
| {"rsc.io/quote", "v1.0.0", false, nil}, |
| // ...so it doesn't matter if we pass true for init. |
| {"rsc.io/quote", "v1.0.0", true, nil}, |
| // This module doesn't have a go.mod file... |
| {"github.com/pkg/errors", "v0.9.1", false, derrors.BadModule}, |
| // ... but passing init will make it work. |
| {"github.com/pkg/errors", "v0.9.1", true, nil}, |
| // This module has a dependency (github.com/decred/blake256) for which |
| // the proxy returns 404 when fetch is disabled. |
| {"github.com/decred/gominer", "v1.0.0", true, derrors.BadModule}, |
| } { |
| t.Run(fmt.Sprintf("%s@%s,%t", test.modulePath, test.version, test.init), func(t *testing.T) { |
| dir := t.TempDir() |
| err := prepareModule(ctx, test.modulePath, test.version, dir, proxyClient, insecure, test.init) |
| if !errors.Is(err, test.want) { |
| t.Errorf("got %v, want %v", err, test.want) |
| } |
| }) |
| } |
| } |