Files
threshold/internal/oplog/testing.go
T
Todd Knight ec6151d174 Organize DB Schema Migration Code and DB Init Checks (#842)
Create Schema Manager and propagate contexts into the DB calls downstream.
Add checks at controller startup and database init for correct schema version and schema migration dirty bit being set.
2021-01-19 10:40:41 -07:00

92 lines
2.2 KiB
Go

package oplog
import (
"context"
"crypto/rand"
"database/sql"
"testing"
"github.com/hashicorp/boundary/internal/db/schema"
"github.com/hashicorp/boundary/internal/docker"
"github.com/hashicorp/boundary/internal/oplog/oplog_test"
wrapping "github.com/hashicorp/go-kms-wrapping"
"github.com/hashicorp/go-kms-wrapping/wrappers/aead"
"github.com/hashicorp/go-uuid"
"github.com/jinzhu/gorm"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func testCleanup(t *testing.T, cleanupFunc func() error, db *gorm.DB) {
t.Helper()
err := cleanupFunc()
assert.NoError(t, err)
err = db.Close()
assert.NoError(t, err)
}
func testUser(t *testing.T, db *gorm.DB, name, phoneNumber, email string) *oplog_test.TestUser {
t.Helper()
u := &oplog_test.TestUser{
Name: name,
PhoneNumber: phoneNumber,
Email: email,
}
w := GormWriter{db}
err := w.Create(&u)
require.NoError(t, err)
return u
}
func testFindUser(t *testing.T, db *gorm.DB, userId uint32) *oplog_test.TestUser {
t.Helper()
var foundUser oplog_test.TestUser
err := db.Where("id = ?", userId).First(&foundUser).Error
require.NoError(t, err)
return &foundUser
}
func testId(t *testing.T) string {
t.Helper()
id, err := uuid.GenerateUUID()
require.NoError(t, err)
return id
}
func testInitDbInDocker(t *testing.T) (cleanup func() error, retURL string, err error) {
t.Helper()
cleanup, retURL, _, err = docker.StartDbInDocker("postgres")
if err != nil {
t.Fatal(err)
}
testInitStore(t, cleanup, retURL)
return
}
// testWrapper initializes an AEAD wrapping.Wrapper for testing the oplog
func testWrapper(t *testing.T) wrapping.Wrapper {
t.Helper()
rootKey := make([]byte, 32)
n, err := rand.Read(rootKey)
require.NoError(t, err)
require.Equal(t, n, 32)
root := aead.NewWrapper(nil)
err = root.SetAESGCMKeyBytes(rootKey)
require.NoError(t, err)
return root
}
// testInitStore will execute the migrations needed to initialize the store for tests
func testInitStore(t *testing.T, cleanup func() error, url string) {
t.Helper()
ctx := context.Background()
dialect := "postgres"
d, err := sql.Open(dialect, url)
require.NoError(t, err)
sm, err := schema.NewManager(ctx, dialect, d)
require.NoError(t, err)
require.NoError(t, sm.RollForward(ctx))
}