| // 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" | |
| "log/slog" | |
| "os" | |
| "testing" | |
| "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}, | |
| {"golang.org/x/scratch/kusano/replacement", "v0.0.0-20250813163312-416cbb1e76e6", false, nil}, | |
| } { | |
| t.Run(fmt.Sprintf("%s@%s,%t", test.modulePath, test.version, test.init), func(t *testing.T) { | |
| dir := t.TempDir() | |
| args := prepareModuleArgs{ | |
| modulePath: test.modulePath, | |
| version: test.version, | |
| dir: dir, | |
| proxyClient: proxyClient, | |
| insecure: insecure, | |
| init: test.init, | |
| } | |
| err := prepareModule(ctx, args) | |
| if !errors.Is(err, test.want) { | |
| t.Errorf("got %v, want %v", err, test.want) | |
| } | |
| }) | |
| } | |
| } |