Skip to content
Snippets Groups Projects
Commit d5be5d3e authored by Philipp Heckel's avatar Philipp Heckel
Browse files

Test schema migration

parent 98c1ab9e
No related branches found
No related tags found
No related merge requests found
package server package server
import ( import (
"database/sql"
"fmt"
"github.com/stretchr/testify/assert"
"path/filepath" "path/filepath"
"testing" "testing"
"time"
) )
func TestSqliteCache_AddMessage(t *testing.T) { func TestSqliteCache_AddMessage(t *testing.T) {
...@@ -21,8 +25,64 @@ func TestSqliteCache_Prune(t *testing.T) { ...@@ -21,8 +25,64 @@ func TestSqliteCache_Prune(t *testing.T) {
testCachePrune(t, newSqliteTestCache(t)) testCachePrune(t, newSqliteTestCache(t))
} }
func newSqliteTestCache(t *testing.T) cache { func TestSqliteCache_Migration_0to1(t *testing.T) {
filename := filepath.Join(t.TempDir(), "cache.db") filename := newSqliteTestCacheFile(t)
db, err := sql.Open("sqlite3", filename)
assert.Nil(t, err)
// Create "version 0" schema
_, err = db.Exec(`
BEGIN;
CREATE TABLE IF NOT EXISTS messages (
id VARCHAR(20) PRIMARY KEY,
time INT NOT NULL,
topic VARCHAR(64) NOT NULL,
message VARCHAR(1024) NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_topic ON messages (topic);
COMMIT;
`)
assert.Nil(t, err)
// Insert a bunch of messages
for i := 0; i < 10; i++ {
_, err = db.Exec(`INSERT INTO messages (id, time, topic, message) VALUES (?, ?, ?, ?)`,
fmt.Sprintf("abcd%d", i), time.Now().Unix(), "mytopic", fmt.Sprintf("some message %d", i))
assert.Nil(t, err)
}
// Create cache to trigger migration
c := newSqliteTestCacheFromFile(t, filename)
messages, err := c.Messages("mytopic", sinceAllMessages)
assert.Nil(t, err)
assert.Equal(t, 10, len(messages))
assert.Equal(t, "some message 5", messages[5].Message)
assert.Equal(t, "", messages[5].Title)
assert.Nil(t, messages[5].Tags)
assert.Equal(t, 0, messages[5].Priority)
rows, err := c.db.Query(`SELECT version FROM schemaVersion`)
assert.Nil(t, err)
assert.True(t, rows.Next())
var schemaVersion int
assert.Nil(t, rows.Scan(&schemaVersion))
assert.Equal(t, 1, schemaVersion)
}
func newSqliteTestCache(t *testing.T) *sqliteCache {
c, err := newSqliteCache(newSqliteTestCacheFile(t))
if err != nil {
t.Fatal(err)
}
return c
}
func newSqliteTestCacheFile(t *testing.T) string {
return filepath.Join(t.TempDir(), "cache.db")
}
func newSqliteTestCacheFromFile(t *testing.T, filename string) *sqliteCache {
c, err := newSqliteCache(filename) c, err := newSqliteCache(filename)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment