cache_sqlite_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package server
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "github.com/stretchr/testify/assert"
  6. "path/filepath"
  7. "testing"
  8. "time"
  9. )
  10. func TestSqliteCache_Messages(t *testing.T) {
  11. testCacheMessages(t, newSqliteTestCache(t))
  12. }
  13. func TestSqliteCache_MessagesScheduled(t *testing.T) {
  14. testCacheMessagesScheduled(t, newSqliteTestCache(t))
  15. }
  16. func TestSqliteCache_Topics(t *testing.T) {
  17. testCacheTopics(t, newSqliteTestCache(t))
  18. }
  19. func TestSqliteCache_MessagesTagsPrioAndTitle(t *testing.T) {
  20. testCacheMessagesTagsPrioAndTitle(t, newSqliteTestCache(t))
  21. }
  22. func TestSqliteCache_Prune(t *testing.T) {
  23. testCachePrune(t, newSqliteTestCache(t))
  24. }
  25. func TestSqliteCache_Migration_From0(t *testing.T) {
  26. filename := newSqliteTestCacheFile(t)
  27. db, err := sql.Open("sqlite3", filename)
  28. assert.Nil(t, err)
  29. // Create "version 0" schema
  30. _, err = db.Exec(`
  31. BEGIN;
  32. CREATE TABLE IF NOT EXISTS messages (
  33. id VARCHAR(20) PRIMARY KEY,
  34. time INT NOT NULL,
  35. topic VARCHAR(64) NOT NULL,
  36. message VARCHAR(1024) NOT NULL
  37. );
  38. CREATE INDEX IF NOT EXISTS idx_topic ON messages (topic);
  39. COMMIT;
  40. `)
  41. assert.Nil(t, err)
  42. // Insert a bunch of messages
  43. for i := 0; i < 10; i++ {
  44. _, err = db.Exec(`INSERT INTO messages (id, time, topic, message) VALUES (?, ?, ?, ?)`,
  45. fmt.Sprintf("abcd%d", i), time.Now().Unix(), "mytopic", fmt.Sprintf("some message %d", i))
  46. assert.Nil(t, err)
  47. }
  48. // Create cache to trigger migration
  49. c := newSqliteTestCacheFromFile(t, filename)
  50. messages, err := c.Messages("mytopic", sinceAllMessages, false)
  51. assert.Nil(t, err)
  52. assert.Equal(t, 10, len(messages))
  53. assert.Equal(t, "some message 5", messages[5].Message)
  54. assert.Equal(t, "", messages[5].Title)
  55. assert.Nil(t, messages[5].Tags)
  56. assert.Equal(t, 0, messages[5].Priority)
  57. rows, err := c.db.Query(`SELECT version FROM schemaVersion`)
  58. assert.Nil(t, err)
  59. assert.True(t, rows.Next())
  60. var schemaVersion int
  61. assert.Nil(t, rows.Scan(&schemaVersion))
  62. assert.Equal(t, 2, schemaVersion)
  63. }
  64. func newSqliteTestCache(t *testing.T) *sqliteCache {
  65. c, err := newSqliteCache(newSqliteTestCacheFile(t))
  66. if err != nil {
  67. t.Fatal(err)
  68. }
  69. return c
  70. }
  71. func newSqliteTestCacheFile(t *testing.T) string {
  72. return filepath.Join(t.TempDir(), "cache.db")
  73. }
  74. func newSqliteTestCacheFromFile(t *testing.T, filename string) *sqliteCache {
  75. c, err := newSqliteCache(filename)
  76. if err != nil {
  77. t.Fatal(err)
  78. }
  79. return c
  80. }