store_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package store
  2. import (
  3. "encoding/json"
  4. "testing"
  5. "time"
  6. )
  7. func TestStoreGetDelete(t *testing.T) {
  8. s := CreateStore(100)
  9. s.Set("foo", "bar", time.Unix(0, 0), 1)
  10. res, err := s.Get("foo")
  11. if err != nil {
  12. t.Fatalf("Unknown error")
  13. }
  14. var result Response
  15. json.Unmarshal(res, &result)
  16. if result.Value != "bar" {
  17. t.Fatalf("Cannot get stored value")
  18. }
  19. s.Delete("foo", 2)
  20. _, err = s.Get("foo")
  21. if err == nil {
  22. t.Fatalf("Got deleted value")
  23. }
  24. }
  25. func TestSaveAndRecovery(t *testing.T) {
  26. s := CreateStore(100)
  27. s.Set("foo", "bar", time.Unix(0, 0), 1)
  28. s.Set("foo2", "bar2", time.Now().Add(time.Second*5), 2)
  29. state, err := s.Save()
  30. if err != nil {
  31. t.Fatalf("Cannot Save %s", err)
  32. }
  33. newStore := CreateStore(100)
  34. // wait for foo2 expires
  35. time.Sleep(time.Second * 6)
  36. newStore.Recovery(state)
  37. res, err := newStore.Get("foo")
  38. var result Response
  39. json.Unmarshal(res, &result)
  40. if result.Value != "bar" {
  41. t.Fatalf("Recovery Fail")
  42. }
  43. res, err = newStore.Get("foo2")
  44. if err == nil {
  45. t.Fatalf("Get expired value")
  46. }
  47. s.Delete("foo", 3)
  48. }
  49. func TestExpire(t *testing.T) {
  50. // test expire
  51. s := CreateStore(100)
  52. s.Set("foo", "bar", time.Now().Add(time.Second*1), 0)
  53. time.Sleep(2 * time.Second)
  54. _, err := s.Get("foo")
  55. if err == nil {
  56. t.Fatalf("Got expired value")
  57. }
  58. //test change expire time
  59. s.Set("foo", "bar", time.Now().Add(time.Second*10), 1)
  60. _, err = s.Get("foo")
  61. if err != nil {
  62. t.Fatalf("Cannot get Value")
  63. }
  64. s.Set("foo", "barbar", time.Now().Add(time.Second*1), 2)
  65. time.Sleep(2 * time.Second)
  66. _, err = s.Get("foo")
  67. if err == nil {
  68. t.Fatalf("Got expired value")
  69. }
  70. // test change expire to stable
  71. s.Set("foo", "bar", time.Now().Add(time.Second*1), 3)
  72. s.Set("foo", "bar", time.Unix(0, 0), 4)
  73. time.Sleep(2 * time.Second)
  74. _, err = s.Get("foo")
  75. if err != nil {
  76. t.Fatalf("Cannot get Value")
  77. }
  78. // test stable to expire
  79. s.Set("foo", "bar", time.Now().Add(time.Second*1), 5)
  80. time.Sleep(2 * time.Second)
  81. _, err = s.Get("foo")
  82. if err == nil {
  83. t.Fatalf("Got expired value")
  84. }
  85. // test set older node
  86. s.Set("foo", "bar", time.Now().Add(-time.Second*1), 6)
  87. _, err = s.Get("foo")
  88. if err == nil {
  89. t.Fatalf("Got expired value")
  90. }
  91. }
  92. func BenchmarkStoreSet(b *testing.B) {
  93. s := CreateStore(100)
  94. keys := GenKeys(10000, 5)
  95. b.ResetTimer()
  96. for i := 0; i < b.N; i++ {
  97. for i, key := range keys {
  98. s.Set(key, "barbarbarbarbar", time.Unix(0, 0), uint64(i))
  99. }
  100. s = CreateStore(100)
  101. }
  102. }
  103. func BenchmarkStoreGet(b *testing.B) {
  104. s := CreateStore(100)
  105. keys := GenKeys(10000, 5)
  106. for i, key := range keys {
  107. s.Set(key, "barbarbarbarbar", time.Unix(0, 0), uint64(i))
  108. }
  109. b.ResetTimer()
  110. for i := 0; i < b.N; i++ {
  111. for _, key := range keys {
  112. s.Get(key)
  113. }
  114. }
  115. }
  116. func BenchmarkStoreSnapshotCopy(b *testing.B) {
  117. s := CreateStore(100)
  118. keys := GenKeys(10000, 5)
  119. for i, key := range keys {
  120. s.Set(key, "barbarbarbarbar", time.Unix(0, 0), uint64(i))
  121. }
  122. var state []byte
  123. b.ResetTimer()
  124. for i := 0; i < b.N; i++ {
  125. s.clone()
  126. }
  127. b.SetBytes(int64(len(state)))
  128. }
  129. func BenchmarkSnapshotSaveJson(b *testing.B) {
  130. s := CreateStore(100)
  131. keys := GenKeys(10000, 5)
  132. for i, key := range keys {
  133. s.Set(key, "barbarbarbarbar", time.Unix(0, 0), uint64(i))
  134. }
  135. var state []byte
  136. b.ResetTimer()
  137. for i := 0; i < b.N; i++ {
  138. state, _ = s.Save()
  139. }
  140. b.SetBytes(int64(len(state)))
  141. }
  142. func BenchmarkSnapshotRecovery(b *testing.B) {
  143. s := CreateStore(100)
  144. keys := GenKeys(10000, 5)
  145. for i, key := range keys {
  146. s.Set(key, "barbarbarbarbar", time.Unix(0, 0), uint64(i))
  147. }
  148. state, _ := s.Save()
  149. b.ResetTimer()
  150. for i := 0; i < b.N; i++ {
  151. newStore := CreateStore(100)
  152. newStore.Recovery(state)
  153. }
  154. b.SetBytes(int64(len(state)))
  155. }