Newer
Older
"testing"
"pggat/lib/auth/credentials"
"pggat/lib/bouncer/backends/v0"
"pggat/lib/bouncer/frontends/v0"
"pggat/lib/gat"
"pggat/lib/gat/pool/pools/session"
"pggat/lib/gat/pool/pools/transaction"
"pggat/test"
"pggat/test/tests"
)
func TestTester(t *testing.T) {
control := dialer.Net{
Network: "tcp",
Address: "localhost:5432",
AcceptOptions: backends.AcceptOptions{
Credentials: credentials.Cleartext{
Username: "postgres",
Password: "password",
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
Database: "postgres",
},
}
// generate random password for testing
var raw [32]byte
_, err := rand.Read(raw[:])
if err != nil {
t.Error(err)
return
}
password := hex.EncodeToString(raw[:])
creds := credentials.Cleartext{
Username: "runner",
Password: password,
}
var g gat.PoolsMap
transactionPool := pool.NewPool(transaction.Apply(pool.Options{
Credentials: creds,
}))
transactionPool.AddRecipe("runner", recipe.NewRecipe(recipe.Options{
Dialer: control,
}))
g.Add("runner", "transaction", transactionPool)
sessionPool := pool.NewPool(session.Apply(pool.Options{
Credentials: creds,
ServerResetQuery: "discard all",
}))
sessionPool.AddRecipe("runner", recipe.NewRecipe(recipe.Options{
Dialer: control,
}))
g.Add("runner", "session", sessionPool)
listener, err := gat.Listen("tcp", ":0", frontends.AcceptOptions{})
if err != nil {
t.Error(err)
return
}
port := listener.Listener.Addr().(*net.TCPAddr).Port
go func() {
err := gat.Serve(listener, &g)
if err != nil {
t.Error(err)
}
}()
transactionDialer := dialer.Net{
Network: "tcp",
Address: ":" + strconv.Itoa(port),
AcceptOptions: backends.AcceptOptions{
Credentials: creds,
Database: "transaction",
},
}
sessionDialer := dialer.Net{
Network: "tcp",
Address: ":" + strconv.Itoa(port),
AcceptOptions: backends.AcceptOptions{
Credentials: creds,
Database: "session",
},
}
tester := test.NewTester(test.Config{
Modes: map[string]dialer.Dialer{
"control": control,
"transaction": transactionDialer,
"session": sessionDialer,
tests.EQP0,
tests.EQP1,
tests.EQP2,
tests.EQP3,
tests.EQP4,
tests.EQP5,
tests.EQP6,
tests.EQP7,