| package identitycache | |
| import ( | |
| "sort" | |
| "testing" | |
| "time" | |
| "gotest.tools/v3/assert" | |
| is "gotest.tools/v3/assert/cmp" | |
| ) | |
| func TestBoltBackendWalkIncludesExpiredEntriesUntilPrune(t *testing.T) { | |
| ctx := t.Context() | |
| now := time.Now().UTC() | |
| backend, err := NewBoltDBBackend(t.TempDir()) | |
| assert.NilError(t, err) | |
| defer backend.Close() | |
| boltbk := backend.(*boltBackend) | |
| assert.NilError(t, boltbk.Store(ctx, "fresh", Entry{ | |
| CachedAt: now.Add(-time.Minute), | |
| ExpiresAt: now.Add(time.Hour), | |
| }, now)) | |
| assert.NilError(t, boltbk.Store(ctx, "expired", Entry{ | |
| CachedAt: now.Add(-2 * time.Hour), | |
| ExpiresAt: now.Add(-time.Minute), | |
| }, now)) | |
| var keys []string | |
| assert.NilError(t, boltbk.Walk(ctx, now, func(cacheKey string, _ Entry) error { | |
| keys = append(keys, cacheKey) | |
| return nil | |
| })) | |
| sort.Strings(keys) | |
| assert.Check(t, is.DeepEqual(keys, []string{"expired", "fresh"})) | |
| assert.NilError(t, boltbk.PruneExpired(ctx, now)) | |
| keys = nil | |
| assert.NilError(t, boltbk.Walk(ctx, now, func(cacheKey string, _ Entry) error { | |
| keys = append(keys, cacheKey) | |
| return nil | |
| })) | |
| assert.Check(t, is.DeepEqual(keys, []string{"fresh"})) | |
| } | |
| func TestBoltBackendLoadExpiredReturnsMissWithoutDelete(t *testing.T) { | |
| ctx := t.Context() | |
| now := time.Now().UTC() | |
| backend, err := NewBoltDBBackend(t.TempDir()) | |
| assert.NilError(t, err) | |
| defer backend.Close() | |
| boltbk := backend.(*boltBackend) | |
| assert.NilError(t, boltbk.Store(ctx, "expired", Entry{ | |
| CachedAt: now.Add(-2 * time.Hour), | |
| ExpiresAt: now.Add(-time.Minute), | |
| }, now)) | |
| _, ok, err := boltbk.Load(ctx, "expired", now) | |
| assert.NilError(t, err) | |
| assert.Check(t, !ok) | |
| seen := false | |
| assert.NilError(t, boltbk.Walk(ctx, now, func(cacheKey string, _ Entry) error { | |
| if cacheKey == "expired" { | |
| seen = true | |
| } | |
| return nil | |
| })) | |
| assert.Check(t, seen) | |
| } |