From f1b0cb1d6007ecd82e012eb59c1dc06997ec4522 Mon Sep 17 00:00:00 2001 From: Gustavo Lopes Date: Fri, 4 Oct 2024 16:33:44 +0100 Subject: [PATCH] More review changes --- appsec/src/helper/json_helper.cpp | 4 +- appsec/src/helper/json_helper.hpp | 2 +- appsec/src/helper/remote_config/config.cpp | 17 +-- appsec/src/helper/remote_config/config.hpp | 44 +++++- .../listeners/asm_features_listener.cpp | 9 +- .../tests/extension/push_params_block_02.phpt | 47 +++++++ .../listeners/asm_features_listener_test.cpp | 15 +- .../asm_aggregator_test.cpp | 130 +++++++++--------- .../asm_data_aggregator_test.cpp | 50 +++---- .../asm_dd_aggregator_test.cpp | 10 +- .../listeners/engine_listener_test.cpp | 82 ++++++----- appsec/tests/helper/remote_config/mocks.cpp | 5 +- appsec/tests/helper/remote_config/mocks.hpp | 3 +- 13 files changed, 239 insertions(+), 179 deletions(-) create mode 100644 appsec/tests/extension/push_params_block_02.phpt diff --git a/appsec/src/helper/json_helper.cpp b/appsec/src/helper/json_helper.cpp index 4712ddfc15f..9a785ddc7e6 100644 --- a/appsec/src/helper/json_helper.cpp +++ b/appsec/src/helper/json_helper.cpp @@ -201,9 +201,9 @@ json_helper::get_field_of_type( } bool json_helper::parse_json( - const std::string &content, rapidjson::Document &output) + std::string_view content, rapidjson::Document &output) { - if (output.Parse(content).HasParseError()) { + if (output.Parse(content.data(), content.size()).HasParseError()) { SPDLOG_DEBUG("Invalid json: " + std::string(rapidjson::GetParseError_En( output.GetParseError()))); return false; diff --git a/appsec/src/helper/json_helper.hpp b/appsec/src/helper/json_helper.hpp index 52b4db8901f..42e07c046ec 100644 --- a/appsec/src/helper/json_helper.hpp +++ b/appsec/src/helper/json_helper.hpp @@ -63,7 +63,7 @@ std::optional get_field_of_type( std::optional get_field_of_type( rapidjson::Value::ConstValueIterator parent_field, std::string_view key, rapidjson::Type type); -bool parse_json(const std::string &content, rapidjson::Document &output); +bool parse_json(std::string_view content, rapidjson::Document &output); // NOLINTNEXTLINE(bugprone-easily-swappable-parameters) void merge_arrays(rapidjson::Value &destination, rapidjson::Value &source, rapidjson::Value::AllocatorType &allocator); diff --git a/appsec/src/helper/remote_config/config.cpp b/appsec/src/helper/remote_config/config.cpp index dda0a7e28ff..d324d6ff741 100644 --- a/appsec/src/helper/remote_config/config.cpp +++ b/appsec/src/helper/remote_config/config.cpp @@ -69,7 +69,7 @@ config config::from_line(std::string_view line) return {std::string{shm_path}, std::move(rc_path)}; } -std::string config::read() const +mapped_memory config::read() const { // open shared memory segment at rc_path: const int fd = ::shm_open(shm_path.c_str(), O_RDONLY, 0); @@ -100,19 +100,6 @@ std::string config::read() const "Failed to map shared memory: " + std::string{strerror_ts(errno)}); } - auto unmap = defer{[shm_ptr, &shm_stat]() { - if (::munmap(shm_ptr, shm_stat.st_size) == -1) { - // NOLINTNEXTLINE(bugprone-lambda-function-name) - SPDLOG_WARN( - "Failed to unmap shared memory: {}", strerror_ts(errno)); - } - }}; - - std::string result; - result.resize(shm_stat.st_size); - - std::copy_n(static_cast(shm_ptr), shm_stat.st_size, result.begin()); - - return result; + return mapped_memory{shm_ptr, static_cast(shm_stat.st_size)}; } } // namespace dds::remote_config diff --git a/appsec/src/helper/remote_config/config.hpp b/appsec/src/helper/remote_config/config.hpp index 889a29ff2b8..05e5e226c72 100644 --- a/appsec/src/helper/remote_config/config.hpp +++ b/appsec/src/helper/remote_config/config.hpp @@ -11,8 +11,50 @@ #include #include +extern "C" { +#include +} + namespace dds::remote_config { +class mapped_memory { +public: + mapped_memory(void *ptr, std::size_t size) : ptr_{ptr}, size_{size} {} + mapped_memory(const mapped_memory &) = delete; + mapped_memory(mapped_memory &&mm) noexcept : ptr_{mm.ptr_}, size_{mm.size_} + { + mm.ptr_ = nullptr; + mm.size_ = 0; + } + mapped_memory &operator=(const mapped_memory &) = delete; + mapped_memory &operator=(mapped_memory &&mm) noexcept + { + ptr_ = mm.ptr_; + size_ = mm.size_; + mm.ptr_ = nullptr; + mm.size_ = 0; + return *this; + } + ~mapped_memory() noexcept + { + if (ptr_ != nullptr) { + if (::munmap(ptr_, size_) == -1) { + SPDLOG_WARN( + "Failed to unmap shared memory: {}", strerror_ts(errno)); + }; + } + } + + operator std::string_view() const // NOLINT + { + return std::string_view{static_cast(ptr_), size_}; + } + +private: + void *ptr_; + std::size_t size_; +}; + struct config { // from a line provided by the RC config reader static config from_line(std::string_view line); @@ -20,7 +62,7 @@ struct config { std::string shm_path; std::string rc_path; - [[nodiscard]] std::string read() const; + [[nodiscard]] mapped_memory read() const; [[nodiscard]] product get_product() const; diff --git a/appsec/src/helper/remote_config/listeners/asm_features_listener.cpp b/appsec/src/helper/remote_config/listeners/asm_features_listener.cpp index 5b6cd791de6..71c293a04d6 100644 --- a/appsec/src/helper/remote_config/listeners/asm_features_listener.cpp +++ b/appsec/src/helper/remote_config/listeners/asm_features_listener.cpp @@ -12,10 +12,13 @@ void dds::remote_config::asm_features_listener::on_update(const config &config) { - const std::string contents{config.read()}; rapidjson::Document serialized_doc; - if (!json_helper::parse_json(contents, serialized_doc)) { - throw error_applying_config("Invalid config contents"); + + { + const mapped_memory contents{config.read()}; + if (!json_helper::parse_json(contents, serialized_doc)) { + throw error_applying_config("Invalid config contents"); + } } auto asm_itr = json_helper::get_field_of_type( diff --git a/appsec/tests/extension/push_params_block_02.phpt b/appsec/tests/extension/push_params_block_02.phpt new file mode 100644 index 00000000000..04838cafab2 --- /dev/null +++ b/appsec/tests/extension/push_params_block_02.phpt @@ -0,0 +1,47 @@ +--TEST-- +Push address gets blocked even when within a hook +--INI-- +extension=ddtrace.so +datadog.appsec.enabled=1 +--FILE-- + '404', 'type' => 'html']]], ['{"found":"attack"}','{"another":"attack"}']])), +]); +rinit(); + +class SomeIntegration { + public function init() + { + DDTrace\install_hook("ltrim", self::hooked_function(), null); + } + + private static function hooked_function() + { + return static function (DDTrace\HookData $hook) { + stop_for_debugger(); + push_address("server.request.path_params", ["some" => "params", "more" => "parameters"]); + var_dump("This should be executed"); + }; + } +} + +$integration = new SomeIntegration(); +$integration->init(); +echo PHP_EOL; +var_dump(ltrim(" Calling wrapped function")); +var_dump("THIS SHOULD NOT GET IN THE OUTPUT"); + +?> +--EXPECTHEADERS-- +Status: 404 Not Found +Content-type: text/html; charset=UTF-8 +--EXPECTF-- +You've been blocked

Sorry, you cannot access this page. Please contact the customer service team.

diff --git a/appsec/tests/helper/remote_config/listeners/asm_features_listener_test.cpp b/appsec/tests/helper/remote_config/listeners/asm_features_listener_test.cpp index 927756503f1..35c6e249ba8 100644 --- a/appsec/tests/helper/remote_config/listeners/asm_features_listener_test.cpp +++ b/appsec/tests/helper/remote_config/listeners/asm_features_listener_test.cpp @@ -14,12 +14,11 @@ namespace dds { namespace mock = remote_config::mock; -auto &ASM_FEATURES = remote_config::known_products::ASM_FEATURES; remote_config::config get_config_with_status(std::string status) { return mock::get_config( - ASM_FEATURES, "{\"asm\":{\"enabled\":" + status + "}}"); + "ASM_FEATURES", "{\"asm\":{\"enabled\":" + status + "}}"); } remote_config::config get_enabled_config(bool as_string = true) @@ -130,7 +129,7 @@ TEST(RemoteConfigAsmFeaturesListener, std::string error_message = ""; std::string expected_error_message = "Invalid config contents"; remote_config::config non_base_64_content_config = - mock::get_config(ASM_FEATURES, invalid_content); + mock::get_config("ASM_FEATURES", invalid_content); try { listener.on_update(non_base_64_content_config); @@ -153,7 +152,7 @@ TEST(RemoteConfigAsmFeaturesListener, remote_config::asm_features_listener listener(remote_config_service); std::string invalid_content = "invalidJsonContent"; remote_config::config config = - mock::get_config(ASM_FEATURES, invalid_content); + mock::get_config("ASM_FEATURES", invalid_content); try { listener.on_update(config); @@ -175,7 +174,7 @@ TEST(RemoteConfigAsmFeaturesListener, ListenerThrowsAnErrorWhenAsmKeyMissing) auto remote_config_service = std::make_shared(); remote_config::asm_features_listener listener(remote_config_service); remote_config::config asm_key_missing = - mock::get_config(ASM_FEATURES, "{}"); + mock::get_config("ASM_FEATURES", "{}"); try { listener.on_update(asm_key_missing); @@ -196,7 +195,7 @@ TEST(RemoteConfigAsmFeaturesListener, ListenerThrowsAnErrorWhenAsmIsNotValid) auto remote_config_service = std::make_shared(); remote_config::asm_features_listener listener(remote_config_service); remote_config::config invalid_asm_key = - mock::get_config(ASM_FEATURES, "{ \"asm\": 123}"); + mock::get_config("ASM_FEATURES", "{ \"asm\": 123}"); try { listener.on_update(invalid_asm_key); @@ -218,7 +217,7 @@ TEST( auto remote_config_service = std::make_shared(); remote_config::asm_features_listener listener(remote_config_service); remote_config::config enabled_key_missing = - mock::get_config(ASM_FEATURES, "{ \"asm\": {}}"); + mock::get_config("ASM_FEATURES", "{ \"asm\": {}}"); try { listener.on_update(enabled_key_missing); @@ -240,7 +239,7 @@ TEST(RemoteConfigAsmFeaturesListener, auto remote_config_service = std::make_shared(); remote_config::asm_features_listener listener(remote_config_service); remote_config::config enabled_key_invalid = - mock::get_config(ASM_FEATURES, "{ \"asm\": { \"enabled\": 123}}"); + mock::get_config("ASM_FEATURES", "{ \"asm\": { \"enabled\": 123}}"); try { listener.on_update(enabled_key_invalid); diff --git a/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_aggregator_test.cpp b/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_aggregator_test.cpp index d04f80dc399..43c0974819e 100644 --- a/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_aggregator_test.cpp +++ b/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_aggregator_test.cpp @@ -60,7 +60,7 @@ TEST(RemoteConfigAsmAggregator, EmptyConfigThrows) rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - EXPECT_THROW(aggregator.add(get_config(known_products::ASM, {})), + EXPECT_THROW(aggregator.add(get_config("ASM", {})), std::runtime_error); // mmap failure aggregator.aggregate(doc); @@ -92,7 +92,7 @@ TEST(RemoteConfigAsmAggregator, IncorrectTypeThrows) rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - EXPECT_THROW(aggregator.add(get_config(known_products::ASM, rule_override)), + EXPECT_THROW(aggregator.add(get_config("ASM", rule_override)), remote_config::error_applying_config); aggregator.aggregate(doc); @@ -122,7 +122,7 @@ TEST(RemoteConfigAsmAggregator, RulesOverrideEmpty) rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, rule_override)); + aggregator.add(get_config("ASM", rule_override)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -151,7 +151,7 @@ TEST(RemoteConfigAsmAggregator, RulesOverrideSingleConfig) rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, rule_override)); + aggregator.add(get_config("ASM", rule_override)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -194,10 +194,10 @@ TEST(RemoteConfigAsmAggregator, RulesOverrideMultipleConfigs) rapidjson::Document doc(rapidjson::kObjectType); remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, rule_override)); - aggregator.add(get_config(known_products::ASM, rule_override)); - aggregator.add(get_config(known_products::ASM, rule_override)); - aggregator.add(get_config(known_products::ASM, rule_override)); + aggregator.add(get_config("ASM", rule_override)); + aggregator.add(get_config("ASM", rule_override)); + aggregator.add(get_config("ASM", rule_override)); + aggregator.add(get_config("ASM", rule_override)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -242,15 +242,15 @@ TEST(RemoteConfigAsmAggregator, RulesOverrideIgnoreInvalidConfigs) rapidjson::Document doc(rapidjson::kObjectType); remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, rule_override)); - aggregator.add(get_config(known_products::ASM, rule_override)); + aggregator.add(get_config("ASM", rule_override)); + aggregator.add(get_config("ASM", rule_override)); { const std::string invalid = R"({"rules_override": {"rules_target": [{"tags": {"confidence": "1"}}], "on_match": ["block"]}})"; - EXPECT_THROW(aggregator.add(get_config(known_products::ASM, invalid)), + EXPECT_THROW(aggregator.add(get_config("ASM", invalid)), remote_config::error_applying_config); } - aggregator.add(get_config(known_products::ASM, rule_override)); + aggregator.add(get_config("ASM", rule_override)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -296,7 +296,7 @@ TEST(RemoteConfigAsmAggregator, RulesOverridesConfigCycling) { rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, rule_override)); + aggregator.add(get_config("ASM", rule_override)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -336,9 +336,9 @@ TEST(RemoteConfigAsmAggregator, RulesOverridesConfigCycling) { rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, rule_override)); - aggregator.add(get_config(known_products::ASM, rule_override)); - aggregator.add(get_config(known_products::ASM, rule_override)); + aggregator.add(get_config("ASM", rule_override)); + aggregator.add(get_config("ASM", rule_override)); + aggregator.add(get_config("ASM", rule_override)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -385,7 +385,7 @@ TEST(RemoteConfigAsmAggregator, ActionsSingleConfig) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -414,9 +414,9 @@ TEST(RemoteConfigAsmAggregator, ActionsMultipleConfigs) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, action_definitions)); - aggregator.add(get_config(known_products::ASM, action_definitions)); - aggregator.add(get_config(known_products::ASM, action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -445,15 +445,15 @@ TEST(RemoteConfigAsmAggregator, ActionsIgnoreInvalidConfigs) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); { const std::string invalid = R"({"actions": {"id": "redirect", "type": "redirect_request", "parameters": {"status_code": "303", "location": "localhost"}}})"; - EXPECT_THROW(aggregator.add(get_config(known_products::ASM, invalid)), + EXPECT_THROW(aggregator.add(get_config("ASM", invalid)), remote_config::error_applying_config); } - aggregator.add(get_config(known_products::ASM, action_definitions)); - aggregator.add(get_config(known_products::ASM, action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -483,9 +483,9 @@ TEST(RemoteConfigAsmAggregator, ActionsConfigCycling) { rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, action_definitions)); - aggregator.add(get_config(known_products::ASM, action_definitions)); - aggregator.add(get_config(known_products::ASM, action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -508,7 +508,7 @@ TEST(RemoteConfigAsmAggregator, ActionsConfigCycling) { rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, action_definitions)); + aggregator.add(get_config("ASM", action_definitions)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -538,7 +538,7 @@ TEST(RemoteConfigAsmAggregator, ExclusionsSingleConfig) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -567,10 +567,10 @@ TEST(RemoteConfigAsmAggregator, ExclusionsMultipleConfigs) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -599,15 +599,15 @@ TEST(RemoteConfigAsmAggregator, ExclusionsIgnoreInvalidConfigs) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); { const std::string invalid = R"({"exclusions": {"id":1,"rules_target":[{"rule_id":1}]}})"; - EXPECT_THROW(aggregator.add(get_config(known_products::ASM, invalid)), + EXPECT_THROW(aggregator.add(get_config("ASM", invalid)), remote_config::error_applying_config); } - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -637,10 +637,10 @@ TEST(RemoteConfigAsmAggregator, ExclusionsConfigCycling) { rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -663,7 +663,7 @@ TEST(RemoteConfigAsmAggregator, ExclusionsConfigCycling) { rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -693,7 +693,7 @@ TEST(RemoteConfigAsmAggregator, CustomRulesSingleConfig) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -722,15 +722,15 @@ TEST(RemoteConfigAsmAggregator, CustomRulesMultipleConfigs) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); { const std::string invalid = R"({"custom_rules": {"id":"1","name":"custom_rule1","tags":{"type":"custom","category":"custom"},"conditions":[{"operator":"match_regex","parameters":{"inputs":[{"address":"arg3","key_path":[]}],"regex":"^custom.*"}}],"on_match":["block"]}})"; - EXPECT_THROW(aggregator.add(get_config(known_products::ASM, invalid)), + EXPECT_THROW(aggregator.add(get_config("ASM", invalid)), remote_config::error_applying_config); } - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -759,10 +759,10 @@ TEST(RemoteConfigAsmAggregator, CustomRulesIgnoreInvalidConfigs) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -792,10 +792,10 @@ TEST(RemoteConfigAsmAggregator, CustomRulesConfigCycling) { rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -818,7 +818,7 @@ TEST(RemoteConfigAsmAggregator, CustomRulesConfigCycling) { rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -848,7 +848,7 @@ TEST(RemoteConfigAsmAggregator, AllSingleConfigs) remote_config::asm_aggregator aggregator; aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); aggregator.aggregate(doc); const auto &overrides = doc["rules_override"]; @@ -877,23 +877,23 @@ TEST(RemoteConfigAsmAggregator, IgnoreInvalidConfigs) { const std::string update = R"({"rules_override": [{"rules_target": [{"tags": {"confidence": "1"}}], "on_match": ["block"]}]})"; - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); } { const std::string update = R"({"exclusions":[{"id":1,"rules_target":[{"rule_id":1}]}]})"; - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); } { const std::string update = R"({"actions": {"id": "redirect", "type": "redirect_request", "parameters": {"status_code": "303", "location": "localhost"}}})"; - EXPECT_THROW(aggregator.add(get_config(known_products::ASM, update)), + EXPECT_THROW(aggregator.add(get_config("ASM", update)), remote_config::error_applying_config); } { const std::string update = R"({"custom_rules":[{"id":"1","name":"custom_rule1","tags":{"type":"custom","category":"custom"},"conditions":[{"operator":"match_regex","parameters":{"inputs":[{"address":"arg3","key_path":[]}],"regex":"^custom.*"}}],"on_match":["block"]}]})"; - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); } aggregator.aggregate(doc); @@ -923,23 +923,23 @@ TEST(RemoteConfigAsmAggregator, IgnoreInvalidOverlappingConfigs) { const std::string update = R"({"rules_override": [{"rules_target": [{"tags": {"confidence": "1"}}], "on_match": ["block"]}],"exclusions":[{"id":1,"rules_target":[{"rule_id":1}]}]})"; - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); } { const std::string update = R"({"exclusions":[{"id":1,"rules_target":[{"rule_id":1}]}],"custom_rules":[{"id":"1","name":"custom_rule1","tags":{"type":"custom","category":"custom"},"conditions":[{"operator":"match_regex","parameters":{"inputs":[{"address":"arg3","key_path":[]}],"regex":"^custom.*"}}],"on_match":["block"]}]})"; - aggregator.add(get_config(known_products::ASM, update)); + aggregator.add(get_config("ASM", update)); } { const std::string update = R"({"rules_override": [{"rules_target": [{"tags": {"confidence": "1"}}], "on_match": ["block"]}],"actions": {"id": "redirect", "type": "redirect_request", "parameters": {"status_code": "303", "location": "localhost"}}})"; - EXPECT_THROW(aggregator.add(get_config(known_products::ASM, update)), + EXPECT_THROW(aggregator.add(get_config("ASM", update)), remote_config::error_applying_config); } { const std::string update = R"({"custom_rules":{"id":"1","name":"custom_rule1","tags":{"type":"custom","category":"custom"},"conditions":[{"operator":"match_regex","parameters":{"inputs":[{"address":"arg3","key_path":[]}],"regex":"^custom.*"}}],"on_match":["block"]}})"; - EXPECT_THROW(aggregator.add(get_config(known_products::ASM, update)), + EXPECT_THROW(aggregator.add(get_config("ASM", update)), remote_config::error_applying_config); } aggregator.aggregate(doc); diff --git a/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_data_aggregator_test.cpp b/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_data_aggregator_test.cpp index f9573d6135f..776bc51efdb 100644 --- a/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_data_aggregator_test.cpp +++ b/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_data_aggregator_test.cpp @@ -62,7 +62,7 @@ remote_config::config get_rules_data(std::vector data) rapidjson::Writer writer(buffer); document.Accept(writer); - return get_config(known_products::ASM_DATA, buffer.get_string_ref()); + return get_config("ASM_DATA", buffer.get_string_ref()); } TEST(RemoteConfigAsmDataAggregator, ParseRulesData) @@ -335,8 +335,7 @@ TEST(RemoteConfigAsmDataAggregator, IgnoreInvalidConfigs) { const std::string &invalid = R"({"rules_data": [{"id": "id01", "data": [{"expiration": 11, "value": "1.2.3.5"} ], "type": "ip_with_expiration"},{"data": [{"expiration": 11111, "value": "1.2.3.4"} ], "type": "ip_with_expiration"}]})"; - EXPECT_THROW( - aggregator.add(get_config(known_products::ASM_DATA, invalid)), + EXPECT_THROW(aggregator.add(get_config("ASM_DATA", invalid)), remote_config::error_applying_config); } aggregator.aggregate(doc); @@ -415,8 +414,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfContentNotInBase64) { std::string invalid_content = "&&&"; std::string expected_error_message = "Invalid config contents"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -439,8 +437,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfContentNotValidJsonContent) { std::string invalid_content = "InvalidJsonContent"; std::string expected_error_message = "Invalid config contents"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -465,8 +462,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfNoRulesDataKey) std::string expected_error_message = "Invalid config json contents: rules_data key missing or " "invalid"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -491,8 +487,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfRulesDataNotArray) std::string expected_error_message = "Invalid config json contents: rules_data key missing or " "invalid"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -516,8 +511,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfRulesDataEntryNotObject) std::string invalid_content = "{\"rules_data\": [\"invalid\"] }"; std::string expected_error_message = "Invalid config json contents: rules_data entry invalid"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -544,8 +538,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfNoId) std::string expected_error_message = "Invalid config json contents: rules_data missing a field or " "field is invalid"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -572,8 +565,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfIdNotString) std::string expected_error_message = "Invalid config json contents: rules_data missing a field or " "field is invalid"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -600,8 +592,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfNoType) std::string expected_error_message = "Invalid config json contents: rules_data missing a field or " "field is invalid"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -628,8 +619,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfTypeNotString) std::string expected_error_message = "Invalid config json contents: rules_data missing a field or " "field is invalid"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -655,8 +645,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfNoData) std::string expected_error_message = "Invalid config json contents: rules_data missing a field or " "field is invalid"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -683,8 +672,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfDataNotArray) std::string expected_error_message = "Invalid config json contents: rules_data missing a field or " "field is invalid"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -709,8 +697,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfDataEntryNotObject) R"({"rules_data": [{"data": [ "invalid" ], "id": "some_id", "type": "ip_with_expiration"} ] })"; std::string expected_error_message = "Invalid config json contents: Entry on data not a valid object"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -734,8 +721,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfDataExpirationHasInvalidType) std::string invalid_content = R"({"rules_data": [{"data": [{"expiration": "invalid", "value": "1.2.3.4"}], "id": "some_id", "type": "data_with_expiration"}]})"; std::string expected_error_message = "Invalid type for expiration entry"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -760,8 +746,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfDataValueMissing) "{\"rules_data\": [{\"data\": [{\"expiration\": 11} ], \"id\": " "\"some_id\", \"type\": \"data_with_expiration\"} ] }"; std::string expected_error_message = "Invalid value of data entry"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; @@ -787,8 +772,7 @@ TEST(RemoteConfigAsmDataAggregator, ThrowsAnErrorIfDataValueHasInvalidType) "\"value\": 1234} ], \"id\": \"some_id\", \"type\": " "\"ip_with_expiration\"} ] }"; std::string expected_error_message = "Invalid value of data entry"; - remote_config::config config = - get_config(known_products::ASM_DATA, invalid_content); + remote_config::config config = get_config("ASM_DATA", invalid_content); remote_config::asm_data_aggregator aggregator; diff --git a/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_dd_aggregator_test.cpp b/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_dd_aggregator_test.cpp index afa9f055f76..1c9dd18f238 100644 --- a/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_dd_aggregator_test.cpp +++ b/appsec/tests/helper/remote_config/listeners/config_aggregators/asm_dd_aggregator_test.cpp @@ -24,7 +24,7 @@ TEST(RemoteConfigAsmDdAggregator, AddConfig) rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.add(get_config(known_products::ASM_DD, waf_rule)); + aggregator.add(get_config("ASM_DD", waf_rule)); aggregator.aggregate(doc); const auto &rules = doc["rules"]; @@ -38,7 +38,7 @@ TEST(RemoteConfigAsmDdAggregator, RemoveConfig) rapidjson::Document doc(rapidjson::kObjectType); aggregator.init(&doc.GetAllocator()); - aggregator.remove(get_config(known_products::ASM_DD, waf_rule)); + aggregator.remove(get_config("ASM_DD", waf_rule)); aggregator.aggregate(doc); const auto &rules = doc["rules"]; @@ -55,8 +55,7 @@ TEST(RemoteConfigAsmDdAggregator, AddConfigInvalidBase64Content) std::string invalid_content = "&&&"; std::string error_message = ""; std::string expected_error_message = "Invalid config contents"; - remote_config::config config = - get_config(known_products::ASM_DD, invalid_content); + remote_config::config config = get_config("ASM_DD", invalid_content); remote_config::asm_dd_aggregator aggregator; rapidjson::Document doc(rapidjson::kObjectType); @@ -79,8 +78,7 @@ TEST(RemoteConfigAsmDdAggregator, AddConfigInvalidJsonContent) std::string invalid_content = "InvalidJsonContent"; std::string error_message = ""; std::string expected_error_message = "Invalid config contents"; - remote_config::config config = - get_config(known_products::ASM_DD, invalid_content); + remote_config::config config = get_config("ASM_DD", invalid_content); remote_config::asm_dd_aggregator aggregator; rapidjson::Document doc(rapidjson::kObjectType); diff --git a/appsec/tests/helper/remote_config/listeners/engine_listener_test.cpp b/appsec/tests/helper/remote_config/listeners/engine_listener_test.cpp index 3c75044cc2a..1e3a3d4bb14 100644 --- a/appsec/tests/helper/remote_config/listeners/engine_listener_test.cpp +++ b/appsec/tests/helper/remote_config/listeners/engine_listener_test.cpp @@ -57,8 +57,7 @@ TEST(RemoteConfigEngineListener, UnknownConfig) remote_config::engine_listener listener(engine); listener.init(); - EXPECT_THROW( - listener.on_update(get_config(known_products::UNKNOWN, waf_rule)), + EXPECT_THROW(listener.on_update(get_config("UNKNOWN", waf_rule)), error_applying_config); listener.commit(); } @@ -75,7 +74,7 @@ TEST(RemoteConfigEngineListener, RuleUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM_DD, waf_rule)); + listener.on_update(get_config("ASM_DD", waf_rule)); listener.commit(); { @@ -105,7 +104,7 @@ TEST(RemoteConfigEngineListener, RuleUpdateFallback) remote_config::engine_listener listener(engine, create_sample_rules_ok()); listener.init(); - listener.on_unapply(get_config(known_products::ASM_DD, waf_rule)); + listener.on_unapply(get_config("ASM_DD", waf_rule)); listener.commit(); { @@ -138,7 +137,7 @@ TEST(RemoteConfigEngineListener, RulesOverrideUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); listener.commit(); { @@ -179,8 +178,8 @@ TEST(RemoteConfigEngineListener, RulesAndRulesOverrideUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM_DD, waf_rule)); - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM_DD", waf_rule)); + listener.on_update(get_config("ASM", update)); listener.commit(); { @@ -228,7 +227,7 @@ TEST(RemoteConfigEngineListener, ExclusionsUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); listener.commit(); { @@ -270,8 +269,8 @@ TEST(RemoteConfigEngineListener, RulesAndExclusionsUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM_DD, waf_rule)); - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM_DD", waf_rule)); + listener.on_update(get_config("ASM", update)); listener.commit(); { @@ -320,7 +319,7 @@ TEST(RemoteConfigEngineListener, ActionsUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); listener.commit(); { @@ -363,8 +362,8 @@ TEST(RemoteConfigEngineListener, RulesAndActionsUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM_DD, waf_rule)); - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM_DD", waf_rule)); + listener.on_update(get_config("ASM", update)); listener.commit(); { @@ -415,7 +414,7 @@ TEST(RemoteConfigEngineListener, CustomRulesUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); listener.commit(); { @@ -460,8 +459,8 @@ TEST(RemoteConfigEngineListener, RulesAndCustomRulesUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM_DD, waf_rule)); - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM_DD", waf_rule)); + listener.on_update(get_config("ASM", update)); listener.commit(); { @@ -509,7 +508,7 @@ TEST(RemoteConfigEngineListener, RulesDataUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM_DATA, update)); + listener.on_update(get_config("ASM_DATA", update)); listener.commit(); { @@ -543,8 +542,8 @@ TEST(RemoteConfigEngineListener, RulesAndRuleDataUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM_DD, waf_rule)); - listener.on_update(get_config(known_products::ASM_DATA, update)); + listener.on_update(get_config("ASM_DD", waf_rule)); + listener.on_update(get_config("ASM_DATA", update)); listener.commit(); { @@ -581,11 +580,11 @@ TEST(RemoteConfigEngineListener, FullUpdate) remote_config::engine_listener listener(engine); listener.init(); - listener.on_update(get_config(known_products::ASM_DD, waf_rule)); + listener.on_update(get_config("ASM_DD", waf_rule)); { const std::string update = R"({"rules_data":[{"id":"blocked_ips","type":"ip_with_expiration","data":[{"value":"1.2.3.4","expiration":0}]}]})"; - listener.on_update(get_config(known_products::ASM_DATA, update)); + listener.on_update(get_config("ASM_DATA", update)); } { const std::string update = @@ -594,23 +593,23 @@ TEST(RemoteConfigEngineListener, FullUpdate) {"inputs":[{"address":"arg3","key_path":[]}],"regex":"^custom.*"}}], "on_match":["block"]}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); } { const std::string update = R"({"exclusions":[{"id":1,"rules_target":[{"rule_id":1}]}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); } { const std::string update = R"({"actions": [{"id": "redirect", "type": "redirect_request", "parameters": {"status_code": "303", "location": "localhost"}}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); } { const std::string update = R"({"rules_override": [{"rules_target": [{"rule_id": "1"}], "enabled":"false"}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); } listener.commit(); @@ -637,11 +636,11 @@ TEST(RemoteConfigEngineListener, MultipleInitCommitUpdates) remote_config::engine_listener listener(engine, create_sample_rules_ok()); listener.init(); - listener.on_update(get_config(known_products::ASM_DD, waf_rule)); + listener.on_update(get_config("ASM_DD", waf_rule)); { const std::string update = R"({"rules_data":[{"id":"blocked_ips","type":"ip_with_expiration","data":[{"value":"1.2.3.4","expiration":0}]}]})"; - listener.on_update(get_config(known_products::ASM_DATA, update)); + listener.on_update(get_config("ASM_DATA", update)); } listener.commit(); @@ -676,12 +675,12 @@ TEST(RemoteConfigEngineListener, MultipleInitCommitUpdates) {"inputs":[{"address":"arg3","key_path":[]}],"regex":"^custom.*"}}], "on_match":["block"]}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); } { const std::string update = R"({"exclusions":[{"id":1,"rules_target":[{"rule_id":1}]}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); } listener.commit(); @@ -717,17 +716,17 @@ TEST(RemoteConfigEngineListener, MultipleInitCommitUpdates) } listener.init(); - listener.on_update(get_config(known_products::ASM_DD, waf_rule)); + listener.on_update(get_config("ASM_DD", waf_rule)); { const std::string update = R"({"actions": [{"id": "redirect", "type": "redirect_request", "parameters": {"status_code": "303", "location": "localhost"}}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); } { const std::string update = R"({"rules_override": [{"rules_target": [{"rule_id": "1"}], "enabled":"false"}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); } listener.commit(); @@ -800,7 +799,7 @@ TEST(RemoteConfigEngineListener, EngineRuleUpdate) remote_config::engine_listener listener(e); listener.init(); - listener.on_update(get_config(known_products::ASM_DD, new_rules)); + listener.on_update(get_config("ASM_DD", new_rules)); listener.commit(); { @@ -843,7 +842,7 @@ TEST(RemoteConfigEngineListener, EngineRuleUpdateFallback) remote_config::engine_listener listener(e, create_sample_rules_ok()); listener.init(); - listener.on_unapply(get_config(known_products::ASM_DD, "")); + listener.on_unapply(get_config("ASM_DD", "")); listener.commit(); { @@ -880,7 +879,7 @@ TEST(RemoteConfigEngineListener, EngineRuleOverrideUpdateDisableRule) const std::string rule_override = R"({"rules_override": [{"rules_target": [{"rule_id": "1"}], "enabled":"false"}]})"; - listener.on_update(get_config(known_products::ASM, rule_override)); + listener.on_update(get_config("ASM", rule_override)); { auto ctx = engine->get_context(); @@ -929,7 +928,7 @@ TEST(RemoteConfigEngineListener, RuleOverrideUpdateSetOnMatch) const std::string rule_override = R"({"rules_override": [{"rules_target": [{"tags": {"type": "flow1"}}], "on_match": ["block"]}]})"; - listener.on_update(get_config(known_products::ASM, rule_override)); + listener.on_update(get_config("ASM", rule_override)); { auto ctx = engine->get_context(); @@ -982,7 +981,7 @@ TEST(RemoteConfigEngineListener, EngineRuleOverrideAndActionsUpdate) {"status_code": "303", "location": "localhost"}}],"rules_override": [{"rules_target": [{"rule_id": "1"}], "on_match": ["redirect"]}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); { auto ctx = engine->get_context(); @@ -1032,7 +1031,7 @@ TEST(RemoteConfigEngineListener, EngineExclusionsUpdatePasslistRule) const std::string update = R"({"exclusions":[{"id":1,"rules_target":[{"rule_id":1}]}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); { auto ctx = engine->get_context(); @@ -1093,7 +1092,7 @@ TEST(RemoteConfigEngineListener, EngineCustomRulesUpdate) "category":"custom"},"conditions":[{"operator":"match_regex","parameters": {"inputs":[{"address":"arg3","key_path":[]}],"regex":"^custom.*"}}], "on_match":["block"]}]})"; - listener.on_update(get_config(known_products::ASM, update)); + listener.on_update(get_config("ASM", update)); { auto ctx = engine->get_context(); @@ -1137,8 +1136,7 @@ TEST(RemoteConfigEngineListener, EngineCustomRulesUpdate) } listener.init(); - listener.on_update( - get_config(known_products::ASM, R"({"custom_rules":[]})")); + listener.on_update(get_config("ASM", R"({"custom_rules":[]})")); listener.commit(); { @@ -1190,7 +1188,7 @@ TEST(RemoteConfigEngineListener, EngineRuleDataUpdate) const std::string update = R"({"rules_data":[{"id":"blocked_ips","type":"ip_with_expiration","data":[{"value":"1.2.3.4","expiration":0}]}]})"; - listener.on_update(get_config(known_products::ASM_DATA, update)); + listener.on_update(get_config("ASM_DATA", update)); { auto ctx = e->get_context(); diff --git a/appsec/tests/helper/remote_config/mocks.cpp b/appsec/tests/helper/remote_config/mocks.cpp index c7fc1729a39..6aa09887817 100644 --- a/appsec/tests/helper/remote_config/mocks.cpp +++ b/appsec/tests/helper/remote_config/mocks.cpp @@ -5,7 +5,8 @@ #include namespace dds::remote_config::mock { -remote_config::config get_config(product p, const std::string &content) +remote_config::config get_config( + std::string_view product_name, const std::string &content) { static std::atomic id{0}; @@ -34,7 +35,7 @@ remote_config::config get_config(product p, const std::string &content) ::close(shm_fd); - return {shm_path, std::string{"datadog/2/"} + std::string{p.name()} + + return {shm_path, std::string{"datadog/2/"} + std::string{product_name} + "/foobar_" + std::to_string(cur_id) + "/config"}; } } // namespace dds::remote_config::mock diff --git a/appsec/tests/helper/remote_config/mocks.hpp b/appsec/tests/helper/remote_config/mocks.hpp index b1cbb0d9696..f34f1d7701d 100644 --- a/appsec/tests/helper/remote_config/mocks.hpp +++ b/appsec/tests/helper/remote_config/mocks.hpp @@ -29,6 +29,7 @@ class engine : public dds::engine { static auto create() { return std::shared_ptr(new engine()); } }; -remote_config::config get_config(product p, const std::string &content); +remote_config::config get_config( + std::string_view product_name, const std::string &content); } // namespace dds::remote_config::mock