mirror of
https://github.com/Luzifer/twitch-bot.git
synced 2024-11-09 16:50:01 +00:00
99 lines
2.4 KiB
Go
99 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)
|
||
|
}
|
||
|
}
|