From 603922b4db7be385b55d286895201ebf46a71672 Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Wed, 11 Apr 2018 18:50:43 +0200 Subject: [PATCH] more work on config --- common/cpp/include/json_parser/json_parser.h | 5 ++- common/cpp/src/data_structs/data_structs.cpp | 2 +- common/cpp/src/json_parser/json_parser.cpp | 10 ++++-- common/cpp/src/json_parser/rapid_json.cpp | 9 ++---- common/cpp/src/json_parser/rapid_json.h | 5 ++- .../json_parser/test_json_parser.cpp | 31 ++++++++++--------- receiver/CMakeLists.txt | 3 +- receiver/src/receiver_config.cpp | 5 +-- receiver/unittests/test_config.cpp | 4 ++- .../parse_config_file/parse_config_file.cpp | 3 +- 10 files changed, 45 insertions(+), 32 deletions(-) diff --git a/common/cpp/include/json_parser/json_parser.h b/common/cpp/include/json_parser/json_parser.h index 7373e91a7..077c23bb2 100644 --- a/common/cpp/include/json_parser/json_parser.h +++ b/common/cpp/include/json_parser/json_parser.h @@ -7,6 +7,7 @@ #include <string> #include "common/error.h" +#include "io/io.h" namespace hidra2 { @@ -14,7 +15,8 @@ class RapidJson; class JsonParser { public: - JsonParser(const std::string& json, bool read_from_file); + JsonParser(const std::string& json, const std::unique_ptr<IO>* io); + JsonParser(const std::string& json); ~JsonParser(); JsonParser(JsonParser&& other); Error GetUInt64(const std::string& name, uint64_t* val) const noexcept; @@ -23,6 +25,7 @@ class JsonParser { Error GetArrayString(const std::string& name, std::vector<std::string>* val) const noexcept; JsonParser Embedded(const std::string& name) const noexcept; private: + std::unique_ptr<IO> default_io_; std::unique_ptr<RapidJson> rapid_json_; JsonParser(RapidJson* rapid_json_); diff --git a/common/cpp/src/data_structs/data_structs.cpp b/common/cpp/src/data_structs/data_structs.cpp index 331a741a3..4625c052f 100644 --- a/common/cpp/src/data_structs/data_structs.cpp +++ b/common/cpp/src/data_structs/data_structs.cpp @@ -34,7 +34,7 @@ bool TimeFromJson(const JsonParser& parser, const std::string name, std::chrono: bool FileInfo::SetFromJson(const std::string& json_string) { auto old = *this; - JsonParser parser(json_string, false); + JsonParser parser(json_string); if (parser.GetUInt64("_id", &id) || parser.GetUInt64("size", &size) || diff --git a/common/cpp/src/json_parser/json_parser.cpp b/common/cpp/src/json_parser/json_parser.cpp index 1a8485578..e0e1c680b 100644 --- a/common/cpp/src/json_parser/json_parser.cpp +++ b/common/cpp/src/json_parser/json_parser.cpp @@ -1,5 +1,6 @@ #include "json_parser/json_parser.h" #include "rapid_json.h" +#include "io/io_factory.h" namespace hidra2 { @@ -8,9 +9,14 @@ JsonParser::~JsonParser() { } -JsonParser::JsonParser(const std::string& json, bool read_from_file) : rapid_json_{new RapidJson(json, read_from_file)} { +JsonParser::JsonParser(const std::string& json, const std::unique_ptr<IO>* io ) : + default_io_{GenerateDefaultIO()}, rapid_json_{new RapidJson(json, io != nullptr ? io : & default_io_)} { } +JsonParser::JsonParser(const std::string& json) : rapid_json_{new RapidJson(json, nullptr)} { +} + + Error JsonParser::GetArrayUInt64(const std::string& name, std::vector<uint64_t>* val) const noexcept { return rapid_json_->GetArrayUInt64(name, val); @@ -30,7 +36,7 @@ Error JsonParser::GetString(const std::string& name, std::string* val) const noe } JsonParser JsonParser::Embedded(const std::string& name) const noexcept { - RapidJson* rapid_json = new RapidJson(*rapid_json_.get(), name); + RapidJson* rapid_json = new RapidJson(*rapid_json_.get(), name) ; return JsonParser(rapid_json); } diff --git a/common/cpp/src/json_parser/rapid_json.cpp b/common/cpp/src/json_parser/rapid_json.cpp index 37d1c8771..9eab80bce 100644 --- a/common/cpp/src/json_parser/rapid_json.cpp +++ b/common/cpp/src/json_parser/rapid_json.cpp @@ -3,12 +3,9 @@ using namespace rapidjson; -#include "io/io_factory.h" - namespace hidra2 { -RapidJson::RapidJson(const std::string& json, bool read_from_file): io__{GenerateDefaultIO()}, json_{json}, - read_from_file_{read_from_file} { +RapidJson::RapidJson(const std::string& json, const std::unique_ptr<IO>* io): io__{io}, json_{json} { } @@ -21,9 +18,9 @@ Error RapidJson::LazyInitialize()const noexcept { return nullptr; auto str = json_; - if (read_from_file_) { + if (io__) { Error err; - str = io__->ReadFileToString(json_, &err); + str = (*io__)->ReadFileToString(json_, &err); if (err != nullptr) { return err; } diff --git a/common/cpp/src/json_parser/rapid_json.h b/common/cpp/src/json_parser/rapid_json.h index ef26611e4..36157fd42 100644 --- a/common/cpp/src/json_parser/rapid_json.h +++ b/common/cpp/src/json_parser/rapid_json.h @@ -17,18 +17,17 @@ enum class ValueType { class RapidJson { public: - RapidJson(const std::string& json, bool read_from_file); + RapidJson(const std::string& json, const std::unique_ptr<IO>* io); RapidJson(const RapidJson& parent, const std::string& subname); Error GetUInt64(const std::string& name, uint64_t* val) const noexcept; Error GetString(const std::string& name, std::string* val) const noexcept; Error GetArrayUInt64(const std::string& name, std::vector<uint64_t>* val) const noexcept; Error GetArrayString(const std::string& name, std::vector<std::string>* val) const noexcept; - std::unique_ptr<IO> io__; private: + const std::unique_ptr<IO>* io__; mutable rapidjson::Document doc_; mutable rapidjson::Value object_; std::string json_; - bool read_from_file_; mutable bool initialized_ = false; Error LazyInitialize() const noexcept; Error embedded_error_ = nullptr; diff --git a/common/cpp/unittests/json_parser/test_json_parser.cpp b/common/cpp/unittests/json_parser/test_json_parser.cpp index 0767fd020..3f97389e7 100644 --- a/common/cpp/unittests/json_parser/test_json_parser.cpp +++ b/common/cpp/unittests/json_parser/test_json_parser.cpp @@ -31,7 +31,7 @@ namespace { TEST(ParseString, SimpleConvertToJson) { std::string json = R"({"_id":2,"foo":"foo","bar":1})"; - JsonParser parser{json, false}; + JsonParser parser{json}; uint64_t id, bar; std::string foo; @@ -52,7 +52,7 @@ TEST(ParseString, SimpleConvertToJson) { TEST(ParseString, EmbeddedConvertToJson) { std::string json = R"({"id":{"test":2}})"; - JsonParser parser{json, false}; + JsonParser parser{json}; uint64_t id; auto err1 = parser.Embedded("id").GetUInt64("test", &id); @@ -64,7 +64,7 @@ TEST(ParseString, EmbeddedConvertToJson) { TEST(ParseString, DoubleEmbeddedConvertToJson) { std::string json = R"({"id":{"test":{"test2":2}}})"; - JsonParser parser{json, false}; + JsonParser parser{json}; uint64_t id; auto err1 = parser.Embedded("id").Embedded("test").GetUInt64("test2", &id); @@ -76,7 +76,7 @@ TEST(ParseString, DoubleEmbeddedConvertToJson) { TEST(ParseString, ErrorOnWrongEmbeddedKey) { std::string json = R"({"id1":{"test":2}})"; - JsonParser parser{json, false}; + JsonParser parser{json}; uint64_t id; auto err = parser.Embedded("id").GetUInt64("test", &id); @@ -88,7 +88,7 @@ TEST(ParseString, ErrorOnWrongEmbeddedKey) { TEST(ParseString, ErrorOnWrongEmbeddedSubKey) { std::string json = R"({"id1":{"test1":2}})"; - JsonParser parser{json, false}; + JsonParser parser{json}; uint64_t id; auto err = parser.Embedded("id").GetUInt64("test", &id); @@ -100,7 +100,7 @@ TEST(ParseString, ErrorOnWrongEmbeddedSubKey) { TEST(ParseString, ErrorOnWrongKey) { std::string json = R"({"_id":"2"})"; - JsonParser parser{json, false}; + JsonParser parser{json}; uint64_t id; auto err = parser.GetUInt64("_id1", &id); @@ -112,7 +112,7 @@ TEST(ParseString, ErrorOnWrongKey) { TEST(ParseString, ErrorOnWrongType) { std::string json = R"({"_id":"2"})"; - JsonParser parser{json, false}; + JsonParser parser{json}; uint64_t id; auto err = parser.GetUInt64("_id", &id); @@ -125,7 +125,7 @@ TEST(ParseString, ErrorOnWrongType) { TEST(ParseString, ErrorOnWrongDocument) { std::string json = R"({"_id":2)"; - JsonParser parser{json, false}; + JsonParser parser{json}; uint64_t id; auto err = parser.GetUInt64("_id", &id); @@ -139,7 +139,7 @@ TEST(ParseString, ErrorOnWrongDocument) { TEST(ParseString, IntArrayConvertToJson) { std::string json = R"({"array":[1,2,3]})"; - JsonParser parser{json, false}; + JsonParser parser{json}; std::vector<uint64_t> vec; auto err = parser.GetArrayUInt64("array", &vec); @@ -151,7 +151,7 @@ TEST(ParseString, IntArrayConvertToJson) { TEST(ParseString, IntArrayErrorConvertToJson) { std::string json = R"({"array":[1,2,"3"]})"; - JsonParser parser{json, false}; + JsonParser parser{json}; std::vector<uint64_t> vec; auto err = parser.GetArrayUInt64("array", &vec); @@ -164,7 +164,7 @@ TEST(ParseString, IntArrayErrorConvertToJson) { TEST(ParseString, StringArrayConvertToJson) { std::string json = R"({"array":["s1","s2","s3"]})"; - JsonParser parser{json, false}; + JsonParser parser{json}; std::vector<std::string> vec; auto err = parser.GetArrayString("array", &vec); @@ -175,13 +175,16 @@ TEST(ParseString, StringArrayConvertToJson) { class ParseFileTests : public Test { public: - RapidJson parser{"filename", true}; NiceMock<MockIO> mock_io; + std::unique_ptr<IO> io_ptr = std::unique_ptr<IO> { + &mock_io + }; + JsonParser parser{"filename", &io_ptr}; + void SetUp() override { - parser.io__ = std::unique_ptr<IO> {&mock_io}; } void TearDown() override { - parser.io__.release(); + io_ptr.release(); } }; diff --git a/receiver/CMakeLists.txt b/receiver/CMakeLists.txt index 83f928fd4..5732d040a 100644 --- a/receiver/CMakeLists.txt +++ b/receiver/CMakeLists.txt @@ -15,7 +15,8 @@ set(SOURCE_FILES ################################ -add_library(${TARGET_NAME} STATIC ${SOURCE_FILES} $<TARGET_OBJECTS:system_io> $<TARGET_OBJECTS:curl_http_client>) +add_library(${TARGET_NAME} STATIC ${SOURCE_FILES} $<TARGET_OBJECTS:system_io> $<TARGET_OBJECTS:curl_http_client> + $<TARGET_OBJECTS:json_parser>) set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX) target_include_directories(${TARGET_NAME} PUBLIC ${HIDRA2_CXX_COMMON_INCLUDE_DIR} ${CURL_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${CURL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) diff --git a/receiver/src/receiver_config.cpp b/receiver/src/receiver_config.cpp index be8d221a2..faf6fdb0a 100644 --- a/receiver/src/receiver_config.cpp +++ b/receiver/src/receiver_config.cpp @@ -1,6 +1,7 @@ #include "receiver_config.h" #include "receiver_config_factory.h" #include "io/io_factory.h" +#include "json_parser/json_parser.h" namespace hidra2 { @@ -11,8 +12,8 @@ ReceiverConfigFactory::ReceiverConfigFactory() : io__{GenerateDefaultIO()} { } Error ReceiverConfigFactory::SetConfigFromFile(std::string file_name) { - config.influxdb_uri = "localhost"; - return {}; + JsonParser parser(file_name, &io__); + return parser.GetString("uri",&config.influxdb_uri); } const ReceiverConfig* GetReceiverConfig() { diff --git a/receiver/unittests/test_config.cpp b/receiver/unittests/test_config.cpp index fef17aa1f..22ed806d1 100644 --- a/receiver/unittests/test_config.cpp +++ b/receiver/unittests/test_config.cpp @@ -45,8 +45,10 @@ class ConfigTests : public Test { }; -TEST_F(ConfigTests, ErrorWaitForNewRequest) { +TEST_F(ConfigTests, ReadSettings) { + EXPECT_CALL(mock_io,ReadFileToString_t("fname",_)); + config_factory.SetConfigFromFile("fname"); } } diff --git a/tests/automatic/json_parser/parse_config_file/parse_config_file.cpp b/tests/automatic/json_parser/parse_config_file/parse_config_file.cpp index c18524055..fc8962669 100644 --- a/tests/automatic/json_parser/parse_config_file/parse_config_file.cpp +++ b/tests/automatic/json_parser/parse_config_file/parse_config_file.cpp @@ -39,7 +39,8 @@ void AssertSettings(const Settings& settings) { } Settings Parse(const std::string& fname, Error* err) { - hidra2::JsonParser parser(fname, true); + + hidra2::JsonParser parser(fname, nullptr); Settings settings; -- GitLab