refactor (db): Remove the internal/db test tables from the migrations (#1675)

This commit is contained in:
Jim authored and GitHub committed 2021-11-09 11:58:57 -05:00
1 parent 048fceaf54
commit c047c4d89d
6 files changed
+296 -1

No files matched your search

+1
View File
@@ -19,6 +19,7 @@ func TestDb_Create_OnConflict(t *testing.T) {
wrapper := db.TestWrapper(t)
conn, _ := db.TestSetup(t, "postgres")
rw := db.New(conn)
db.TestCreateTables(t, conn)
// create initial user for on conflict tests
id, err := db.NewPublicId("test-user")
+17
View File
@@ -26,6 +26,7 @@ import (
func TestDb_UpdateUnsetField(t *testing.T) {
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
rw := &Db{
underlying: db,
}
@@ -49,6 +50,7 @@ func TestDb_UpdateUnsetField(t *testing.T) {
func TestDb_Update(t *testing.T) {
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
now := &timestamp.Timestamp{Timestamp: timestamppb.Now()}
publicId, err := NewPublicId("testuser")
require.NoError(t, err)
@@ -626,6 +628,7 @@ func (u *testUserWithVet) VetForWrite(ctx context.Context, r Reader, opType OpTy
func TestDb_Create(t *testing.T) {
// intentionally not run with t.Parallel so we don't need to use DoTx for the Create tests
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
t.Run("simple", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
w := Db{underlying: db}
@@ -801,6 +804,7 @@ func TestDb_Create(t *testing.T) {
func TestDb_LookupByPublicId(t *testing.T) {
t.Parallel()
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
t.Run("simple", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
w := Db{underlying: db}
@@ -856,6 +860,7 @@ func TestDb_LookupByPublicId(t *testing.T) {
func TestDb_LookupWhere(t *testing.T) {
t.Parallel()
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
t.Run("simple", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
w := Db{underlying: db}
@@ -907,6 +912,7 @@ func TestDb_LookupWhere(t *testing.T) {
func TestDb_SearchWhere(t *testing.T) {
t.Parallel()
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
knownUser := testUser(t, db, "zedUser", "", "")
type args struct {
@@ -1059,6 +1065,7 @@ func TestDb_Exec(t *testing.T) {
t.Parallel()
t.Run("update", func(t *testing.T) {
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
require := require.New(t)
w := Db{underlying: db}
id := testId(t)
@@ -1078,6 +1085,7 @@ func TestDb_DoTx(t *testing.T) {
t.Parallel()
ctx := context.TODO()
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
t.Run("valid-with-10-retries", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
w := &Db{underlying: db}
@@ -1250,6 +1258,7 @@ func TestDb_DoTx(t *testing.T) {
func TestDb_Delete(t *testing.T) {
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
newUser := func() *db_test.TestUser {
w := &Db{
underlying: db,
@@ -1475,6 +1484,7 @@ func TestDb_Delete(t *testing.T) {
func TestDb_ScanRows(t *testing.T) {
t.Parallel()
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
t.Run("valid", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
w := Db{underlying: db}
@@ -1502,6 +1512,7 @@ func TestDb_ScanRows(t *testing.T) {
func TestDb_Query(t *testing.T) {
t.Parallel()
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
t.Run("valid", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
rw := Db{underlying: db}
@@ -1530,6 +1541,7 @@ func TestDb_Query(t *testing.T) {
func TestDb_CreateItems(t *testing.T) {
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
testOplogResourceId := testId(t)
createFn := func() []interface{} {
@@ -1742,6 +1754,7 @@ func TestDb_CreateItems(t *testing.T) {
func TestDb_DeleteItems(t *testing.T) {
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
testOplogResourceId := testId(t)
createFn := func() []interface{} {
@@ -2031,6 +2044,7 @@ func testScooterAccessory(t *testing.T, conn *DB, scooterId, accessoryId uint32)
func TestDb_LookupById(t *testing.T) {
t.Parallel()
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
scooter := testScooter(t, db, "", 0)
user := testUser(t, db, "", "", "")
accessory := testAccessory(t, db, "test accessory")
@@ -2170,6 +2184,7 @@ func TestDb_LookupById(t *testing.T) {
func TestDb_GetTicket(t *testing.T) {
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
type notReplayable struct{}
tests := []struct {
name string
@@ -2229,6 +2244,7 @@ func TestDb_GetTicket(t *testing.T) {
func TestDb_WriteOplogEntryWith(t *testing.T) {
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
w := Db{underlying: db}
ticket, err := w.GetTicket(&db_test.TestUser{})
@@ -2959,6 +2975,7 @@ func TestDb_oplogMsgsForItems(t *testing.T) {
func TestDb_lookupAfterWrite(t *testing.T) {
t.Parallel()
db, _ := TestSetup(t, "postgres")
TestCreateTables(t, db)
scooter := testScooter(t, db, "", 0)
user := testUser(t, db, "", "", "")
type args struct {
@@ -0,0 +1,23 @@
begin;
-- remove the internal/db test tables from the migrations.
drop table if exists db_test_user cascade;
drop table if exists db_test_car cascade;
drop table if exists db_test_rental cascade;
drop table if exists db_test_scooter cascade;
drop table if exists db_test_accessory cascade;
drop table if exists db_test_scooter_accessory cascade;
delete from oplog_ticket where name in
(
'db_test_user',
'db_test_car',
'db_test_rental',
'db_test_scooter',
'db_test_accessory',
'db_test_scooter_accessory'
);
commit;
+253
View File
@@ -17,6 +17,7 @@ import (
wrapping "github.com/hashicorp/go-kms-wrapping"
"github.com/hashicorp/go-kms-wrapping/wrappers/aead"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gorm.io/gorm/logger"
)
@@ -227,3 +228,255 @@ func WithTemplate(template string) TestOption {
o.withTemplate = template
}
}
// TestCreateTables will create the test tables for the db pkg
func TestCreateTables(t *testing.T, conn *DB) {
t.Helper()
t.Cleanup(func() { testDropTables(t, conn) })
require := require.New(t)
testCtx := context.Background()
rw := New(conn)
_, err := rw.Exec(testCtx, testQueryCreateTables, nil)
require.NoError(err)
_, err = rw.Exec(testCtx, testQueryAddOplogEntries, nil)
require.NoError(err)
}
func testDropTables(t *testing.T, conn *DB) {
t.Helper()
require := require.New(t)
testCtx := context.Background()
rw := New(conn)
_, err := rw.Exec(testCtx, testQueryDropTables, nil)
require.NoError(err)
_, err = rw.Exec(testCtx, testQueryDeleteOplogEntries, nil)
require.NoError(err)
}
const (
testQueryCreateTables = `
begin;
-- create test tables used in the unit tests for the internal/db package
-- these tables (db_test_user, db_test_car, db_test_rental, db_test_scooter) are
-- not part of the boundary domain model... they are simply used for testing
-- the internal/db package
create table if not exists db_test_user (
id bigint generated always as identity primary key,
create_time wt_timestamp,
update_time wt_timestamp,
public_id text not null unique,
name text unique,
phone_number text,
email text,
version wt_version
);
create trigger
update_time_column
before
update on db_test_user
for each row execute procedure update_time_column();
-- define the immutable fields for db_test_user
create trigger
immutable_columns
before
update on db_test_user
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_user
for each row execute procedure default_create_time();
create trigger
update_version_column
after update on db_test_user
for each row execute procedure update_version_column();
create table if not exists db_test_car (
id bigint generated always as identity primary key,
create_time wt_timestamp,
update_time wt_timestamp,
public_id text not null unique,
name text unique,
model text,
mpg smallint
);
create trigger
update_time_column
before
update on db_test_car
for each row execute procedure update_time_column();
-- define the immutable fields for db_test_car
create trigger
immutable_columns
before
update on db_test_car
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_car
for each row execute procedure default_create_time();
create table if not exists db_test_rental (
id bigint generated always as identity primary key,
create_time wt_timestamp,
update_time wt_timestamp,
public_id text not null unique,
name text unique,
user_id bigint not null references db_test_user(id),
car_id bigint not null references db_test_car(id)
);
create trigger
update_time_column
before
update on db_test_rental
for each row execute procedure update_time_column();
-- define the immutable fields for db_test_rental
create trigger
immutable_columns
before
update on db_test_rental
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_rental
for each row execute procedure default_create_time();
create table if not exists db_test_scooter (
id bigint generated always as identity primary key,
create_time wt_timestamp,
update_time wt_timestamp,
private_id text not null unique,
name text unique,
model text,
mpg smallint
);
create trigger
update_time_column
before
update on db_test_scooter
for each row execute procedure update_time_column();
-- define the immutable fields for db_test_scooter
create trigger
immutable_columns
before
update on db_test_scooter
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_scooter
for each row execute procedure default_create_time();
create table if not exists db_test_accessory (
accessory_id bigint generated always as identity primary key,
create_time wt_timestamp,
update_time wt_timestamp,
description text not null
);
create trigger
update_time_column
before
update on db_test_accessory
for each row execute procedure update_time_column();
create trigger
immutable_columns
before
update on db_test_accessory
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_accessory
for each row execute procedure default_create_time();
create table if not exists db_test_scooter_accessory (
accessory_id bigint references db_test_accessory(accessory_id),
scooter_id bigint references db_test_scooter(id),
create_time wt_timestamp,
update_time wt_timestamp,
review text,
primary key(accessory_id, scooter_id)
);
create trigger
update_time_column
before
update on db_test_scooter_accessory
for each row execute procedure update_time_column();
create trigger
immutable_columns
before
update on db_test_scooter_accessory
for each row execute procedure immutable_columns('create_time');
create trigger
default_create_time_column
before
insert on db_test_scooter_accessory
for each row execute procedure default_create_time();
commit;
`
testQueryDropTables = `
begin;
drop table if exists db_test_user cascade;
drop table if exists db_test_car cascade;
drop table if exists db_test_rental cascade;
drop table if exists db_test_scooter cascade;
drop table if exists db_test_accessory cascade;
drop table if exists db_test_scooter_accessory cascade;
commit;
`
testQueryAddOplogEntries = `
begin;
insert into oplog_ticket (name, version)
values
('db_test_user', 1),
('db_test_car', 1),
('db_test_rental', 1),
('db_test_scooter', 1),
('db_test_accessory', 1),
('db_test_scooter_accessory', 1);
commit;
`
testQueryDeleteOplogEntries = `
begin;
delete from oplog_ticket where name in
(
'db_test_user',
'db_test_car',
'db_test_rental',
'db_test_scooter',
'db_test_accessory',
'db_test_scooter_accessory'
);
commit;
`
)
+1
View File
@@ -23,6 +23,7 @@ func Test_Utils(t *testing.T) {
func TestVerifyOplogEntry(t *testing.T) {
db, _ := TestSetup(t, "postgres")
assert := assert.New(t)
TestCreateTables(t, db)
t.Run("valid", func(t *testing.T) {
rw := Db{underlying: db}
+1 -1
View File
@@ -75,7 +75,7 @@ func Test_testInitStore(t *testing.T) {
testInitStore(t, cleanup, url)
const query = `
select count(*) from information_schema."tables" t where table_name = 'db_test_user';
select count(*) from information_schema."tables" t where table_name = 'boundary_schema_version';
`
db, err := common.SqlOpen("postgres", url)
require.NoError(err)