Fixed bug when only one key is returned during ls().

Instead of placing it in response::value it should be placed in
reponse::values
This commit is contained in:
arches 2016-07-01 10:17:41 -04:00
parent 79f28dce20
commit dd1d01519c
5 changed files with 13 additions and 3 deletions

View File

@ -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++)
{

View File

@ -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));

View File

@ -20,6 +20,7 @@ namespace etcdv3
AsyncRangeResponse ParseResponse();
RangeResponse reply;
std::unique_ptr<ClientAsyncResponseReader<RangeResponse>> response_reader;
bool prefix;
};
}

View File

@ -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<mvccpb::KeyValue> values;

View File

@ -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;