internal: skip tests if no DB
Fixes golang/go#39598.
Change-Id: Iae5a4174ca392009a9c3290c096eb8711e6ad522
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/238177
Reviewed-by: Daniel Martà <mvdan@mvdan.cc>
diff --git a/internal/database/database_test.go b/internal/database/database_test.go
index cb6acbd..42d363f 100644
--- a/internal/database/database_test.go
+++ b/internal/database/database_test.go
@@ -7,6 +7,7 @@
import (
"context"
"database/sql"
+ "errors"
"fmt"
"log"
"os"
@@ -16,6 +17,7 @@
"time"
"github.com/google/go-cmp/cmp"
+ "golang.org/x/pkgsite/internal/derrors"
"golang.org/x/pkgsite/internal/testing/dbtest"
)
@@ -27,12 +29,16 @@
const dbName = "discovery_postgres_test"
if err := dbtest.CreateDBIfNotExists(dbName); err != nil {
+ if errors.Is(err, derrors.NotFound) {
+ log.Printf("SKIPPING: could not connect to DB: %v", err)
+ return
+ }
log.Fatal(err)
}
var err error
testDB, err = Open("postgres", dbtest.DBConnURI(dbName))
if err != nil {
- log.Fatal(err)
+ log.Fatalf("Open: %v %[1]T", err)
}
code := m.Run()
if err := testDB.Close(); err != nil {
diff --git a/internal/postgres/test_helper.go b/internal/postgres/test_helper.go
index b68b2e6..40e46ef 100644
--- a/internal/postgres/test_helper.go
+++ b/internal/postgres/test_helper.go
@@ -7,6 +7,7 @@
import (
"context"
"database/sql"
+ "errors"
"fmt"
"log"
"os"
@@ -76,7 +77,7 @@
defer derrors.Wrap(&err, "SetupTestDB(%q)", dbName)
if err := dbtest.CreateDBIfNotExists(dbName); err != nil {
- return nil, fmt.Errorf("createDBIfNotExists(%q): %v", dbName, err)
+ return nil, fmt.Errorf("CreateDBIfNotExists(%q): %w", dbName, err)
}
if isMigrationError, err := tryToMigrate(dbName); err != nil {
if isMigrationError {
@@ -131,6 +132,10 @@
database.QueryLoggingDisabled = true
db, err := SetupTestDB(dbName)
if err != nil {
+ if errors.Is(err, derrors.NotFound) {
+ log.Printf("SKIPPING: could not connect to DB: %v", err)
+ return
+ }
log.Fatal(err)
}
*testDB = db
diff --git a/internal/testing/dbtest/dbtest.go b/internal/testing/dbtest/dbtest.go
index 18bc50f..31da0c7 100644
--- a/internal/testing/dbtest/dbtest.go
+++ b/internal/testing/dbtest/dbtest.go
@@ -13,6 +13,7 @@
"os"
"strings"
+ "golang.org/x/pkgsite/internal/derrors"
// imported to register the postgres migration driver
_ "github.com/golang-migrate/migrate/v4/database/postgres"
// imported to register the file source migration driver
@@ -61,10 +62,14 @@
// ConnectAndExecute connects to the postgres database specified by uri and
// executes dbFunc, then cleans up the database connection.
+// It returns an error that Is derrors.NotFound if no connection could be made.
func ConnectAndExecute(uri string, dbFunc func(*sql.DB) error) (outerErr error) {
pg, err := sql.Open("postgres", uri)
+ if err == nil {
+ err = pg.Ping()
+ }
if err != nil {
- return err
+ return fmt.Errorf("%w: %v", derrors.NotFound, err)
}
defer func() {
if err := pg.Close(); err != nil {