sync code

This commit is contained in:
Ned Wright
2024-11-28 10:41:59 +00:00
parent 6255e1f30d
commit 1c1f0b7e29
59 changed files with 842 additions and 707 deletions

View File

@@ -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 &registration_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 &registed_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 &registereed_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:

View File

@@ -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);
}