mirror of https://github.com/Dreamacro/clash.git
71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
package cache
|
|
|
|
import (
|
|
"runtime"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestCache_Basic(t *testing.T) {
|
|
interval := 200 * time.Millisecond
|
|
ttl := 20 * time.Millisecond
|
|
c := New(interval)
|
|
c.Put("int", 1, ttl)
|
|
c.Put("string", "a", ttl)
|
|
|
|
i := c.Get("int")
|
|
assert.Equal(t, i.(int), 1, "should recv 1")
|
|
|
|
s := c.Get("string")
|
|
assert.Equal(t, s.(string), "a", "should recv 'a'")
|
|
}
|
|
|
|
func TestCache_TTL(t *testing.T) {
|
|
interval := 200 * time.Millisecond
|
|
ttl := 20 * time.Millisecond
|
|
now := time.Now()
|
|
c := New(interval)
|
|
c.Put("int", 1, ttl)
|
|
c.Put("int2", 2, ttl)
|
|
|
|
i := c.Get("int")
|
|
_, expired := c.GetWithExpire("int2")
|
|
assert.Equal(t, i.(int), 1, "should recv 1")
|
|
assert.True(t, now.Before(expired))
|
|
|
|
time.Sleep(ttl * 2)
|
|
i = c.Get("int")
|
|
j, _ := c.GetWithExpire("int2")
|
|
assert.Nil(t, i, "should recv nil")
|
|
assert.Nil(t, j, "should recv nil")
|
|
}
|
|
|
|
func TestCache_AutoCleanup(t *testing.T) {
|
|
interval := 10 * time.Millisecond
|
|
ttl := 15 * time.Millisecond
|
|
c := New(interval)
|
|
c.Put("int", 1, ttl)
|
|
|
|
time.Sleep(ttl * 2)
|
|
i := c.Get("int")
|
|
j, _ := c.GetWithExpire("int")
|
|
assert.Nil(t, i, "should recv nil")
|
|
assert.Nil(t, j, "should recv nil")
|
|
}
|
|
|
|
func TestCache_AutoGC(t *testing.T) {
|
|
sign := make(chan struct{})
|
|
go func() {
|
|
interval := 10 * time.Millisecond
|
|
ttl := 15 * time.Millisecond
|
|
c := New(interval)
|
|
c.Put("int", 1, ttl)
|
|
sign <- struct{}{}
|
|
}()
|
|
|
|
<-sign
|
|
runtime.GC()
|
|
}
|