tree_store_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package store
  2. import (
  3. "testing"
  4. "math/rand"
  5. "strconv"
  6. "time"
  7. "fmt"
  8. )
  9. func TestStoreGet(t *testing.T) {
  10. ts := &tree{
  11. &treeNode{
  12. CreateTestNode("/"),
  13. true,
  14. make(map[string]*treeNode),
  15. },
  16. }
  17. // create key
  18. ts.set("/foo", CreateTestNode("bar"))
  19. // change value
  20. ts.set("/foo", CreateTestNode("barbar"))
  21. // create key
  22. ts.set("/hello/foo", CreateTestNode("barbarbar"))
  23. treeNode, ok := ts.get("/foo")
  24. if !ok {
  25. t.Fatalf("Expect to get node, but not")
  26. }
  27. if treeNode.Value != "barbar" {
  28. t.Fatalf("Expect value barbar, but got %s", treeNode.Value)
  29. }
  30. // create key
  31. treeNode, ok = ts.get("/hello/foo")
  32. if !ok {
  33. t.Fatalf("Expect to get node, but not")
  34. }
  35. if treeNode.Value != "barbarbar" {
  36. t.Fatalf("Expect value barbarbar, but got %s", treeNode.Value)
  37. }
  38. // create a key under other key
  39. ok = ts.set("/foo/foo", CreateTestNode("bar"))
  40. if ok {
  41. t.Fatalf("shoud not add key under a exisiting key")
  42. }
  43. // delete a key
  44. ok = ts.delete("/foo")
  45. if !ok {
  46. t.Fatalf("cannot delete key")
  47. }
  48. // delete a directory
  49. ok = ts.delete("/hello")
  50. if ok {
  51. t.Fatalf("Expect cannot delet /hello, but deleted! ")
  52. }
  53. // test list
  54. ts.set("/hello/fooo", CreateTestNode("barbarbar"))
  55. ts.set("/hello/foooo/foo", CreateTestNode("barbarbar"))
  56. nodes, keys, dirs, ok := ts.list("/hello")
  57. if !ok {
  58. t.Fatalf("cannot list!")
  59. } else {
  60. length := len(nodes)
  61. for i := 0; i < length; i++ {
  62. fmt.Println(keys[i] , "=", nodes[i].Value, "[", dirs[i], "]")
  63. }
  64. }
  65. // speed test
  66. for i:=0; i < 100; i++ {
  67. key := "/"
  68. depth := rand.Intn(10)
  69. for j := 0; j < depth; j++ {
  70. key += "/" + strconv.Itoa(rand.Int()%10)
  71. }
  72. value := strconv.Itoa(rand.Int())
  73. ts.set(key, CreateTestNode(value))
  74. treeNode, ok := ts.get(key)
  75. if !ok {
  76. continue
  77. //t.Fatalf("Expect to get node, but not")
  78. }
  79. if treeNode.Value != value {
  80. t.Fatalf("Expect value %s, but got %s", value, treeNode.Value)
  81. }
  82. }
  83. ts.traverse(f, true)
  84. }
  85. func f (key string, n *Node) {
  86. fmt.Println(key, "=", n.Value)
  87. }
  88. func CreateTestNode(value string) Node{
  89. return Node{value, time.Unix(0,0), nil}
  90. }