b8ba37b0727c919df577ed6e2489cc9d0e580730
- Author
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Committer
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Date
Message
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)