From 145ea9188f0e556323a78ecc12c07fe933bfa26b Mon Sep 17 00:00:00 2001 From: amichelo <andrea.michelotti@lnf.infn.it> Date: Wed, 5 Apr 2023 15:17:26 +0200 Subject: [PATCH] support hasKey with names with dot --- TestFramework/data/TestCDataWrapper.cpp | 26 +++++++++++++++++++++++++ chaos/common/data/CDataWrapper.cpp | 4 ++++ 2 files changed, 30 insertions(+) diff --git a/TestFramework/data/TestCDataWrapper.cpp b/TestFramework/data/TestCDataWrapper.cpp index c1bc0aff7..7be685d9b 100644 --- a/TestFramework/data/TestCDataWrapper.cpp +++ b/TestFramework/data/TestCDataWrapper.cpp @@ -98,6 +98,32 @@ TEST(CDataWrapperTest, Performance) { ASSERT_TRUE(cloned->isBoolValue("bv")); data_pack.reset(); } +} +TEST(CDataWrapperTest, haKey) { + int idx = 0; + CDataWrapper data_pack; + data_pack.addBoolValue("bv", (int32_t)0); + data_pack.addInt32Value("i32v", (int32_t)0); + + data_pack.addInt32Value("i32v.pippo", (int32_t)0); + data_pack.addDoubleValue("dbv", (double)36.6); + data_pack.addDoubleValue("dbv.pippo", (double)37.6); + ASSERT_TRUE(data_pack.hasKey("bv")); + ASSERT_FALSE(data_pack.hasKey("bva")); + ASSERT_FALSE(data_pack.hasKey("bv.pippo")); + + ASSERT_TRUE(data_pack.hasKey("dbv")); + ASSERT_FALSE(data_pack.hasKey("dbva")); + ASSERT_FALSE(data_pack.hasKey("dbv.pippa")); + ASSERT_TRUE(data_pack.hasKey("dbv.pippo")); + + ASSERT_TRUE(data_pack.hasKey("i32v")); + ASSERT_FALSE(data_pack.hasKey("i32va")); + ASSERT_FALSE(data_pack.hasKey("i32v.pippa")); + ASSERT_TRUE(data_pack.hasKey("i32v.pippo")); + + + } TEST(CDataWrapperTest, TestJsonDouble) { const char* test_json_translation="{\"double_key\":[1.0,2.1,-1.0,-0.9]}"; diff --git a/chaos/common/data/CDataWrapper.cpp b/chaos/common/data/CDataWrapper.cpp index 5c809d44a..efef62b8e 100644 --- a/chaos/common/data/CDataWrapper.cpp +++ b/chaos/common/data/CDataWrapper.cpp @@ -816,6 +816,10 @@ bool CDataWrapper::hasKey(const std::string& key) const { BSON_ASSERT (bson); if(key.size()==0) return false; + if(strchr(key.c_str(),'.')){ + // if contains . cannot recurse + return (bson_iter_init (&iter, ACCESS_BSON(bson)) && bson_iter_find (&iter, key.c_str())); + } return (bson_iter_init (&iter, ACCESS_BSON(bson)) && bson_iter_find_descendant (&iter, key.c_str(), &child)); } -- GitLab