cache_sqlite_test.go 2.2 KB

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