From 9e0ebae256a5f7892806ed5280980605a4e9bc5e Mon Sep 17 00:00:00 2001 From: yukun Date: Mon, 24 Aug 2020 17:29:05 +0800 Subject: [PATCH] Fix webserver set_config bug (#3425) * Fix TestSearchDSL multi fields bug Signed-off-by: fishpenguin * Fix set_config bug Signed-off-by: fishpenguin --- .../web_impl/handler/WebRequestHandler.cpp | 24 +++++++------------ core/unittest/server/test_web.cpp | 8 ++++++- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/core/src/server/web_impl/handler/WebRequestHandler.cpp b/core/src/server/web_impl/handler/WebRequestHandler.cpp index bbb705e51..b9ccab832 100644 --- a/core/src/server/web_impl/handler/WebRequestHandler.cpp +++ b/core/src/server/web_impl/handler/WebRequestHandler.cpp @@ -541,25 +541,17 @@ WebRequestHandler::SetConfig(const nlohmann::json& json, std::string& result_str std::vector cmds; for (auto& el : json.items()) { + auto ekey = el.key(); auto evalue = el.value(); - if (!evalue.is_object()) { - return Status(ILLEGAL_BODY, "Invalid payload format, the root value must be json map"); - } - for (auto& iel : el.value().items()) { - auto ievalue = iel.value(); - if (!(ievalue.is_string() || ievalue.is_number() || ievalue.is_boolean())) { - return Status(ILLEGAL_BODY, "Config value must be one of string, numeric or boolean"); - } - std::ostringstream ss; - if (ievalue.is_string()) { - std::string vle = ievalue; - ss << "set_config " << el.key() << "." << iel.key() << " " << vle; - } else { - ss << "set_config " << el.key() << "." << iel.key() << " " << ievalue; - } - cmds.emplace_back(ss.str()); + std::ostringstream ss; + if (evalue.is_string()) { + std::string vle = evalue; + ss << "set_config " << el.key() << " " << vle; + } else { + ss << "set_config " << el.key() << " " << evalue; } + cmds.emplace_back(ss.str()); } std::string msg; diff --git a/core/unittest/server/test_web.cpp b/core/unittest/server/test_web.cpp index 41d316ab7..72221228b 100644 --- a/core/unittest/server/test_web.cpp +++ b/core/unittest/server/test_web.cpp @@ -727,7 +727,13 @@ TEST_F(WebControllerTest, GET_PAGE_ENTITY) { } TEST_F(WebControllerTest, SYSTEM_INFO) { - auto response = client_ptr->cmd("config", "", "", connection_ptr); + std::string req = R"( + { + "cache.cache_size": "3221225472b" + })"; + auto response = client_ptr->op("config", req.c_str(), connection_ptr); + + response = client_ptr->cmd("config", "", "", connection_ptr); ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode()) << response->readBodyToString()->c_str(); auto result_json = nlohmann::json::parse(response->readBodyToString()->c_str()); ASSERT_TRUE(result_json.contains("cluster.enable")); -- GitLab