mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
109 lines
2.1 KiB
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}
|
|
}
|