diff options
| author | Julie Qiu <julie@golang.org> | 2019-03-20 11:38:23 -0400 |
|---|---|---|
| committer | Julie Qiu <julie@golang.org> | 2020-03-27 16:46:34 -0400 |
| commit | f6ffaa5bfb16363744f423e2cfe1bf86e99ad775 (patch) | |
| tree | 2b4dfc31f4636aaf03a73888de4ad2b6d79b0b90 /internal/postgres/postgres_test.go | |
| parent | a0c7487651dc9056f2843b823624cd62e420c051 (diff) | |
| download | go-x-pkgsite-f6ffaa5bfb16363744f423e2cfe1bf86e99ad775.tar.xz | |
internal/postgres,internal/fetch: implement read/write packages
When a module zip is downloaded by the fetch service, its packages will
be extracted. The synopsis for each package will also be determined
using go/doc.
These packages will be written to postgres with postgres.InsertVersion.
Because we expected to add more version data over time, so
postgres.InsertVersion will no longer fail on duplicate key errors.
A package can be retrieved with postgres.GetPackage.
Change-Id: I9916d82c1479914f0b91ca02105aab86e578aac7
Reviewed-on: https://team-review.git.corp.google.com/c/golang/discovery/+/436915
Reviewed-by: Andrew Bonventre <andybons@google.com>
Diffstat (limited to 'internal/postgres/postgres_test.go')
| -rw-r--r-- | internal/postgres/postgres_test.go | 54 |
1 files changed, 45 insertions, 9 deletions
diff --git a/internal/postgres/postgres_test.go b/internal/postgres/postgres_test.go index c9f5b9da..a399fb70 100644 --- a/internal/postgres/postgres_test.go +++ b/internal/postgres/postgres_test.go @@ -5,16 +5,18 @@ package postgres import ( + "database/sql" "reflect" "testing" "time" + "github.com/google/go-cmp/cmp" "golang.org/x/discovery/internal" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) -func TestPostgres_ReadAndWriteVersion(t *testing.T) { +func TestPostgres_ReadAndWriteVersionAndPackages(t *testing.T) { var ( now = time.Now() series = &internal.Series{ @@ -29,18 +31,24 @@ func TestPostgres_ReadAndWriteVersion(t *testing.T) { testVersion = &internal.Version{ Module: module, Version: "v1.0.0", - Synopsis: "This is a synopsis", License: "licensename", ReadMe: "readme", CommitTime: now, + Packages: []*internal.Package{ + &internal.Package{ + Name: "foo", + Synopsis: "This is a package synopsis", + Path: "path/to/foo", + }, + }, } ) testCases := []struct { - name, module, version string - versionData *internal.Version - wantWriteErrCode codes.Code - wantReadErr bool + name, module, version, pkgpath string + versionData *internal.Version + wantWriteErrCode codes.Code + wantReadErr bool }{ { name: "nil_version_write_error", @@ -53,6 +61,7 @@ func TestPostgres_ReadAndWriteVersion(t *testing.T) { name: "valid_test", module: "valid_module_name", version: "v1.0.0", + pkgpath: "path/to/foo", versionData: testVersion, }, { @@ -66,6 +75,7 @@ func TestPostgres_ReadAndWriteVersion(t *testing.T) { name: "nonexistent_module_test", module: "nonexistent_module_name", version: "v1.0.0", + pkgpath: "path/to/foo", versionData: testVersion, wantReadErr: true, }, @@ -124,9 +134,9 @@ func TestPostgres_ReadAndWriteVersion(t *testing.T) { t.Errorf("db.InsertVersion(%+v) error: %v, want write error: %v", tc.versionData, err, tc.wantWriteErrCode) } - // Test that insertion of duplicate primary key fails when the first insert worked - if err := db.InsertVersion(tc.versionData); err == nil { - t.Errorf("db.InsertVersion(%+v) on duplicate version did not produce error", testVersion) + // Test that insertion of duplicate primary key won't fail. + if err := db.InsertVersion(tc.versionData); status.Code(err) != tc.wantWriteErrCode { + t.Errorf("db.InsertVersion(%+v) second insert error: %v, want write error: %v", tc.versionData, err, tc.wantWriteErrCode) } got, err := db.GetVersion(tc.module, tc.version) @@ -143,6 +153,32 @@ func TestPostgres_ReadAndWriteVersion(t *testing.T) { t.Errorf("db.GetVersion(%q, %q) = %v, want %v", tc.module, tc.version, got, tc.versionData) } + + gotPkg, err := db.GetPackage(tc.pkgpath, tc.version) + if tc.versionData == nil || tc.versionData.Packages == nil || tc.pkgpath == "" { + if tc.wantReadErr != (err != nil) { + t.Fatalf("db.GetPackage(%q, %q) = %v, want %v", tc.pkgpath, tc.version, err, sql.ErrNoRows) + } + return + } + + wantPkg := tc.versionData.Packages[0] + if err != nil { + t.Fatalf("db.GetPackage(%q, %q) = %v, want %v", tc.pkgpath, tc.version, gotPkg, wantPkg) + } + + if gotPkg.Version.Version != tc.versionData.Version { + t.Errorf("db.GetPackage(%q, %q) version.version = %v, want %v", tc.pkgpath, tc.version, gotPkg.Version.Version, tc.versionData.Version) + } + if gotPkg.Version.License != tc.versionData.License { + t.Errorf("db.GetPackage(%q, %q) version.license = %v, want %v", tc.pkgpath, tc.version, gotPkg.Version.License, tc.versionData.License) + + } + + gotPkg.Version = nil + if diff := cmp.Diff(*gotPkg, *wantPkg); diff != "" { + t.Errorf("db.GetPackage(%q, %q) Package mismatch (-want +got):\n%s", tc.pkgpath, tc.version, diff) + } }) } } |
