60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
package database
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func testDbInit(t *testing.T) (DB, func()) {
|
|
db, err := _init(Options{
|
|
Name: "test_trantor",
|
|
Addr: "/var/run/postgresql/.s.PGSQL.5432",
|
|
// TODO: can it be done with a local user?
|
|
User: "trantor",
|
|
Password: "trantor",
|
|
})
|
|
if err != nil {
|
|
t.Fatal("Init() return an error: ", err)
|
|
}
|
|
|
|
cleanFn := func() {
|
|
entities := []struct {
|
|
name string
|
|
query string
|
|
}{
|
|
{"table", "select tablename from pg_tables where schemaname = 'public'"},
|
|
{"index", "select indexname from pg_indexes where schemaname = 'public'"},
|
|
{"function", `SELECT format('%s(%s)', p.proname, pg_get_function_identity_arguments(p.oid))
|
|
FROM pg_catalog.pg_namespace n
|
|
JOIN pg_catalog.pg_proc p
|
|
ON p.pronamespace = n.oid
|
|
WHERE n.nspname = 'public' AND p.proowner != 10`},
|
|
{"trigger", "select tgname from pg_trigger"},
|
|
}
|
|
|
|
for _, entity := range entities {
|
|
var items []string
|
|
_, err = db.sql.Query(&items, entity.query)
|
|
if err != nil {
|
|
t.Error("get the list of "+entity.name+"return an error: ", err)
|
|
}
|
|
for _, item := range items {
|
|
_, err = db.sql.Exec("drop " + entity.name + " " + item + " cascade")
|
|
if err != nil {
|
|
t.Error("drop ", entity.name, " ", item, " return an error: ", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
err = db.Close()
|
|
if err != nil {
|
|
t.Error("db.Close() return an error: ", err)
|
|
}
|
|
}
|
|
|
|
return db, cleanFn
|
|
}
|
|
|
|
func TestInit(t *testing.T) {
|
|
_, dbclose := testDbInit(t)
|
|
defer dbclose()
|
|
}
|