package main import ( "errors" "testing" "time" "github.com/stretchr/testify/require" ) func TestTTLNetCache(t *testing.T) { ttlDuration := time.Millisecond * 50 cache := newNetworkTTLCache(10, ttlDuration, testNetValueReader) key := "key" t.Run("Test Add and Get", func(t *testing.T) { ti := time.Now() cache.set(key, ti, nil) val, err := cache.get(key) require.NoError(t, err) require.Equal(t, ti, val) }) t.Run("Test TTL", func(t *testing.T) { ti := time.Now() cache.set(key, ti, nil) time.Sleep(2 * ttlDuration) val, err := cache.get(key) require.NoError(t, err) require.NotEqual(t, val, ti) }) t.Run("Test Remove", func(t *testing.T) { ti := time.Now() cache.set(key, ti, nil) cache.remove(key) val, err := cache.get(key) require.NoError(t, err) require.NotEqual(t, val, ti) }) t.Run("Test Cache Error", func(t *testing.T) { cache.set("error", time.Now(), errors.New("mock error")) _, err := cache.get("error") require.Error(t, err) require.Equal(t, "mock error", err.Error()) }) } func testNetValueReader(key string) (time.Time, error) { if key == "error" { return time.Now(), errors.New("mock error") } return time.Now(), nil }