aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/api/api_test.go102
-rw-r--r--internal/log/log.go5
-rw-r--r--internal/log/log_test.go6
-rw-r--r--internal/tests/deps/cmd_pkgsite_deps_test.go1
4 files changed, 75 insertions, 39 deletions
diff --git a/internal/api/api_test.go b/internal/api/api_test.go
index 64b891c7..1c233a7c 100644
--- a/internal/api/api_test.go
+++ b/internal/api/api_test.go
@@ -11,13 +11,17 @@ import (
"errors"
"net/http"
"net/http/httptest"
+ "os"
"strconv"
"testing"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"golang.org/x/pkgsite/internal"
+ "golang.org/x/pkgsite/internal/derrors"
+ "golang.org/x/pkgsite/internal/log"
"golang.org/x/pkgsite/internal/osv"
+ "golang.org/x/pkgsite/internal/postgres"
"golang.org/x/pkgsite/internal/testing/fakedatasource"
"golang.org/x/pkgsite/internal/testing/sample"
"golang.org/x/pkgsite/internal/vuln"
@@ -40,8 +44,46 @@ func (ds fallbackDataSource) GetUnitMeta(ctx context.Context, path, requestedMod
}
func TestServePackage(t *testing.T) {
+ t.Run("fake", func(t *testing.T) {
+ ds := fakedatasource.New()
+ mustInsert := func(ctx context.Context, m *internal.Module, _ bool) {
+ ds.MustInsertModule(ctx, m)
+ }
+ testServePackage(t, ds, mustInsert)
+ })
+ t.Run("db", func(t *testing.T) {
+ orig := log.GetLevel()
+ t.Cleanup(func() { log.SetLevel(orig.String()) })
+ log.SetLevel("Info")
+ const testDB = "pkgsite_api"
+ db, err := postgres.SetupTestDB(testDB)
+ if err != nil {
+ if errors.Is(err, derrors.NotFound) && os.Getenv("GO_DISCOVERY_TESTDB") != "true" {
+ t.Skipf("could not connect to DB (see doc/postgres.md to set up): %v", err)
+ }
+ t.Fatalf("setting up DB: %v", err)
+ }
+ defer db.Close()
+ mustInsert := func(ctx context.Context, m *internal.Module, latest bool) {
+ for _, u := range m.Units {
+ if !u.IsRedistributable {
+ t.Logf("unit %s is not redistributable; DB will strip documentation", u.Path)
+ }
+ }
+ if latest {
+ postgres.MustInsertModule(ctx, t, db, m)
+ } else {
+ postgres.MustInsertModuleNotLatest(ctx, t, db, m)
+ }
+ }
+ testServePackage(t, db, mustInsert)
+ })
+}
+
+func testServePackage(t *testing.T, ds internal.DataSource, mustInsertModule func(context.Context, *internal.Module, bool)) {
+ // mustInsert must not be called from subtests, because it captures
+ // a parent testing.T.
ctx := context.Background()
- ds := fakedatasource.New()
const (
pkgPath = "example.com/a/b"
@@ -50,7 +92,7 @@ func TestServePackage(t *testing.T) {
version = "v1.2.3"
)
- ds.MustInsertModule(ctx, &internal.Module{
+ mustInsertModule(ctx, &internal.Module{
ModuleInfo: internal.ModuleInfo{
ModulePath: "example.com",
Version: version,
@@ -61,48 +103,46 @@ func TestServePackage(t *testing.T) {
UnitMeta: internal.UnitMeta{
Path: "example.com/pkg",
ModuleInfo: internal.ModuleInfo{
- ModulePath: "example.com",
- Version: version,
- LatestVersion: "v1.2.4",
+ ModulePath: "example.com",
+ Version: version,
+ LatestVersion: "v1.2.4",
+ IsRedistributable: true,
},
Name: "pkg",
},
- Documentation: []*internal.Documentation{sample.Documentation("linux", "amd64", sample.DocContents)},
- Licenses: sample.LicenseMetadata(),
- Imports: []string{pkgPath},
+ Documentation: []*internal.Documentation{sample.Documentation("linux", "amd64", sample.DocContents)},
+ Licenses: sample.LicenseMetadata(),
+ Imports: []string{pkgPath},
+ IsRedistributable: true,
}},
- })
+ }, false)
for _, mp := range []string{modulePath1, modulePath2} {
u := &internal.Unit{
UnitMeta: internal.UnitMeta{
Path: pkgPath,
ModuleInfo: internal.ModuleInfo{
- ModulePath: mp,
- Version: version,
- LatestVersion: version,
+ ModulePath: mp,
+ Version: version,
+ LatestVersion: version,
+ IsRedistributable: true,
},
Name: "b",
},
- Documentation: []*internal.Documentation{
- {
- GOOS: "linux",
- GOARCH: "amd64",
- Synopsis: "Synopsis for " + mp,
- },
- },
+ Documentation: []*internal.Documentation{sample.Documentation("linux", "amd64", sample.DocContents)},
+ IsRedistributable: true,
}
- ds.MustInsertModule(ctx, &internal.Module{
+ mustInsertModule(ctx, &internal.Module{
ModuleInfo: internal.ModuleInfo{
ModulePath: mp,
Version: version,
LatestVersion: version,
},
Units: []*internal.Unit{u},
- })
+ }, true)
}
- ds.MustInsertModule(ctx, &internal.Module{
+ mustInsertModule(ctx, &internal.Module{
ModuleInfo: internal.ModuleInfo{
ModulePath: "example.com",
Version: "v1.2.4",
@@ -118,15 +158,12 @@ func TestServePackage(t *testing.T) {
},
Name: "pkg",
},
- Documentation: []*internal.Documentation{{
- GOOS: "linux",
- GOARCH: "amd64",
- Synopsis: "Basic synopsis",
- }},
+ Documentation: []*internal.Documentation{sample.Documentation("linux", "amd64", sample.DocContents)},
+ IsRedistributable: true,
}},
- })
+ }, true)
- ds.MustInsertModule(ctx, &internal.Module{
+ mustInsertModule(ctx, &internal.Module{
ModuleInfo: internal.ModuleInfo{
ModulePath: "example.com/ex",
Version: "v1.0.0",
@@ -142,6 +179,7 @@ func TestServePackage(t *testing.T) {
},
Name: "pkg",
},
+ IsRedistributable: true,
Documentation: []*internal.Documentation{sample.DocumentationWithExamples("linux", "amd64", "", `
import "fmt"
func Example() {
@@ -150,7 +188,7 @@ func TestServePackage(t *testing.T) {
}
`)},
}},
- })
+ }, true)
for _, test := range []struct {
name string
@@ -194,7 +232,7 @@ func TestServePackage(t *testing.T) {
Path: pkgPath,
ModulePath: modulePath1,
ModuleVersion: version,
- Synopsis: "Synopsis for " + modulePath1,
+ Synopsis: "This is a package synopsis for GOOS=linux, GOARCH=amd64",
IsLatest: true,
GOOS: "linux",
GOARCH: "amd64",
@@ -222,7 +260,7 @@ func TestServePackage(t *testing.T) {
Path: "example.com/pkg",
ModulePath: "example.com",
ModuleVersion: "v1.2.4",
- Synopsis: "Basic synopsis",
+ Synopsis: "This is a package synopsis for GOOS=linux, GOARCH=amd64",
IsLatest: true,
GOOS: "linux",
GOARCH: "amd64",
diff --git a/internal/log/log.go b/internal/log/log.go
index 60c9371a..8238cae2 100644
--- a/internal/log/log.go
+++ b/internal/log/log.go
@@ -67,7 +67,7 @@ func SetLevel(v string) {
currentLevel = toLevel(v)
}
-func getLevel() Severity {
+func GetLevel() Severity {
mu.Lock()
defer mu.Unlock()
return currentLevel
@@ -87,7 +87,6 @@ func (stdlibLogger) Log(ctx context.Context, s Severity, payload any) {
extra = " (" + strings.Join(extras, ", ") + ")"
}
log.Printf("%s%s: %+v", s, extra, payload)
-
}
func (stdlibLogger) Flush() {}
@@ -151,7 +150,7 @@ func Fatal(ctx context.Context, arg any) {
}
func doLog(ctx context.Context, s Severity, payload any) {
- if getLevel() > s {
+ if GetLevel() > s {
return
}
mu.Lock()
diff --git a/internal/log/log_test.go b/internal/log/log_test.go
index 791bd775..d2ef9d53 100644
--- a/internal/log/log_test.go
+++ b/internal/log/log_test.go
@@ -19,7 +19,7 @@ const (
// Do not run in parallel. It overrides currentLevel.
func TestSetLogLevel(t *testing.T) {
- oldLevel := getLevel()
+ oldLevel := GetLevel()
defer func() { currentLevel = oldLevel }()
tests := []struct {
@@ -38,7 +38,7 @@ func TestSetLogLevel(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
SetLevel(test.newLevel)
- gotLevel := getLevel()
+ gotLevel := GetLevel()
if test.wantLevel != gotLevel {
t.Errorf("Error: want=%s, got=%s", test.wantLevel, gotLevel)
}
@@ -69,7 +69,6 @@ func TestLogLevel(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
-
test.logFunc(context.Background(), test.logMsg)
logs := logger.(*mockLogger).logs
got := strings.Contains(logs, test.logMsg)
@@ -101,7 +100,6 @@ func TestDefaultLogLevel(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
-
test.logFunc(context.Background(), test.logMsg)
logs := logger.(*mockLogger).logs
diff --git a/internal/tests/deps/cmd_pkgsite_deps_test.go b/internal/tests/deps/cmd_pkgsite_deps_test.go
index c82c4074..82c8e176 100644
--- a/internal/tests/deps/cmd_pkgsite_deps_test.go
+++ b/internal/tests/deps/cmd_pkgsite_deps_test.go
@@ -32,6 +32,7 @@ var additionalAllowedTestModDeps = map[string]bool{
}
func TestCmdPkgsiteDeps(t *testing.T) {
+ t.Skip("temporarily skipped until https://go.dev/cl/765502 is merged; then we will move API tests to testing/api")
testenv.MustHaveExecPath(t, "go")
// First, list all dependencies of pkgsite.