twitch-bot/pkg/database/connector_test.go

98 lines
2.4 KiB
Go

package database
import (
"testing"
"github.com/pkg/errors"
)
const testEncryptionPass = "password123"
func TestNewConnector(t *testing.T) {
dbc, err := New("sqlite", ":memory:", testEncryptionPass)
if err != nil {
t.Fatalf("creating database connector: %s", err)
}
defer dbc.Close()
row := dbc.DB().QueryRow("SELECT count(1) AS tables FROM sqlite_master WHERE type='table' AND name='core_kv';")
var count int
if err = row.Scan(&count); err != nil {
t.Fatalf("reading table count result")
}
if count != 1 {
t.Errorf("expected to find one result, got %d in count of core_kv table", count)
}
}
func TestCoreMetaRoundtrip(t *testing.T) {
dbc, err := New("sqlite", ":memory:", testEncryptionPass)
if err != nil {
t.Fatalf("creating database connector: %s", err)
}
defer dbc.Close()
var (
arbitrary struct{ A string }
testKey = "arbitrary"
)
if err = dbc.ReadCoreMeta(testKey, &arbitrary); !errors.Is(err, ErrCoreMetaNotFound) {
t.Error("expected core_kv not to contain key after init")
}
checkWriteRead := func(testString string) {
arbitrary.A = testString
if err = dbc.StoreCoreMeta(testKey, arbitrary); err != nil {
t.Errorf("storing core_kv: %s", err)
}
arbitrary.A = "" // Clear to test unmarshal
if err = dbc.ReadCoreMeta(testKey, &arbitrary); err != nil {
t.Errorf("reading core_kv: %s", err)
}
if arbitrary.A != testString {
t.Errorf("expected meta entry to have %q, got %q", testString, arbitrary.A)
}
}
checkWriteRead("just a string") // Turn one: Init from not existing
checkWriteRead("another random string") // Turn two: Overwrite
}
func TestCoreMetaEncryption(t *testing.T) {
dbc, err := New("sqlite", ":memory:", testEncryptionPass)
if err != nil {
t.Fatalf("creating database connector: %s", err)
}
defer dbc.Close()
var (
arbitrary struct{ A string }
testKey = "arbitrary"
testString = "foobar"
)
arbitrary.A = testString
if err = dbc.StoreEncryptedCoreMeta(testKey, arbitrary); err != nil {
t.Fatalf("storing encrypted core meta: %s", err)
}
if err = dbc.ReadCoreMeta(testKey, &arbitrary); err == nil {
t.Error("reading encrypted meta without decryption succeeded")
}
arbitrary.A = ""
if err = dbc.ReadEncryptedCoreMeta(testKey, &arbitrary); err != nil {
t.Errorf("reading encrypted meta: %s", err)
}
if arbitrary.A != testString {
t.Errorf("unexpected value: %q != %q", arbitrary.A, testString)
}
}