Use UTF-8 char U+0000 as terminate charactor.

Allow setting range end as `NULL`, see also #50.

Signed-off-by: Tao He <sighingnow@gmail.com>
This commit is contained in:
Tao He 2021-04-07 15:07:48 +08:00
parent 52d757f14a
commit cee938fb0a
2 changed files with 13 additions and 5 deletions

View File

@ -50,6 +50,7 @@ std::string etcdv3::detail::string_plus_one(std::string const &value) {
return ret; return ret;
} }
} }
// see: noPrefixEnd in etcd // see: noPrefixEnd in etcd, however c++ doesn't allows '\0' inside a string, thus we use
return {"\0"}; // the UTF-8 char U+0000 (i.e., "\xC0\x80").
return {"\xC0\x80"};
} }

View File

@ -231,10 +231,11 @@ TEST_CASE("list by range")
etcd::Client etcd("http://127.0.0.1:2379"); etcd::Client etcd("http://127.0.0.1:2379");
CHECK(0 == etcd.ls("/test/new_dir").get().keys().size()); 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/key1", "value1").wait();
etcd.set("/test/new_dir/key2", "value1").wait(); etcd.set("/test/new_dir/key2", "value2").wait();
etcd.set("/test/new_dir/key3", "value1").wait(); etcd.set("/test/new_dir/key3", "value3").wait();
etcd.set("/test/new_dir/key4", "value1").wait(); etcd.set("/test/new_dir/key4", "value4").wait();
etcd::Response resp1 = etcd.ls("/test/new_dir/key1", "/test/new_dir/key3").get(); etcd::Response resp1 = etcd.ls("/test/new_dir/key1", "/test/new_dir/key3").get();
REQUIRE(resp1.is_ok()); REQUIRE(resp1.is_ok());
@ -248,6 +249,12 @@ TEST_CASE("list by range")
REQUIRE(3 == resp2.keys().size()); REQUIRE(3 == resp2.keys().size());
REQUIRE(3 == resp2.values().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(0 == etcd.ls("/test/new_dir/key1").get().error_code());
CHECK(etcd.rmdir("/test/new_dir", true).get().is_ok()); CHECK(etcd.rmdir("/test/new_dir", true).get().is_ok());