Add a test for file serialization and one to ensure objects expire even after having been serialized and reloaded

This commit is contained in:
Patrick Mylund Nielsen 2012-01-29 05:30:21 +01:00
parent bbb477e5bd
commit eaf2373adf
1 changed files with 41 additions and 1 deletions

View File

@ -2,6 +2,7 @@ package cache
import ( import (
"bytes" "bytes"
"os"
"testing" "testing"
"time" "time"
) )
@ -466,6 +467,8 @@ func TestCacheSerialization(t *testing.T) {
func testFillAndSerialize(t *testing.T, tc *Cache) { func testFillAndSerialize(t *testing.T, tc *Cache) {
tc.Set("a", "a", 0) tc.Set("a", "a", 0)
tc.Set("b", "b", 0) tc.Set("b", "b", 0)
tc.Set("c", "c", 0)
tc.Set("expired", "foo", 1*time.Millisecond)
tc.Set("*struct", &TestStruct{Num: 1}, 0) tc.Set("*struct", &TestStruct{Num: 1}, 0)
tc.Set("[]struct", []TestStruct{ tc.Set("[]struct", []TestStruct{
{Num: 2}, {Num: 2},
@ -482,7 +485,6 @@ func testFillAndSerialize(t *testing.T, tc *Cache) {
&TestStruct{Num: 4716}, &TestStruct{Num: 4716},
}, },
}, 0) }, 0)
tc.Set("c", "c", 0) // ordering should be meaningless, but just in case
fp := &bytes.Buffer{} fp := &bytes.Buffer{}
err := tc.Save(fp) err := tc.Save(fp)
@ -520,6 +522,12 @@ func testFillAndSerialize(t *testing.T, tc *Cache) {
t.Error("c is not c") t.Error("c is not c")
} }
<-time.After(5*time.Millisecond)
_, found = oc.Get("expired")
if found {
t.Error("expired was found")
}
s1, found := oc.Get("*struct") s1, found := oc.Get("*struct")
if !found { if !found {
t.Error("*struct was not found") t.Error("*struct was not found")
@ -574,6 +582,38 @@ func testFillAndSerialize(t *testing.T, tc *Cache) {
} }
} }
func TestFileSerialization(t *testing.T) {
tc := New(0, 0)
tc.Add("a", "a", 0)
tc.Add("b", "b", 0)
fname := "_test/cache.dat"
tc.SaveFile(fname)
oc := New(0, 0)
oc.Add("a", "aa", 0) // this should not be overwritten
oc.LoadFile(fname)
a, found := oc.Get("a")
if !found {
t.Error("a was not found")
}
astr := a.(string)
if astr != "aa" {
if astr == "a" {
t.Error("a was overwritten")
} else {
t.Error("a is not aa")
}
}
b, found := oc.Get("b")
if !found {
t.Error("b was not found")
}
if b.(string) != "b" {
t.Error("b is not b")
}
os.Remove(fname)
}
func TestSerializeUnserializable(t *testing.T) { func TestSerializeUnserializable(t *testing.T) {
tc := New(0, 0) tc := New(0, 0)
ch := make(chan bool, 1) ch := make(chan bool, 1)