etcd/store/tree_store_test.go

109 lines
2.1 KiB
Go
Raw Normal View History

2013-07-03 05:09:54 +04:00
package store
import (
2013-07-16 21:44:09 +04:00
"fmt"
2013-07-03 05:09:54 +04:00
"math/rand"
"strconv"
2013-07-16 21:44:09 +04:00
"testing"
2013-07-04 02:00:50 +04:00
"time"
2013-07-03 05:09:54 +04:00
)
func TestStoreGet(t *testing.T) {
2013-07-16 21:40:41 +04:00
ts := &tree{
2013-07-03 05:09:54 +04:00
&treeNode{
2013-07-16 21:40:41 +04:00
CreateTestNode("/"),
true,
2013-07-03 05:09:54 +04:00
make(map[string]*treeNode),
},
2013-07-16 21:40:41 +04:00
}
2013-07-03 05:09:54 +04:00
// create key
2013-07-04 02:00:50 +04:00
ts.set("/foo", CreateTestNode("bar"))
2013-07-03 05:09:54 +04:00
// change value
2013-07-04 02:00:50 +04:00
ts.set("/foo", CreateTestNode("barbar"))
2013-07-03 05:09:54 +04:00
// create key
2013-07-04 02:00:50 +04:00
ts.set("/hello/foo", CreateTestNode("barbarbar"))
treeNode, ok := ts.get("/foo")
2013-07-03 05:09:54 +04:00
2013-07-04 02:00:50 +04:00
if !ok {
2013-07-03 05:09:54 +04:00
t.Fatalf("Expect to get node, but not")
}
if treeNode.Value != "barbar" {
t.Fatalf("Expect value barbar, but got %s", treeNode.Value)
}
// create key
2013-07-04 02:00:50 +04:00
treeNode, ok = ts.get("/hello/foo")
if !ok {
2013-07-03 05:09:54 +04:00
t.Fatalf("Expect to get node, but not")
}
if treeNode.Value != "barbarbar" {
t.Fatalf("Expect value barbarbar, but got %s", treeNode.Value)
}
// create a key under other key
2013-07-04 02:00:50 +04:00
ok = ts.set("/foo/foo", CreateTestNode("bar"))
if ok {
2013-07-03 05:09:54 +04:00
t.Fatalf("shoud not add key under a exisiting key")
}
// delete a key
2013-07-16 21:40:41 +04:00
ok = ts.delete("/foo")
2013-07-04 02:00:50 +04:00
if !ok {
t.Fatalf("cannot delete key")
2013-07-03 05:09:54 +04:00
}
// delete a directory
2013-07-16 21:40:41 +04:00
ok = ts.delete("/hello")
2013-07-04 02:00:50 +04:00
if ok {
t.Fatalf("Expect cannot delet /hello, but deleted! ")
2013-07-03 05:09:54 +04:00
}
2013-07-06 03:22:45 +04:00
// test list
ts.set("/hello/fooo", CreateTestNode("barbarbar"))
ts.set("/hello/foooo/foo", CreateTestNode("barbarbar"))
nodes, keys, dirs, ok := ts.list("/hello")
if !ok {
t.Fatalf("cannot list!")
} else {
length := len(nodes)
for i := 0; i < length; i++ {
2013-07-16 21:44:09 +04:00
fmt.Println(keys[i], "=", nodes[i].Value, "[", dirs[i], "]")
2013-07-16 21:40:41 +04:00
}
2013-07-06 03:22:45 +04:00
}
2013-07-03 05:09:54 +04:00
// speed test
2013-07-16 21:44:09 +04:00
for i := 0; i < 100; i++ {
2013-07-03 05:09:54 +04:00
key := "/"
depth := rand.Intn(10)
for j := 0; j < depth; j++ {
key += "/" + strconv.Itoa(rand.Int()%10)
2013-07-03 05:09:54 +04:00
}
value := strconv.Itoa(rand.Int())
2013-07-04 02:00:50 +04:00
ts.set(key, CreateTestNode(value))
treeNode, ok := ts.get(key)
2013-07-03 05:09:54 +04:00
2013-07-04 02:00:50 +04:00
if !ok {
continue
//t.Fatalf("Expect to get node, but not")
2013-07-03 05:09:54 +04:00
}
if treeNode.Value != value {
t.Fatalf("Expect value %s, but got %s", value, treeNode.Value)
}
}
ts.traverse(f, true)
2013-07-04 02:00:50 +04:00
}
2013-07-16 21:44:09 +04:00
func f(key string, n *Node) {
fmt.Println(key, "=", n.Value)
2013-07-04 02:35:25 +04:00
}
2013-07-04 02:00:50 +04:00
2013-07-16 21:44:09 +04:00
func CreateTestNode(value string) Node {
return Node{value, time.Unix(0, 0), nil}
}