tree_store_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package store
  2. import (
  3. "testing"
  4. "math/rand"
  5. "strconv"
  6. )
  7. func TestStoreGet(t *testing.T) {
  8. ts := &treeStore{
  9. &treeNode{
  10. "/",
  11. true,
  12. make(map[string]*treeNode),
  13. },
  14. }
  15. // create key
  16. ts.set("/foo", "bar")
  17. // change value
  18. ts.set("/foo", "barbar")
  19. // create key
  20. ts.set("/hello/foo", "barbarbar")
  21. treeNode := ts.get("/foo")
  22. if treeNode == nil {
  23. t.Fatalf("Expect to get node, but not")
  24. }
  25. if treeNode.Value != "barbar" {
  26. t.Fatalf("Expect value barbar, but got %s", treeNode.Value)
  27. }
  28. // create key
  29. treeNode = ts.get("/hello/foo")
  30. if treeNode == nil {
  31. t.Fatalf("Expect to get node, but not")
  32. }
  33. if treeNode.Value != "barbarbar" {
  34. t.Fatalf("Expect value barbarbar, but got %s", treeNode.Value)
  35. }
  36. // create a key under other key
  37. _, err := ts.set("/foo/foo", "bar")
  38. if err == nil {
  39. t.Fatalf("shoud not add key under a exisiting key")
  40. }
  41. // delete a key
  42. oldValue := ts.delete("/foo")
  43. if oldValue != "barbar" {
  44. t.Fatalf("Expect Oldvalue bar, but got %s", oldValue)
  45. }
  46. // delete a directory
  47. oldValue = ts.delete("/hello")
  48. if oldValue != "" {
  49. t.Fatalf("Expect cannot delet /hello, but deleted! %s", oldValue)
  50. }
  51. // speed test
  52. for i:=0; i < 10000; i++ {
  53. key := "/"
  54. depth := rand.Intn(10)
  55. for j := 0; j < depth; j++ {
  56. key += "/" + strconv.Itoa(rand.Int())
  57. }
  58. value := strconv.Itoa(rand.Int())
  59. ts.set(key, value)
  60. treeNode := ts.get(key)
  61. if treeNode == nil {
  62. t.Fatalf("Expect to get node, but not")
  63. }
  64. if treeNode.Value != value {
  65. t.Fatalf("Expect value %s, but got %s", value, treeNode.Value)
  66. }
  67. }
  68. }