Skip to content

Commit 66d0476

Browse files
adrianM27goruklu
authored andcommitted
RDK-54098: Fix events upload time hazard in Analytics L2 tests
1 parent 3f6691b commit 66d0476

File tree

1 file changed

+120
-90
lines changed

1 file changed

+120
-90
lines changed

Tests/L2Tests/L2TestsPlugin/tests/Analytics_L2Test.cpp

Lines changed: 120 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -522,87 +522,94 @@ TEST_F(AnalyticsTest, SendAndReceiveMultipleEventsQueued)
522522
status = InvokeServiceMethod("org.rdk.System", "setTimeZoneDST", paramsJson, resultJson);
523523
EXPECT_EQ(status, Core::ERROR_NONE);
524524

525-
for (int i = 0; i < eventsSentNbr; i += eventsRcvMaxDfl) {
526-
string eventMsg = siftServer.AwaitData(SIFT_SERVER_TIMEOUT_SEC);
527-
EXPECT_NE(eventMsg, "");
528-
529-
// Check if the event message contains the expected fields
530-
JsonArray eventArray;
531-
eventArray.FromString(eventMsg);
532-
EXPECT_EQ(eventArray.Length(), eventsRcvMaxDfl);
533-
534-
for (int n = 0; n < eventsRcvMaxDfl; ++n) {
535-
JsonObject eventObj = eventArray[n].Object();
536-
537-
EXPECT_TRUE(eventObj.HasLabel("common_schema"));
538-
EXPECT_TRUE(eventObj.HasLabel("env"));
539-
EXPECT_TRUE(eventObj.HasLabel("product_name"));
540-
EXPECT_TRUE(eventObj.HasLabel("product_version"));
541-
EXPECT_TRUE(eventObj.HasLabel("event_schema"));
542-
EXPECT_TRUE(eventObj.HasLabel("event_name"));
543-
EXPECT_TRUE(eventObj.HasLabel("timestamp"));
544-
EXPECT_TRUE(eventObj.HasLabel("event_id"));
545-
EXPECT_TRUE(eventObj.HasLabel("event_source"));
546-
EXPECT_TRUE(eventObj.HasLabel("event_source_version"));
547-
EXPECT_TRUE(eventObj.HasLabel("logger_name"));
548-
EXPECT_TRUE(eventObj.HasLabel("logger_version"));
549-
EXPECT_TRUE(eventObj.HasLabel("partner_id"));
550-
EXPECT_TRUE(eventObj.HasLabel("device_model"));
551-
EXPECT_TRUE(eventObj.HasLabel("device_type"));
552-
EXPECT_TRUE(eventObj.HasLabel("device_timezone"));
553-
EXPECT_TRUE(eventObj.HasLabel("device_os_name"));
554-
EXPECT_TRUE(eventObj.HasLabel("device_os_version"));
555-
EXPECT_TRUE(eventObj.HasLabel("platform"));
556-
EXPECT_TRUE(eventObj.HasLabel("device_manufacturer"));
557-
EXPECT_TRUE(eventObj.HasLabel("authenticated"));
558-
EXPECT_TRUE(eventObj.HasLabel("session_id"));
559-
EXPECT_TRUE(eventObj.HasLabel("proposition"));
560-
EXPECT_TRUE(eventObj.HasLabel("retailer"));
561-
EXPECT_TRUE(eventObj.HasLabel("jv_agent"));
562-
EXPECT_TRUE(eventObj.HasLabel("coam"));
563-
EXPECT_TRUE(eventObj.HasLabel("device_serial_number"));
564-
EXPECT_TRUE(eventObj.HasLabel("device_mac_address"));
565-
EXPECT_TRUE(eventObj.HasLabel("country"));
566-
EXPECT_TRUE(eventObj.HasLabel("region"));
567-
EXPECT_TRUE(eventObj.HasLabel("account_type"));
568-
EXPECT_TRUE(eventObj.HasLabel("operator"));
569-
EXPECT_TRUE(eventObj.HasLabel("account_detail_type"));
570-
EXPECT_TRUE(eventObj.HasLabel("event_payload"));
571-
572-
EXPECT_EQ(eventObj["common_schema"].String(), "entos/common/v1");
573-
EXPECT_EQ(eventObj["env"].String(), "prod");
574-
EXPECT_EQ(eventObj["product_name"].String(), "entos");
575-
EXPECT_EQ(eventObj["product_version"].String(), "L2Test_EntertainmentOSVersion");
576-
EXPECT_EQ(eventObj["event_schema"].String(), "entos/L2TestEvent/1");
577-
EXPECT_EQ(eventObj["event_name"].String(), "L2TestEvent");
578-
EXPECT_EQ(eventObj["event_source"].String(), "L2Test");
579-
EXPECT_EQ(eventObj["event_source_version"].String(), "1.0.0");
580-
EXPECT_EQ(eventObj["logger_name"].String(), "Analytics");
581-
EXPECT_EQ(eventObj["partner_id"].String(), "rdkglobal");
582-
EXPECT_EQ(eventObj["device_model"].String(), "RDK");
583-
EXPECT_EQ(eventObj["device_type"].String(), "STB");
584-
EXPECT_EQ(eventObj["device_timezone"].Number(), -14400000);
585-
EXPECT_EQ(eventObj["device_os_name"].String(), "rdk");
586-
EXPECT_EQ(eventObj["device_os_version"].String(), "L2Test_STB");
587-
EXPECT_EQ(eventObj["platform"].String(), "L2Test_Proposition");
588-
EXPECT_EQ(eventObj["device_manufacturer"].String(), "L2Test_Manufacturer");
589-
EXPECT_EQ(eventObj["proposition"].String(), "L2Test_Proposition");
590-
EXPECT_EQ(eventObj["retailer"].String(), "L2Test_Retailer");
591-
EXPECT_EQ(eventObj["jv_agent"].String(), "L2Test_JVAgent");
592-
EXPECT_EQ(eventObj["coam"].Boolean(), true);
593-
EXPECT_EQ(eventObj["device_serial_number"].String(), "L2Test_SerialNumber");
594-
EXPECT_EQ(eventObj["device_mac_address"].String(), "01:02:03:04:05:06");
595-
EXPECT_EQ(eventObj["country"].String(), "USA");
596-
EXPECT_EQ(eventObj["region"].String(), "US-USA");
597-
EXPECT_EQ(eventObj["account_type"].String(), "L2Test_AccountType");
598-
EXPECT_EQ(eventObj["operator"].String(), "L2Test_Operator");
599-
EXPECT_EQ(eventObj["account_detail_type"].String(), "L2Test_DetailType");
600-
601-
JsonObject eventPayloadObj = eventObj["event_payload"].Object();
602-
EXPECT_TRUE(eventPayloadObj.HasLabel("data"));
603-
EXPECT_EQ(eventPayloadObj["data"].String(), "random data");
525+
// Collect all events
526+
eventMsg = siftServer.AwaitData(SIFT_SERVER_TIMEOUT_SEC);
527+
JsonArray eventArray;
528+
eventArray.FromString(eventMsg);
529+
int retry = eventsSentNbr;
530+
while (eventArray.Length() < eventsSentNbr && retry-- > 0) {
531+
// If not all events are received, wait for the rest
532+
string eventsMsg2 = siftServer.AwaitData(SIFT_SERVER_TIMEOUT_SEC);
533+
JsonArray eventArray2;
534+
eventArray2.FromString(eventsMsg2);
535+
for (int i = 0; i < eventArray2.Length(); ++i) {
536+
eventArray.Add(eventArray2[i]);
604537
}
605538
}
539+
540+
EXPECT_EQ(eventArray.Length(), eventsSentNbr);
541+
542+
for (int n = 0; n < eventsSentNbr; ++n) {
543+
JsonObject eventObj = eventArray[n].Object();
544+
545+
EXPECT_TRUE(eventObj.HasLabel("common_schema"));
546+
EXPECT_TRUE(eventObj.HasLabel("env"));
547+
EXPECT_TRUE(eventObj.HasLabel("product_name"));
548+
EXPECT_TRUE(eventObj.HasLabel("product_version"));
549+
EXPECT_TRUE(eventObj.HasLabel("event_schema"));
550+
EXPECT_TRUE(eventObj.HasLabel("event_name"));
551+
EXPECT_TRUE(eventObj.HasLabel("timestamp"));
552+
EXPECT_TRUE(eventObj.HasLabel("event_id"));
553+
EXPECT_TRUE(eventObj.HasLabel("event_source"));
554+
EXPECT_TRUE(eventObj.HasLabel("event_source_version"));
555+
EXPECT_TRUE(eventObj.HasLabel("logger_name"));
556+
EXPECT_TRUE(eventObj.HasLabel("logger_version"));
557+
EXPECT_TRUE(eventObj.HasLabel("partner_id"));
558+
EXPECT_TRUE(eventObj.HasLabel("device_model"));
559+
EXPECT_TRUE(eventObj.HasLabel("device_type"));
560+
EXPECT_TRUE(eventObj.HasLabel("device_timezone"));
561+
EXPECT_TRUE(eventObj.HasLabel("device_os_name"));
562+
EXPECT_TRUE(eventObj.HasLabel("device_os_version"));
563+
EXPECT_TRUE(eventObj.HasLabel("platform"));
564+
EXPECT_TRUE(eventObj.HasLabel("device_manufacturer"));
565+
EXPECT_TRUE(eventObj.HasLabel("authenticated"));
566+
EXPECT_TRUE(eventObj.HasLabel("session_id"));
567+
EXPECT_TRUE(eventObj.HasLabel("proposition"));
568+
EXPECT_TRUE(eventObj.HasLabel("retailer"));
569+
EXPECT_TRUE(eventObj.HasLabel("jv_agent"));
570+
EXPECT_TRUE(eventObj.HasLabel("coam"));
571+
EXPECT_TRUE(eventObj.HasLabel("device_serial_number"));
572+
EXPECT_TRUE(eventObj.HasLabel("device_mac_address"));
573+
EXPECT_TRUE(eventObj.HasLabel("country"));
574+
EXPECT_TRUE(eventObj.HasLabel("region"));
575+
EXPECT_TRUE(eventObj.HasLabel("account_type"));
576+
EXPECT_TRUE(eventObj.HasLabel("operator"));
577+
EXPECT_TRUE(eventObj.HasLabel("account_detail_type"));
578+
EXPECT_TRUE(eventObj.HasLabel("event_payload"));
579+
580+
EXPECT_EQ(eventObj["common_schema"].String(), "entos/common/v1");
581+
EXPECT_EQ(eventObj["env"].String(), "prod");
582+
EXPECT_EQ(eventObj["product_name"].String(), "entos");
583+
EXPECT_EQ(eventObj["product_version"].String(), "L2Test_EntertainmentOSVersion");
584+
EXPECT_EQ(eventObj["event_schema"].String(), "entos/L2TestEvent/1");
585+
EXPECT_EQ(eventObj["event_name"].String(), "L2TestEvent");
586+
EXPECT_EQ(eventObj["event_source"].String(), "L2Test");
587+
EXPECT_EQ(eventObj["event_source_version"].String(), "1.0.0");
588+
EXPECT_EQ(eventObj["logger_name"].String(), "Analytics");
589+
EXPECT_EQ(eventObj["partner_id"].String(), "rdkglobal");
590+
EXPECT_EQ(eventObj["device_model"].String(), "RDK");
591+
EXPECT_EQ(eventObj["device_type"].String(), "STB");
592+
EXPECT_EQ(eventObj["device_timezone"].Number(), -14400000);
593+
EXPECT_EQ(eventObj["device_os_name"].String(), "rdk");
594+
EXPECT_EQ(eventObj["device_os_version"].String(), "L2Test_STB");
595+
EXPECT_EQ(eventObj["platform"].String(), "L2Test_Proposition");
596+
EXPECT_EQ(eventObj["device_manufacturer"].String(), "L2Test_Manufacturer");
597+
EXPECT_EQ(eventObj["proposition"].String(), "L2Test_Proposition");
598+
EXPECT_EQ(eventObj["retailer"].String(), "L2Test_Retailer");
599+
EXPECT_EQ(eventObj["jv_agent"].String(), "L2Test_JVAgent");
600+
EXPECT_EQ(eventObj["coam"].Boolean(), true);
601+
EXPECT_EQ(eventObj["device_serial_number"].String(), "L2Test_SerialNumber");
602+
EXPECT_EQ(eventObj["device_mac_address"].String(), "01:02:03:04:05:06");
603+
EXPECT_EQ(eventObj["country"].String(), "USA");
604+
EXPECT_EQ(eventObj["region"].String(), "US-USA");
605+
EXPECT_EQ(eventObj["account_type"].String(), "L2Test_AccountType");
606+
EXPECT_EQ(eventObj["operator"].String(), "L2Test_Operator");
607+
EXPECT_EQ(eventObj["account_detail_type"].String(), "L2Test_DetailType");
608+
609+
JsonObject eventPayloadObj = eventObj["event_payload"].Object();
610+
EXPECT_TRUE(eventPayloadObj.HasLabel("data"));
611+
EXPECT_EQ(eventPayloadObj["data"].String(), "random data");
612+
}
606613
}
607614

608615
TEST_F(AnalyticsTest, SendAndReceiveMultipleEventsTimeOk)
@@ -615,7 +622,7 @@ TEST_F(AnalyticsTest, SendAndReceiveMultipleEventsTimeOk)
615622
uint32_t status = InvokeServiceMethod("org.rdk.System", "setTimeZoneDST", paramsJson, resultJson);
616623
EXPECT_EQ(status, Core::ERROR_NONE);
617624

618-
sleep(3);
625+
sleep(5);
619626

620627
paramsJson.Clear();
621628
paramsJson["eventName"] = "L2TestEvent";
@@ -626,22 +633,34 @@ TEST_F(AnalyticsTest, SendAndReceiveMultipleEventsTimeOk)
626633
eventPayload["data"] = "random data";
627634
paramsJson["eventPayload"] = eventPayload;
628635

629-
SiftServerMock siftServer;
630-
EXPECT_TRUE(siftServer.Start());
631-
632636
const int eventsSentNbr = 6;
633637

634638
for (int i = 0; i < eventsSentNbr; ++i) {
635639
status = InvokeServiceMethod("org.rdk.Analytics", "sendEvent", paramsJson, resultJson);
636640
EXPECT_EQ(status, Core::ERROR_NONE);
637641
}
638642

643+
// wait for all events to be stored in the analytics store
644+
sleep(3);
645+
646+
SiftServerMock siftServer;
647+
EXPECT_TRUE(siftServer.Start());
648+
639649
string eventMsg = siftServer.AwaitData(SIFT_SERVER_TIMEOUT_SEC);
640-
EXPECT_NE(eventMsg, "");
641650

642651
// Check if the event message contains the expected fields
643652
JsonArray eventArray;
644653
eventArray.FromString(eventMsg);
654+
int retry = eventsSentNbr;
655+
while (eventArray.Length() < eventsSentNbr && retry-- > 0) {
656+
// If not all events are received, wait for the rest
657+
string eventMsg2 = siftServer.AwaitData(SIFT_SERVER_TIMEOUT_SEC);
658+
JsonArray eventArray2;
659+
eventArray2.FromString(eventMsg2);
660+
for (int i = 0; i < eventArray2.Length(); ++i) {
661+
eventArray.Add(eventArray2[i]);
662+
}
663+
}
645664
EXPECT_EQ(eventArray.Length(), eventsSentNbr);
646665

647666
for (int n = 0; n < eventsSentNbr; ++n) {
@@ -1009,23 +1028,34 @@ TEST_F(AnalyticsTest, EventsMapping)
10091028
status = InvokeServiceMethod("org.rdk.Analytics", "sendEvent", paramsJson, resultJson);
10101029
EXPECT_EQ(status, Core::ERROR_NONE);
10111030

1012-
1013-
SiftServerMock siftServer;
1014-
EXPECT_TRUE(siftServer.Start());
1015-
10161031
// Set TimeZone to FINAL what allows event to be decorated and sent to Sift server
10171032
paramsJson.Clear();
10181033
paramsJson["timeZone"] = "America/New_York";
10191034
paramsJson["accuracy"] = "FINAL";
10201035
status = InvokeServiceMethod("org.rdk.System", "setTimeZoneDST", paramsJson, resultJson);
10211036
EXPECT_EQ(status, Core::ERROR_NONE);
10221037

1038+
// wait for all events to be stored in the analytics store
1039+
sleep(5);
1040+
1041+
SiftServerMock siftServer;
1042+
EXPECT_TRUE(siftServer.Start());
1043+
10231044
string eventsMsg = siftServer.AwaitData(SIFT_SERVER_TIMEOUT_SEC);
1024-
EXPECT_NE(eventsMsg, "");
10251045

10261046
// Check if the event message contains the expected fields
10271047
JsonArray eventArray;
10281048
eventArray.FromString(eventsMsg);
1049+
int retry = 3;
1050+
while (eventArray.Length() < 4 && retry-- > 0) {
1051+
// If not all events are received, wait for the rest
1052+
string eventsMsg2 = siftServer.AwaitData(SIFT_SERVER_TIMEOUT_SEC);
1053+
JsonArray eventArray2;
1054+
eventArray2.FromString(eventsMsg2);
1055+
for (int i = 0; i < eventArray2.Length(); ++i) {
1056+
eventArray.Add(eventArray2[i]);
1057+
}
1058+
}
10291059
EXPECT_EQ(eventArray.Length(), 4);
10301060

10311061
if (eventArray.Length() == 4) {
@@ -1046,4 +1076,4 @@ TEST_F(AnalyticsTest, EventsMapping)
10461076
EXPECT_EQ(eventObj["event_name"].String(), "L2TestEventMappedGenericSourceVersion");
10471077
}
10481078

1049-
}
1079+
}

0 commit comments

Comments
 (0)