From 74bd0d95b8b612b259c80cd7844b09c4faeaf567 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Tue, 10 Dec 2013 16:32:37 -0800 Subject: [PATCH] fix(server): try and add a expire dir test This doesn't actually work yet. --- server/v2/tests/get_handler_test.go | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/server/v2/tests/get_handler_test.go b/server/v2/tests/get_handler_test.go index fc930e639..c7d760f77 100644 --- a/server/v2/tests/get_handler_test.go +++ b/server/v2/tests/get_handler_test.go @@ -173,3 +173,49 @@ func TestV2WatchKeyWithIndex(t *testing.T) { assert.Equal(t, node["modifiedIndex"], 3, "") }) } + +// Ensures that a watcher can wait for a value to be set after a given index. +// +// $ curl localhost:4001/v2/keys/keyindir/bar?wait=true +// $ curl -X PUT localhost:4001/v2/keys/keyindir -d dir=true -d ttl=1 +// $ curl -X PUT localhost:4001/v2/keys/keyindir/bar -d value=YYY +// +func TestV2WatchKeyInDir(t *testing.T) { + tests.RunServer(func(s *server.Server) { + var body map[string]interface{} + c := make(chan bool) + + // Set a value (before given index). + v := url.Values{} + v.Set("dir", "true") + v.Set("ttl", "1") + resp, _ := tests.PutForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/keyindir"), v) + tests.ReadBody(resp) + + // Set a value (before given index). + v = url.Values{} + v.Set("value", "XXX") + resp, _ = tests.PutForm(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/keyindir/bar"), v) + tests.ReadBody(resp) + + go func() { + resp, _ := tests.Get(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/keyindir/bar?wait=true")) + body = tests.ReadBodyJSON(resp) + c <- true + }() + + select { + case <-c: + + default: + t.Fatal("cannot get watch result") + } + + assert.NotNil(t, body, "") + assert.Equal(t, body["action"], "expire", "") + + node := body["node"].(map[string]interface{}) + assert.Equal(t, node["key"], "/keyindir/bar", "") + assert.Equal(t, node["value"], "XXX", "") + }) +}