blob: 44e6852757675b39d9571eec78ccdeaa4406f228 [file] [log] [blame]
// Copyright 2019 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 postgres
import (
"context"
"testing"
"github.com/google/go-cmp/cmp"
"golang.org/x/pkgsite/internal"
"golang.org/x/pkgsite/internal/testing/sample"
)
func TestReadAndWriteVersionMap(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), testTimeout)
defer cancel()
defer ResetTestDB(testDB, t)
m := sample.Module()
m.ModulePath = "golang.org/x/tools"
p := sample.Package()
p.Path = "golang.org/x/tools/go/packages"
m.Packages = []*internal.Package{p}
err := testDB.InsertModule(ctx, m)
if err != nil {
t.Fatal(err)
}
vm := &internal.VersionMap{
ModulePath: m.ModulePath,
RequestedVersion: "master",
ResolvedVersion: "v1.0.0",
Status: 200,
}
err = testDB.UpsertVersionMap(ctx, vm)
if err != nil {
t.Fatal(err)
}
for _, test := range []struct {
name, path, modulePath, version string
}{
{
name: "package path - latest version, unknown module",
path: "golang.org/x/tools/go/packages",
modulePath: internal.UnknownModulePath,
version: internal.LatestVersion,
},
{
name: "package path - latest version, known module",
path: "golang.org/x/tools/go/packages",
modulePath: "golang.org/x/tools",
version: internal.LatestVersion,
},
{
name: "package path - specified version, unknown module",
path: "golang.org/x/tools/go/packages",
modulePath: internal.UnknownModulePath,
version: "master",
},
{
name: "package path - specified version, known module",
path: "golang.org/x/tools/go/packages",
modulePath: "golang.org/x/tools",
version: "master",
},
{
name: "directory path - latest version, unknown module",
path: "golang.org/x/tools/go",
modulePath: internal.UnknownModulePath,
version: internal.LatestVersion,
},
{
name: "directory path - latest version, known module",
path: "golang.org/x/tools/go",
modulePath: "golang.org/x/tools",
version: internal.LatestVersion,
},
{
name: "directory path - specified version, unknown module",
path: "golang.org/x/tools/go",
modulePath: internal.UnknownModulePath,
version: "master",
},
{
name: "directory path - specified version, known module",
path: "golang.org/x/tools/go",
modulePath: "golang.org/x/tools",
version: "master",
},
{
name: "module path - latest version, unknown module",
path: "golang.org/x/tools",
modulePath: internal.UnknownModulePath,
version: internal.LatestVersion,
},
{
name: "module path - latest version, known module",
path: "golang.org/x/tools",
modulePath: "golang.org/x/tools",
version: internal.LatestVersion,
},
{
name: "module path - specified version, unknown module",
path: "golang.org/x/tools",
modulePath: internal.UnknownModulePath,
version: "master",
},
{
name: "module path - specified version, known module",
path: "golang.org/x/tools",
modulePath: "golang.org/x/tools",
version: "master",
},
} {
t.Run(test.name, func(t *testing.T) {
got, err := testDB.GetVersionMap(ctx, test.path, test.modulePath, test.version)
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(vm, got); diff != "" {
t.Errorf("t.Errorf(ctx, %q, %q, %q) mismatch (-want +got):\n%s",
test.path, test.modulePath, test.version, diff)
}
})
}
}
func TestUpsertVersionMap(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), testTimeout)
defer cancel()
defer ResetTestDB(testDB, t)
upsertAndVerifyVersionMap := func(vm *internal.VersionMap) {
err := testDB.UpsertVersionMap(ctx, vm)
if err != nil {
t.Fatal(err)
}
got, err := testDB.GetVersionMap(ctx, vm.ModulePath, vm.ModulePath, vm.RequestedVersion)
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(vm, got); diff != "" {
t.Fatalf("t.Errorf(ctx, %q, %q) mismatch (-want +got):\n%s",
vm.ModulePath, vm.RequestedVersion, diff)
}
}
vm := &internal.VersionMap{
ModulePath: "github.com/module",
RequestedVersion: "master",
ResolvedVersion: "",
Status: 404,
Error: "not found",
}
upsertAndVerifyVersionMap(vm)
vm.ResolvedVersion = "v1.0.0"
vm.Status = 200
upsertAndVerifyVersionMap(vm)
}