package cache2go import ( "testing" "time" ) type myStruct struct { XEntry data string } func TestCache(t *testing.T) { a := &myStruct{data: "mama are mere"} a.XCache("mama", 1*time.Second, a) b, err := GetXCached("mama") if err != nil || b == nil || b != a { t.Error("Error retriving data from cache", err) } } func TestCacheExpire(t *testing.T) { a := &myStruct{data: "mama are mere"} a.XCache("mama", 1*time.Second, a) b, err := GetXCached("mama") if err != nil || b == nil || b.(*myStruct).data != "mama are mere" { t.Error("Error retriving data from cache", err) } time.Sleep(1001 * time.Millisecond) b, err = GetXCached("mama") if err == nil || b != nil { t.Error("Error expiring data") } } func TestCacheKeepAlive(t *testing.T) { a := &myStruct{data: "mama are mere"} a.XCache("mama", 1*time.Second, a) b, err := GetXCached("mama") if err != nil || b == nil || b.(*myStruct).data != "mama are mere" { t.Error("Error retriving data from cache", err) } time.Sleep(500 * time.Millisecond) b.KeepAlive() time.Sleep(501 * time.Millisecond) if err != nil { t.Error("Error keeping cached data alive", err) } time.Sleep(1000 * time.Millisecond) b, err = GetXCached("mama") if err == nil || b != nil { t.Error("Error expiring data") } } func TestFlush(t *testing.T) { a := &myStruct{data: "mama are mere"} a.XCache("mama", 10*time.Second, a) time.Sleep(1000 * time.Millisecond) XFlush() b, err := GetXCached("mama") if err == nil || b != nil { t.Error("Error expiring data") } } func TestFlushNoTimout(t *testing.T) { a := &myStruct{data: "mama are mere"} a.XCache("mama", 10*time.Second, a) XFlush() b, err := GetXCached("mama") if err == nil || b != nil { t.Error("Error expiring data") } } func TestRemKey(t *testing.T) { Cache("t1", "test") if t1, err := GetCached("t1"); err != nil || t1 != "test" { t.Error("Error setting cache") } RemKey("t1") if t1, err := GetCached("t1"); err == nil || t1 == "test" { t.Error("Error removing cached key") } } func TestXRemKey(t *testing.T) { a := &myStruct{data: "mama are mere"} a.XCache("mama", 10*time.Second, a) if t1, err := GetXCached("mama"); err != nil || t1 != a { t.Error("Error setting xcache") } XRemKey("mama") if t1, err := GetXCached("mama"); err == nil || t1 == a { t.Error("Error removing xcached key: ", err, t1) } } /* These tests sometimes fails on drone.io func TestGetKeyAge(t *testing.T) { Cache("t1", "test") d, err := GetKeyAge("t1") if err != nil || d > time.Millisecond || d < time.Nanosecond { t.Error("Error getting cache key age: ", d) } } func TestXGetKeyAge(t *testing.T) { a := &myStruct{data: "mama are mere"} a.XCache("t1", 10*time.Second, a) d, err := GetXKeyAge("t1") if err != nil || d > time.Millisecond || d < time.Nanosecond { t.Error("Error getting cache key age: ", d) } } */ func TestRemPrefixKey(t *testing.T) { Cache("x_t1", "test") Cache("y_t1", "test") RemPrefixKey("x_") _, errX := GetCached("x_t1") _, errY := GetCached("y_t1") if errX == nil || errY != nil { t.Error("Error removing prefix: ", errX, errY) } } func TestXRemPrefixKey(t *testing.T) { a := &myStruct{data: "mama are mere"} a.XCache("x_t1", 10*time.Second, a) a.XCache("y_t1", 10*time.Second, a) XRemPrefixKey("x_") _, errX := GetXCached("x_t1") _, errY := GetXCached("y_t1") if errX == nil || errY != nil { t.Error("Error removing prefix: ", errX, errY) } }