diff --git a/src/Response.cpp b/src/Response.cpp index ca01f32..3b13c85 100644 --- a/src/Response.cpp +++ b/src/Response.cpp @@ -10,7 +10,7 @@ etcd::Response::Response(const etcdv3::V3Response& reply) _error_message = reply.error_message; _action = reply.action; int size = reply.values.size(); - if(size > 1) + if(reply.isPrefix) { for(int index = 0; index < size; index++) { diff --git a/tst/EtcdTest.cpp b/tst/EtcdTest.cpp index 96b0901..b7de9e9 100644 --- a/tst/EtcdTest.cpp +++ b/tst/EtcdTest.cpp @@ -189,10 +189,16 @@ TEST_CASE("list a directory") CHECK(0 == etcd.ls("/test/new_dir").get().keys().size()); etcd.set("/test/new_dir/key1", "value1").wait(); + etcd::Response resp = etcd.ls("/test/new_dir").get(); + CHECK("get" == resp.action()); + REQUIRE(1 == resp.keys().size()); + CHECK("/test/new_dir/key1" == resp.key(0)); + CHECK("value1" == resp.value(0).as_string()); + etcd.set("/test/new_dir/key2", "value2").wait(); etcd.set("/test/new_dir/sub_dir", "value3").wait(); - etcd::Response resp = etcd.ls("/test/new_dir").get(); + resp = etcd.ls("/test/new_dir").get(); CHECK("get" == resp.action()); REQUIRE(3 == resp.keys().size()); CHECK("/test/new_dir/key1" == resp.key(0)); diff --git a/v3/include/AsyncGetAction.hpp b/v3/include/AsyncGetAction.hpp index be1a3fa..b9f8555 100644 --- a/v3/include/AsyncGetAction.hpp +++ b/v3/include/AsyncGetAction.hpp @@ -20,6 +20,7 @@ namespace etcdv3 AsyncRangeResponse ParseResponse(); RangeResponse reply; std::unique_ptr> response_reader; + bool prefix; }; } diff --git a/v3/include/V3Response.hpp b/v3/include/V3Response.hpp index cf902ad..33c39c2 100644 --- a/v3/include/V3Response.hpp +++ b/v3/include/V3Response.hpp @@ -9,9 +9,10 @@ namespace etcdv3 class V3Response { public: - V3Response(): error_code(0), index(0) {}; + V3Response(): error_code(0), index(0), isPrefix(false) {}; int error_code; int index; + bool isPrefix; std::string error_message; std::string action; std::vector values; diff --git a/v3/src/AsyncGetAction.cpp b/v3/src/AsyncGetAction.cpp index c187f1d..16d0508 100644 --- a/v3/src/AsyncGetAction.cpp +++ b/v3/src/AsyncGetAction.cpp @@ -9,6 +9,7 @@ etcdv3::AsyncGetAction::AsyncGetAction(std::string const & key, KV::Stub* stub_, get_request.set_key(key); if(withPrefix) { + prefix = withPrefix; std::string range_end(key); int ascii = (int)range_end[range_end.length()-1]; range_end.back() = ascii+1; @@ -35,6 +36,7 @@ etcdv3::AsyncRangeResponse etcdv3::AsyncGetAction::ParseResponse() { range_resp.ParseResponse(); range_resp.action = etcdv3::GET_ACTION; + range_resp.isPrefix = prefix; } return range_resp;