b8ba37b0727c919df577ed6e2489cc9d0e580730

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

test: use postgres in testscript

Diff

This diff is truncated to protect this page.

  1diff --git a/testscript/script_test.go b/testscript/script_test.go
  2index 3c544b037677647b4c4f0d7d1e44556ceb3e5e48..1372c82584b5291904e4299dadf5d3ecb704e78d 100644
  3--- a/testscript/script_test.go
  4+++ b/testscript/script_test.go
  5@@ -3,6 +3,7 @@ package testscript
  6 import (
  7 	"bytes"
  8 	"context"
  9+	"database/sql"
 10 	"flag"
 11 	"fmt"
 12 	"io"
 13@@ -30,7 +31,6 @@ import (
 14 	"github.com/rogpeppe/go-internal/testscript"
 15 	"github.com/spf13/cobra"
 16 	"golang.org/x/crypto/ssh"
 17-	_ "modernc.org/sqlite" // sqlite Driver
 18 )
 19 
 20 var update = flag.Bool("update", false, "update script files")
 21@@ -101,6 +101,26 @@ func TestScript(t *testing.T) {
 22 			cfg.LFS.Enabled = true
 23 			cfg.LFS.SSHEnabled = true
 24 
 25+			dbDriver := os.Getenv("DB_DRIVER")
 26+			if dbDriver != "" {
 27+				cfg.DB.Driver = dbDriver
 28+			}
 29+
 30+			dbDsn := os.Getenv("DB_DATA_SOURCE")
 31+			if dbDsn != "" {
 32+				cfg.DB.DataSource = dbDsn
 33+			}
 34+
 35+			if cfg.DB.Driver == "postgres" {
 36+				err, cleanup := setupPostgres(e.T(), cfg)
 37+				if err != nil {
 38+					return err
 39+				}
 40+				if cleanup != nil {
 41+					e.Defer(cleanup)
 42+				}
 43+			}
 44+
 45 			if err := cfg.Validate(); err != nil {
 46 				return err
 47 			}
 48@@ -117,7 +137,6 @@ func TestScript(t *testing.T) {
 49 				defer f.Close() // nolint: errcheck
 50 			}
 51 
 52-			// TODO: test postgres
 53 			dbx, err := db.Open(ctx, cfg.DB.Driver, cfg.DB.DataSource)
 54 			if err != nil {
 55 				return fmt.Errorf("open database: %w", err)
 56@@ -385,3 +404,68 @@ func cmdCurl(ts *testscript.TestScript, neg bool, args []string) {
 57 
 58 	check(ts, cmd.Execute(), neg)
 59 }
 60+
 61+func setupPostgres(t testscript.T, cfg *config.Config) (error, func()) {
 62+	// Indicates postgres
 63+	// Create a disposable database
 64+	dbName := fmt.Sprintf("softserve_test_%d", time.Now().UnixNano())
 65+	dbDsn := os.Getenv("DB_DATA_SOURCE")
 66+	if dbDsn == "" {
 67+		cfg.DB.DataSource = "postgres://postgres@localhost:5432/postgres?sslmode=disable"
 68+	}
 69+
 70+	dbUrl, err := url.Parse(cfg.DB.DataSource)
 71+	if err != nil {
 72+		return err, nil
 73+	}
 74+
 75+	connInfo := fmt.Sprintf("host=%s sslmode=disable", dbUrl.Hostname())
 76+	username := dbUrl.User.Username()
 77+	if username != "" {
 78+		connInfo += fmt.Sprintf(" user=%s", username)
 79+		password, ok := dbUrl.User.Password()
 80+		if ok {
 81+			username = fmt.Sprintf("%s:%s", username, password)
 82+			connInfo += fmt.Sprintf(" password=%s", password)
 83+		}
 84+		username = fmt.Sprintf("%s@", username)
 85+	} else {
 86+		connInfo += " user=postgres"
 87+	}
 88+
 89+	port := dbUrl.Port()
 90+	if port != "" {
 91+		connInfo += fmt.Sprintf(" port=%s", port)
 92+		port = fmt.Sprintf(":%s", port)
 93+	}
 94+
 95+	cfg.DB.DataSource = fmt.Sprintf("%s://%s%s%s/%s?sslmode=disable",
 96+		dbUrl.Scheme,
 97+		username,
 98+		dbUrl.Hostname(),
 99+		port,
100+		dbName,
101+	)
102+
103+	// Create the database
104+	db, err := sql.Open(cfg.DB.Driver, connInfo)