...
1
20
21 package sqlcon
22
23 import (
24 "fmt"
25 "net/url"
26 "strings"
27 "sync"
28 "testing"
29
30 _ "github.com/go-sql-driver/mysql"
31 _ "github.com/jackc/pgx/v4/stdlib"
32 "github.com/stretchr/testify/assert"
33 "github.com/stretchr/testify/require"
34
35 "github.com/ory/dockertest/v3"
36 )
37
38 var (
39 mysqlURL string
40 postgresURL string
41 cockroachURL string
42 resources []*dockertest.Resource
43 lock sync.RWMutex
44 )
45
46 func merge(u string, query url.Values) string {
47 if strings.Contains(u, "?") {
48 return u + "&" + query.Encode()
49 }
50 return u + "?" + query.Encode()
51 }
52
53 func TestClassifyDSN(t *testing.T) {
54 for k, tc := range [][]string{
55 {"mysql://foo:bar@tcp(baz:1234)/db?foo=bar", "mysql://*:*@tcp(baz:1234)/db?foo=bar"},
56 {"mysql://foo@email.com:bar@tcp(baz:1234)/db?foo=bar", "mysql://*:*@tcp(baz:1234)/db?foo=bar"},
57 {"postgres://foo:bar@baz:1234/db?foo=bar", "postgres://*:*@baz:1234/db?foo=bar"},
58 {"postgres://foo@email.com:bar@baz:1234/db?foo=bar", "postgres://*:*@baz:1234/db?foo=bar"},
59 } {
60 t.Run(fmt.Sprintf("case=%d", k), func(t *testing.T) {
61 assert.Equal(t, tc[1], classifyDSN(tc[0]))
62 })
63 }
64 }
65
66 func TestCleanQueryURL(t *testing.T) {
67 a, err := url.ParseQuery("max_conn_lifetime=1h&max_idle_conns=10&max_conns=10")
68 require.NoError(t, err)
69
70 b := cleanURLQuery(a)
71 assert.NotEqual(t, a, b)
72 assert.NotEqual(t, a.Encode(), b.Encode())
73 assert.Equal(t, true, strings.Contains(a.Encode(), "max_conn_lifetime"))
74 assert.Equal(t, false, strings.Contains(b.Encode(), "max_conn_lifetime"))
75 }
76
View as plain text