etcd/store/tree_store_test.go

109 lines
2.1 KiB
Go

package store
import (
"fmt"
"math/rand"
"strconv"
"testing"
"time"
)
func TestStoreGet(t *testing.T) {
ts := &tree{
&treeNode{
CreateTestNode("/"),
true,
make(map[string]*treeNode),
},
}
// create key
ts.set("/foo", CreateTestNode("bar"))
// change value
ts.set("/foo", CreateTestNode("barbar"))
// create key
ts.set("/hello/foo", CreateTestNode("barbarbar"))
treeNode, ok := ts.get("/foo")
if !ok {
t.Fatalf("Expect to get node, but not")
}
if treeNode.Value != "barbar" {
t.Fatalf("Expect value barbar, but got %s", treeNode.Value)
}
// create key
treeNode, ok = ts.get("/hello/foo")
if !ok {
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
ok = ts.set("/foo/foo", CreateTestNode("bar"))
if ok {
t.Fatalf("shoud not add key under a exisiting key")
}
// delete a key
ok = ts.delete("/foo")
if !ok {
t.Fatalf("cannot delete key")
}
// delete a directory
ok = ts.delete("/hello")
if ok {
t.Fatalf("Expect cannot delet /hello, but deleted! ")
}
// 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++ {
fmt.Println(keys[i], "=", nodes[i].Value, "[", dirs[i], "]")
}
}
// speed test
for i := 0; i < 100; i++ {
key := "/"
depth := rand.Intn(10)
for j := 0; j < depth; j++ {
key += "/" + strconv.Itoa(rand.Int()%10)
}
value := strconv.Itoa(rand.Int())
ts.set(key, CreateTestNode(value))
treeNode, ok := ts.get(key)
if !ok {
continue
//t.Fatalf("Expect to get node, but not")
}
if treeNode.Value != value {
t.Fatalf("Expect value %s, but got %s", value, treeNode.Value)
}
}
ts.traverse(f, true)
}
func f(key string, n *Node) {
fmt.Println(key, "=", n.Value)
}
func CreateTestNode(value string) Node {
return Node{value, time.Unix(0, 0), nil}
}