|
|
|
@ -18,54 +18,53 @@ func TestKeyWatch(t *testing.T) {
|
|
|
|
|
a := agent.NewTestAgent(t.Name(), ``) |
|
|
|
|
defer a.Shutdown() |
|
|
|
|
|
|
|
|
|
invoke := make(chan error) |
|
|
|
|
plan := mustParse(t, `{"type":"key", "key":"foo/bar/baz"}`) |
|
|
|
|
invoke := 0 |
|
|
|
|
plan.Handler = func(idx uint64, raw interface{}) { |
|
|
|
|
if invoke == 0 { |
|
|
|
|
if raw == nil { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
v, ok := raw.(*consulapi.KVPair) |
|
|
|
|
if !ok || v == nil || string(v.Value) != "test" { |
|
|
|
|
t.Fatalf("Bad: %#v", raw) |
|
|
|
|
} |
|
|
|
|
invoke++ |
|
|
|
|
if raw == nil { |
|
|
|
|
return // ignore
|
|
|
|
|
} |
|
|
|
|
v, ok := raw.(*consulapi.KVPair) |
|
|
|
|
if !ok || v == nil { |
|
|
|
|
return // ignore
|
|
|
|
|
} |
|
|
|
|
if string(v.Value) != "test" { |
|
|
|
|
invoke <- errBadContent |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
invoke <- nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var wg sync.WaitGroup |
|
|
|
|
wg.Add(1) |
|
|
|
|
go func() { |
|
|
|
|
defer plan.Stop() |
|
|
|
|
time.Sleep(20 * time.Millisecond) |
|
|
|
|
|
|
|
|
|
defer wg.Done() |
|
|
|
|
kv := a.Client().KV() |
|
|
|
|
|
|
|
|
|
time.Sleep(20 * time.Millisecond) |
|
|
|
|
pair := &consulapi.KVPair{ |
|
|
|
|
Key: "foo/bar/baz", |
|
|
|
|
Value: []byte("test"), |
|
|
|
|
} |
|
|
|
|
_, err := kv.Put(pair, nil) |
|
|
|
|
if err != nil { |
|
|
|
|
if _, err := kv.Put(pair, nil); err != nil { |
|
|
|
|
t.Fatalf("err: %v", err) |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
// Wait for the query to run
|
|
|
|
|
time.Sleep(20 * time.Millisecond) |
|
|
|
|
plan.Stop() |
|
|
|
|
|
|
|
|
|
// Delete the key
|
|
|
|
|
_, err = kv.Delete("foo/bar/baz", nil) |
|
|
|
|
if err != nil { |
|
|
|
|
wg.Add(1) |
|
|
|
|
go func() { |
|
|
|
|
defer wg.Done() |
|
|
|
|
if err := plan.Run(a.HTTPAddr()); err != nil { |
|
|
|
|
t.Fatalf("err: %v", err) |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
err := plan.Run(a.HTTPAddr()) |
|
|
|
|
if err != nil { |
|
|
|
|
if err := <-invoke; err != nil { |
|
|
|
|
t.Fatalf("err: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if invoke == 0 { |
|
|
|
|
t.Fatalf("bad: %v", invoke) |
|
|
|
|
} |
|
|
|
|
plan.Stop() |
|
|
|
|
wg.Wait() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestKeyWatch_With_PrefixDelete(t *testing.T) { |
|
|
|
|