From cee938fb0a627011ee1299f55020b719c3bc4e97 Mon Sep 17 00:00:00 2001 From: Tao He Date: Wed, 7 Apr 2021 15:07:48 +0800 Subject: [PATCH] Use UTF-8 char U+0000 as terminate charactor. Allow setting range end as `NULL`, see also #50. Signed-off-by: Tao He --- src/v3/Action.cpp | 5 +++-- tst/EtcdTest.cpp | 13 ++++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/v3/Action.cpp b/src/v3/Action.cpp index 2def3ce..558e9fa 100644 --- a/src/v3/Action.cpp +++ b/src/v3/Action.cpp @@ -50,6 +50,7 @@ std::string etcdv3::detail::string_plus_one(std::string const &value) { return ret; } } - // see: noPrefixEnd in etcd - return {"\0"}; + // see: noPrefixEnd in etcd, however c++ doesn't allows '\0' inside a string, thus we use + // the UTF-8 char U+0000 (i.e., "\xC0\x80"). + return {"\xC0\x80"}; } diff --git a/tst/EtcdTest.cpp b/tst/EtcdTest.cpp index a580a39..ad3d85b 100644 --- a/tst/EtcdTest.cpp +++ b/tst/EtcdTest.cpp @@ -231,10 +231,11 @@ TEST_CASE("list by range") etcd::Client etcd("http://127.0.0.1:2379"); CHECK(0 == etcd.ls("/test/new_dir").get().keys().size()); + etcd.set("/test/new_dir/key0", "value0").wait(); etcd.set("/test/new_dir/key1", "value1").wait(); - etcd.set("/test/new_dir/key2", "value1").wait(); - etcd.set("/test/new_dir/key3", "value1").wait(); - etcd.set("/test/new_dir/key4", "value1").wait(); + etcd.set("/test/new_dir/key2", "value2").wait(); + etcd.set("/test/new_dir/key3", "value3").wait(); + etcd.set("/test/new_dir/key4", "value4").wait(); etcd::Response resp1 = etcd.ls("/test/new_dir/key1", "/test/new_dir/key3").get(); REQUIRE(resp1.is_ok()); @@ -248,6 +249,12 @@ TEST_CASE("list by range") REQUIRE(3 == resp2.keys().size()); REQUIRE(3 == resp2.values().size()); + etcd::Response resp3 = etcd.ls("/test/new_dir/key1", {"\xC0\x80"}).get(); + REQUIRE(resp3.is_ok()); + CHECK("get" == resp3.action()); + REQUIRE(4 == resp3.keys().size()); + REQUIRE(4 == resp3.values().size()); + CHECK(0 == etcd.ls("/test/new_dir/key1").get().error_code()); CHECK(etcd.rmdir("/test/new_dir", true).get().is_ok());