func watchWithIndex(kv kvdb.Kvdb, t *testing.T) { fmt.Println("\nwatchWithIndex") tree := "indexTree" subtree := tree + "/subtree" key := subtree + "/watchWithIndex" key1 := subtree + "/watchWithIndex21" kv.DeleteTree(tree) kvp, err := kv.Create(key, []byte("bar"), 0) assert.NoError(t, err, "Unexpected error in create: %v", err) time.Sleep(time.Millisecond * 100) waitIndex := kvp.ModifiedIndex + 2 watchData := watchData{ t: t, key: key, localIndex: waitIndex, } err = kv.WatchTree(tree, waitIndex, &watchData, watchWithIndexCb) if err != nil { fmt.Printf("Cannot test watchTree for watchWithIndex: %v", err) return } // Should not get updates for these kv.Put(key, []byte("bar1"), 0) kv.Put(key, []byte("bar1"), 0) // Should get updates for these kv.Put(key, []byte("bar2"), 0) kv.Create(key1, []byte("bar"), 0) kv.Delete(key) }
func watchTree(kv kvdb.Kvdb, t *testing.T) { fmt.Println("\nwatchTree") tree := "tree" watchData := watchData{ t: t, key: tree + "/key", otherKey: tree + "/otherKey", stop: "stop", iterations: 2, } _, err := kv.Delete(watchData.key) _, err = kv.Delete(watchData.otherKey) // First create a tree to watch for. We should not get update for this create. _, err = kv.Create(watchData.otherKey, []byte("bar"), 0) // Let the create operation finish and then start the watch time.Sleep(time.Second) err = kv.WatchTree(tree, 0, &watchData, watchFn) if err != nil { fmt.Printf("Cannot test watchKey: %v\n", err) return } // Sleep for sometime before calling the watchUpdate go routine. time.Sleep(time.Millisecond * 100) go randomUpdate(kv, &watchData) go watchUpdate(kv, &watchData) for watchData.watchStopped == false { time.Sleep(time.Millisecond * 100) } }