etcd/store/store_test.go

137 lines
2.2 KiB
Go

package store
import (
"encoding/json"
"fmt"
"testing"
"time"
)
func TestStoreGetDelete(t *testing.T) {
s := CreateStore(100)
s.Set("foo", "bar", time.Unix(0, 0), 1)
res, err := s.Get("foo")
if err != nil {
t.Fatalf("Unknown error")
}
var result Response
json.Unmarshal(res, &result)
if result.Value != "bar" {
t.Fatalf("Cannot get stored value")
}
s.Delete("foo", 2)
_, err = s.Get("foo")
if err == nil {
t.Fatalf("Got deleted value")
}
}
func TestSaveAndRecovery(t *testing.T) {
s := CreateStore(100)
s.Set("foo", "bar", time.Unix(0, 0), 1)
s.Set("foo2", "bar2", time.Now().Add(time.Second * 5), 2)
state, err := s.Save()
if err != nil {
t.Fatalf("Cannot Save %s", err)
}
newStore := CreateStore(100)
// wait for foo2 expires
time.Sleep(time.Second * 6)
newStore.Recovery(state)
res, err := newStore.Get("foo")
var result Response
json.Unmarshal(res, &result)
if result.Value != "bar" {
t.Fatalf("Recovery Fail")
}
res, err = newStore.Get("foo2")
if err == nil {
t.Fatalf("Get expired value")
}
s.Delete("foo", 3)
}
func TestExpire(t *testing.T) {
fmt.Println(time.Now())
fmt.Println("TEST EXPIRE")
// test expire
s := CreateStore(100)
s.Set("foo", "bar", time.Now().Add(time.Second*1), 0)
time.Sleep(2 * time.Second)
_, err := s.Get("foo")
if err == nil {
t.Fatalf("Got expired value")
}
//test change expire time
s.Set("foo", "bar", time.Now().Add(time.Second*10), 1)
_, err = s.Get("foo")
if err != nil {
t.Fatalf("Cannot get Value")
}
s.Set("foo", "barbar", time.Now().Add(time.Second*1), 2)
time.Sleep(2 * time.Second)
_, err = s.Get("foo")
if err == nil {
t.Fatalf("Got expired value")
}
// test change expire to stable
s.Set("foo", "bar", time.Now().Add(time.Second*1), 3)
s.Set("foo", "bar", time.Unix(0, 0), 4)
time.Sleep(2 * time.Second)
_, err = s.Get("foo")
if err != nil {
t.Fatalf("Cannot get Value")
}
// test stable to expire
s.Set("foo", "bar", time.Now().Add(time.Second*1), 5)
time.Sleep(2 * time.Second)
_, err = s.Get("foo")
if err == nil {
t.Fatalf("Got expired value")
}
// test set older node
s.Set("foo", "bar", time.Now().Add(-time.Second*1), 6)
_, err = s.Get("foo")
if err == nil {
t.Fatalf("Got expired value")
}
}