Newer
Older
Garet Halliday
committed
"strconv"
"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"
func daisyChain(creds auth.Credentials, control dialer.Net, n int) (dialer.Net, error) {
for i := 0; i < n; i++ {
}
if i%2 == 0 {
options = transaction.Apply(options)
} else {
options.ServerResetQuery = "DISCARD ALL"
options = session.Apply(options)
}
p := pool.NewPool(options)
p.AddRecipe("runner", recipe.NewRecipe(recipe.Options{
Dialer: control,
}))
g.Add("runner", "pool", p)
listener, err := gat.Listen("tcp", ":0", frontends.AcceptOptions{})
if err != nil {
}
port := listener.Listener.Addr().(*net.TCPAddr).Port
go func() {
}
}()
control = dialer.Net{
Network: "tcp",
Address: ":" + strconv.Itoa(port),
AcceptOptions: backends.AcceptOptions{
Garet Halliday
committed
Username: "runner",
Credentials: creds,
Database: "pool",
},
}
}
return control, nil
}
func TestTester(t *testing.T) {
control := dialer.Net{
Network: "tcp",
Address: "localhost:5432",
AcceptOptions: backends.AcceptOptions{
Garet Halliday
committed
Username: "postgres",
Credentials: credentials.Cleartext{
Username: "postgres",
Password: "password",
},
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,
}
parent, err := daisyChain(creds, control, 16)
var g gat.PoolsMap
transactionPool := pool.NewPool(transaction.Apply(pool.Options{
Credentials: creds,
}))
transactionPool.AddRecipe("runner", recipe.NewRecipe(recipe.Options{
}))
g.Add("runner", "transaction", transactionPool)
sessionPool := pool.NewPool(session.Apply(pool.Options{
Credentials: creds,
ServerResetQuery: "discard all",
}))
sessionPool.AddRecipe("runner", recipe.NewRecipe(recipe.Options{
}))
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() {
if err != nil {
t.Error(err)
}
}()
transactionDialer := dialer.Net{
Network: "tcp",
Address: ":" + strconv.Itoa(port),
AcceptOptions: backends.AcceptOptions{
Garet Halliday
committed
Username: "runner",
Credentials: creds,
Database: "transaction",
},
}
sessionDialer := dialer.Net{
Network: "tcp",
Address: ":" + strconv.Itoa(port),
AcceptOptions: backends.AcceptOptions{
Garet Halliday
committed
Username: "runner",
Credentials: creds,
Database: "session",
},
}
tester := test.NewTester(test.Config{
"control": control,
"transaction": transactionDialer,
"session": sessionDialer,
tests.EQP0,
tests.EQP1,
tests.EQP2,
tests.EQP3,
tests.EQP4,
tests.EQP5,
tests.EQP6,
tests.EQP7,
tests.CopyIn0,
tests.CopyIn1,
Garet Halliday
committed
tests.DiscardAll,