database_storage_test.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package remotecache
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/bmizerany/assert"
  6. "github.com/grafana/grafana/pkg/log"
  7. "github.com/grafana/grafana/pkg/services/sqlstore"
  8. )
  9. func TestDatabaseStorageGarbageCollection(t *testing.T) {
  10. sqlstore := sqlstore.InitTestDB(t)
  11. db := &databaseCache{
  12. SQLStore: sqlstore,
  13. log: log.New("remotecache.database"),
  14. }
  15. obj := &CacheableStruct{String: "foolbar"}
  16. //set time.now to 2 weeks ago
  17. var err error
  18. getTime = func() time.Time { return time.Now().AddDate(0, 0, -2) }
  19. err = db.Set("key1", obj, 1000*time.Second)
  20. assert.Equal(t, err, nil)
  21. err = db.Set("key2", obj, 1000*time.Second)
  22. assert.Equal(t, err, nil)
  23. err = db.Set("key3", obj, 1000*time.Second)
  24. assert.Equal(t, err, nil)
  25. // insert object that should never expire
  26. db.Set("key4", obj, 0)
  27. getTime = time.Now
  28. db.Set("key5", obj, 1000*time.Second)
  29. //run GC
  30. db.internalRunGC()
  31. //try to read values
  32. _, err = db.Get("key1")
  33. assert.Equal(t, err, ErrCacheItemNotFound, "expected cache item not found. got: ", err)
  34. _, err = db.Get("key2")
  35. assert.Equal(t, err, ErrCacheItemNotFound)
  36. _, err = db.Get("key3")
  37. assert.Equal(t, err, ErrCacheItemNotFound)
  38. _, err = db.Get("key4")
  39. assert.Equal(t, err, nil)
  40. _, err = db.Get("key5")
  41. assert.Equal(t, err, nil)
  42. }