mirror of
https://github.com/openappsec/openappsec.git
synced 2025-09-30 03:34:26 +03:00
sync code
This commit is contained in:
@@ -93,10 +93,13 @@ public:
|
||||
res << "\"name\": \"" << details->getAgentId() << "\", ";
|
||||
auto rest = Singleton::Consume<I_RestApi>::by<IntelligenceComponentV2>();
|
||||
res << "\"url\": \"http://127.0.0.1:" << rest->getListeningPort() <<"/set-new-invalidation\", ";
|
||||
res << "\"capabilities\": { \"getBulkCallback\": " << "true" << " }, ";
|
||||
res << "\"dataMap\": [";
|
||||
res << stream.str();
|
||||
res << " ] }";
|
||||
|
||||
dbgTrace(D_INTELLIGENCE) << res.str();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -148,13 +151,19 @@ public:
|
||||
void
|
||||
performCallBacks(const Invalidation &invalidation, const string ®istration_id) const override
|
||||
{
|
||||
dbgDebug(D_INTELLIGENCE) << "Looking for callbacks for invalidation " << invalidation.genObject();
|
||||
dbgTrace(D_INTELLIGENCE)
|
||||
<< "Looking for callbacks for invalidation "
|
||||
<< invalidation.genObject()
|
||||
<< " registration id: "
|
||||
<< registration_id;
|
||||
if (registration_id != "") {
|
||||
auto invalidation_cb = registration_id_to_cb.find(registration_id);
|
||||
if (invalidation_cb != registration_id_to_cb.end()) return invalidation_cb->second(invalidation);
|
||||
}
|
||||
dbgDebug(D_INTELLIGENCE) << "Have not found callback per registration id";
|
||||
|
||||
for (auto ®isted_invalidation : callbacks) {
|
||||
dbgTrace(D_INTELLIGENCE) << "Checking against: " << registed_invalidation.second.first.genObject();
|
||||
dbgDebug(D_INTELLIGENCE) << "Checking against: " << registed_invalidation.second.first.genObject();
|
||||
performCallBacksImpl(invalidation, registed_invalidation.second);
|
||||
}
|
||||
}
|
||||
@@ -169,6 +178,7 @@ private:
|
||||
auto ®istereed_invalidation = invalidation_and_cb.first;
|
||||
auto &cb = invalidation_and_cb.second;
|
||||
if (!registereed_invalidation.matches(actual_invalidation)) return;
|
||||
dbgTrace(D_INTELLIGENCE) << "Found a matching invalidation registration, should callback";
|
||||
cb(actual_invalidation);
|
||||
}
|
||||
|
||||
@@ -177,7 +187,7 @@ private:
|
||||
uint running_id = 0;
|
||||
};
|
||||
|
||||
class ReceiveInvalidation : public ServerRest
|
||||
class SingleReceivedInvalidation : public ServerRest
|
||||
{
|
||||
public:
|
||||
void
|
||||
@@ -248,6 +258,29 @@ private:
|
||||
C2S_OPTIONAL_PARAM(string, invalidationType);
|
||||
};
|
||||
|
||||
|
||||
class ReceiveInvalidation : public ServerRest
|
||||
{
|
||||
public:
|
||||
|
||||
void
|
||||
doCall() override
|
||||
{
|
||||
dbgTrace(D_INTELLIGENCE)
|
||||
<< (bulkArray.isActive() ?
|
||||
"BULK invalidations, receiving invalidations in bulks"
|
||||
: "error in format, expected bulk invalidations, not single");
|
||||
|
||||
for (SingleReceivedInvalidation &r : bulkArray.get()) {
|
||||
r.doCall();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
private:
|
||||
C2S_LABEL_PARAM(vector<SingleReceivedInvalidation>, bulkArray, BULK_ARRAY_NAME);
|
||||
};
|
||||
|
||||
class PagingController
|
||||
{
|
||||
public:
|
||||
|
@@ -486,6 +486,8 @@ TEST_F(IntelligenceInvalidation, register_for_invalidation)
|
||||
EXPECT_THAT(body, HasSubstr("\"mainAttributes\": [ { \"attr2\": \"2\" } ]"));
|
||||
EXPECT_THAT(body, HasSubstr("\"attributes\": [ { \"attr3\": \"3\" } ]"));
|
||||
EXPECT_TRUE(md.getConnectionFlags().isSet(MessageConnectionConfig::UNSECURE_CONN));
|
||||
EXPECT_THAT(body, HasSubstr("\"capabilities\": { \"getBulkCallback\": true }"));
|
||||
|
||||
}
|
||||
|
||||
TEST_F(IntelligenceInvalidation, register_for_multiple_assets_invalidation)
|
||||
@@ -529,6 +531,7 @@ TEST_F(IntelligenceInvalidation, register_for_multiple_assets_invalidation)
|
||||
));
|
||||
|
||||
EXPECT_NE(i_intelligence->registerInvalidation(invalidation, callback), 0);
|
||||
EXPECT_THAT(body, HasSubstr("\"capabilities\": { \"getBulkCallback\": true }"));
|
||||
|
||||
EXPECT_THAT(
|
||||
body,
|
||||
@@ -606,7 +609,7 @@ TEST_F(IntelligenceInvalidation, invalidation_callback)
|
||||
.setObjectType(Intelligence::ObjectType::ASSET);
|
||||
|
||||
stringstream json;
|
||||
json << invalidation2.genObject();
|
||||
json << "[" << invalidation2.genObject() << "]";
|
||||
mock_invalidation->performRestCall(json);
|
||||
|
||||
EXPECT_EQ(recieved_invalidations.size(), 1u);
|
||||
@@ -650,7 +653,7 @@ TEST_F(IntelligenceInvalidation, delete_invalidation_callback)
|
||||
.setObjectType(Intelligence::ObjectType::ASSET);
|
||||
|
||||
stringstream json;
|
||||
json << invalidation2.genObject();
|
||||
json << "[" << invalidation2.genObject() << "]";
|
||||
mock_invalidation->performRestCall(json);
|
||||
|
||||
EXPECT_EQ(recieved_invalidations.size(), 0u);
|
||||
@@ -694,7 +697,7 @@ TEST_F(IntelligenceInvalidation, invalidation_short_handling)
|
||||
.setObjectType(Intelligence::ObjectType::ASSET);
|
||||
|
||||
stringstream json;
|
||||
json << invalidation2.genObject();
|
||||
json << "[" << invalidation2.genObject() << "]";
|
||||
mock_invalidation->performRestCall(json);
|
||||
|
||||
EXPECT_EQ(recieved_invalidations.size(), 0u);
|
||||
@@ -789,7 +792,7 @@ TEST_F(IntelligenceInvalidation, invalidation_flow_with_multiple_assets)
|
||||
.setObjectType(Intelligence::ObjectType::ASSET);
|
||||
|
||||
stringstream json1;
|
||||
json1 << not_matching_invalidation.genObject();
|
||||
json1 << "[" << not_matching_invalidation.genObject() << "]";
|
||||
mock_invalidation->performRestCall(json1);
|
||||
|
||||
EXPECT_EQ(recieved_invalidations.size(), 0u);
|
||||
@@ -805,7 +808,7 @@ TEST_F(IntelligenceInvalidation, invalidation_flow_with_multiple_assets)
|
||||
.setObjectType(Intelligence::ObjectType::ASSET);
|
||||
|
||||
stringstream json2;
|
||||
json2 << matching_invalidation.genObject();
|
||||
json2 << "[" << matching_invalidation.genObject() << "]";
|
||||
mock_invalidation->performRestCall(json2);
|
||||
|
||||
EXPECT_EQ(recieved_invalidations.size(), 1u);
|
||||
@@ -865,7 +868,7 @@ TEST_F(IntelligenceInvalidation, invalidation_cb_match_2_registred_assets)
|
||||
auto stop_listening_2 = make_scope_exit([&] { invalidation_2_to_register.stopListening(i_intelligence); });
|
||||
|
||||
stringstream json;
|
||||
json << matching_invalidation.genObject();
|
||||
json << "[" << matching_invalidation.genObject() << "]";
|
||||
mock_invalidation->performRestCall(json);
|
||||
|
||||
EXPECT_EQ(recieved_invalidations.size(), 2u);
|
||||
@@ -927,9 +930,43 @@ TEST_F(IntelligenceInvalidation, invalidation_cb_match_by_registration_id)
|
||||
|
||||
string modifiedJsonString = matching_invalidation.genObject().substr(2);
|
||||
stringstream json;
|
||||
json << "{ \"invalidationRegistrationId\": \""<< *registration_id << "\", " << modifiedJsonString;
|
||||
json << "[{ \"invalidationRegistrationId\": \""<< *registration_id << "\", " << modifiedJsonString << "]";
|
||||
cout << json.str() << endl;
|
||||
mock_invalidation->performRestCall(json);
|
||||
|
||||
EXPECT_EQ(recieved_invalidations.size(), 1u);
|
||||
}
|
||||
|
||||
TEST_F(IntelligenceInvalidation, bulk_invalidation_callback)
|
||||
{
|
||||
stringstream configuration;
|
||||
configuration << "{";
|
||||
configuration << " \"agentSettings\":[";
|
||||
configuration << " {\"key\":\"agent.config.useLocalIntelligence\",\"id\":\"id1\",\"value\":\"true\"}";
|
||||
configuration << " ],";
|
||||
configuration << " \"intelligence\":{";
|
||||
configuration << " \"local intelligence server ip\":\"127.0.0.1\",";
|
||||
configuration << " \"local intelligence server primary port\":9090";
|
||||
configuration << " }";
|
||||
configuration << "}";
|
||||
Singleton::Consume<Config::I_Config>::from(conf)->loadConfiguration(configuration);
|
||||
|
||||
EXPECT_CALL(
|
||||
messaging_mock,
|
||||
sendSyncMessage(_, "/api/v2/intelligence/invalidation/register", _, _, _)
|
||||
).WillRepeatedly(Return(HTTPResponse(HTTPStatusCode::HTTP_OK, "")));
|
||||
|
||||
auto invalidation = Invalidation("agent_y");
|
||||
EXPECT_NE(i_intelligence->registerInvalidation(invalidation, callback), 0);
|
||||
auto invalidation2 = Invalidation("agent2");
|
||||
EXPECT_NE(i_intelligence->registerInvalidation(invalidation2, callback), 0);
|
||||
auto invalidation3 = Invalidation("agent3");
|
||||
EXPECT_NE(i_intelligence->registerInvalidation(invalidation3, callback), 0);
|
||||
|
||||
dbgTrace(D_INTELLIGENCE) << "2 callbacks: ";
|
||||
|
||||
stringstream json3;
|
||||
json3 << "[{\"class\":\"agent3\"},{\"class\":\"agent2\"}]";
|
||||
mock_invalidation->performRestCall(json3);
|
||||
EXPECT_EQ(recieved_invalidations.size(), 2u);
|
||||
}
|
||||
|
Reference in New Issue
Block a user