mirror of
				https://github.com/xjasonlyu/tun2socks.git
				synced 2025-10-31 12:06:37 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
		
			Executable File
		
	
	
	
	
| 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()
 | |
| }
 | 
