| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package store
- import (
- "testing"
- "time"
- )
- func TestWatch(t *testing.T) {
- s := CreateStore(100)
- watchers := make([]*Watcher, 10)
- for i, _ := range watchers {
- // create a new watcher
- watchers[i] = NewWatcher()
- // add to the watchers list
- s.AddWatcher("foo", watchers[i], 0)
- }
- s.Set("/foo/foo", "bar", time.Unix(0, 0), 1)
- for _, watcher := range watchers {
- // wait for the notification for any changing
- res := <-watcher.C
- if res == nil {
- t.Fatal("watcher is cleared")
- }
- }
- for i, _ := range watchers {
- // create a new watcher
- watchers[i] = NewWatcher()
- // add to the watchers list
- s.AddWatcher("foo/foo/foo", watchers[i], 0)
- }
- s.watcher.stopWatchers()
- for _, watcher := range watchers {
- // wait for the notification for any changing
- res := <-watcher.C
- if res != nil {
- t.Fatal("watcher is cleared")
- }
- }
- }
- // BenchmarkWatch creates 10K watchers watch at /foo/[path] each time.
- // Path is randomly chosen with max depth 10.
- // It should take less than 15ms to wake up 10K watchers.
- func BenchmarkWatch(b *testing.B) {
- s := CreateStore(100)
- keys := GenKeys(10000, 10)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- watchers := make([]*Watcher, 10000)
- for i := 0; i < 10000; i++ {
- // create a new watcher
- watchers[i] = NewWatcher()
- // add to the watchers list
- s.AddWatcher(keys[i], watchers[i], 0)
- }
- s.watcher.stopWatchers()
- for _, watcher := range watchers {
- // wait for the notification for any changing
- <-watcher.C
- }
- s.watcher = newWatcherHub()
- }
- }
|