@@ -15,6 +15,7 @@ constexpr size_t kNumChunks = 2;
1515constexpr size_t kChunkSize = RingFileSink::kBufferSize * kNumBuffers ;
1616constexpr uint64_t kRingSize = kChunkSize * kNumChunks ;
1717const ServiceRecorderOption kOption {" /dev/null" , 3 , kChunkSize , kNumChunks };
18+ struct ServiceRecorderTest : testing::TestWithParam<ServiceRecorderOption> {};
1819} // namespace
1920
2021TEST (ServiceRecorderTest, NoPacket) {
@@ -136,8 +137,8 @@ TEST(ServiceRecorderTest, EventStart) {
136137 EXPECT_TRUE (src.IsEmpty ());
137138}
138139
139- TEST (ServiceRecorderTest, EventProgress) {
140- ServiceRecorderOption option = kOption ;
140+ TEST_P (ServiceRecorderTest, EventProgress) {
141+ ServiceRecorderOption option = GetParam () ;
141142
142143 TableSource src;
143144 auto ring_sink = std::make_unique<MockRingSink>(option.chunk_size , option.num_chunks );
@@ -226,6 +227,18 @@ TEST(ServiceRecorderTest, EventProgress) {
226227 MockJsonlSink::Stringify (doc));
227228 return true ;
228229 });
230+ if (option.packet_stats ) {
231+ EXPECT_CALL (*json_sink, HandleDocument).WillOnce ([](const rapidjson::Document& doc) {
232+ EXPECT_EQ (R"( {"type":"packet-stats","data":{)"
233+ R"( "errorPackets":0,)"
234+ R"( "droppedPackets":0,)"
235+ R"( "scrambledPackets":0)"
236+ R"( })"
237+ R"( })" ,
238+ MockJsonlSink::Stringify (doc));
239+ return true ;
240+ });
241+ }
229242 EXPECT_CALL (*json_sink, HandleDocument).WillOnce ([](const rapidjson::Document& doc) {
230243 EXPECT_EQ (R"( {"type":"chunk","data":{"chunk":{)"
231244 R"( "timestamp":1609426800000,"pos":16384)"
@@ -253,6 +266,18 @@ TEST(ServiceRecorderTest, EventProgress) {
253266 MockJsonlSink::Stringify (doc));
254267 return true ;
255268 });
269+ if (option.packet_stats ) {
270+ EXPECT_CALL (*json_sink, HandleDocument).WillOnce ([](const rapidjson::Document& doc) {
271+ EXPECT_EQ (R"( {"type":"packet-stats","data":{)"
272+ R"( "errorPackets":0,)"
273+ R"( "droppedPackets":0,)"
274+ R"( "scrambledPackets":0)"
275+ R"( })"
276+ R"( })" ,
277+ MockJsonlSink::Stringify (doc));
278+ return true ;
279+ });
280+ }
256281 EXPECT_CALL (*json_sink, HandleDocument).WillOnce ([](const rapidjson::Document& doc) {
257282 EXPECT_EQ (R"( {"type":"chunk","data":{"chunk":{)"
258283 R"( "timestamp":1609426800000,"pos":0)"
@@ -267,16 +292,16 @@ TEST(ServiceRecorderTest, EventProgress) {
267292 EXPECT_CALL (*ring_sink, End).WillOnce (testing::Return ());
268293 }
269294
270- auto recorder = std::make_unique<ServiceRecorder>(kOption );
295+ auto recorder = std::make_unique<ServiceRecorder>(option );
271296 recorder->ServiceRecorder ::Connect (std::move (ring_sink));
272297 recorder->JsonlSource ::Connect (std::move (json_sink));
273298 src.Connect (std::move (recorder));
274299 EXPECT_EQ (EXIT_SUCCESS, src.FeedPackets ());
275300 EXPECT_TRUE (src.IsEmpty ());
276301}
277302
278- TEST (ServiceRecorderTest, EventEnd) {
279- ServiceRecorderOption option = kOption ;
303+ TEST_P (ServiceRecorderTest, EventEnd) {
304+ ServiceRecorderOption option = GetParam () ;
280305
281306 TableSource src;
282307 auto file = std::make_unique<MockFile>();
@@ -353,6 +378,18 @@ TEST(ServiceRecorderTest, EventEnd) {
353378 MockJsonlSink::Stringify (doc));
354379 return true ;
355380 });
381+ if (option.packet_stats ) {
382+ EXPECT_CALL (*json_sink, HandleDocument).WillOnce ([](const rapidjson::Document& doc) {
383+ EXPECT_EQ (R"( {"type":"packet-stats","data":{)"
384+ R"( "errorPackets":0,)"
385+ R"( "droppedPackets":1,)"
386+ R"( "scrambledPackets":0)"
387+ R"( })"
388+ R"( })" ,
389+ MockJsonlSink::Stringify (doc));
390+ return true ;
391+ });
392+ }
356393 EXPECT_CALL (*json_sink, HandleDocument).WillOnce ([](const rapidjson::Document& doc) {
357394 EXPECT_EQ (R"( {"type":"event-end","data":{)"
358395 R"( "originalNetworkId":1,)"
@@ -406,13 +443,13 @@ TEST(ServiceRecorderTest, EventEnd) {
406443
407444 auto ring =
408445 std::make_unique<RingFileSink>(std::move (file), option.chunk_size , option.num_chunks );
409- auto recorder = std::make_unique<ServiceRecorder>(kOption );
446+ auto recorder = std::make_unique<ServiceRecorder>(option );
410447 recorder->ServiceRecorder ::Connect (std::move (ring));
411448 recorder->JsonlSource ::Connect (std::move (json_sink));
412449 src.Connect (std::move (recorder));
413450 EXPECT_EQ (EXIT_SUCCESS, src.FeedPackets ());
414451 EXPECT_TRUE (src.IsEmpty ());
415- }
452+ };
416453
417454TEST (ServiceRecorderTest, EventStartBeforeEventEnd) {
418455 ServiceRecorderOption option = kOption ;
@@ -791,3 +828,7 @@ TEST(ServiceRecorderTest, UnspecifiedEventEnd) {
791828 EXPECT_EQ (EXIT_SUCCESS, src.FeedPackets ());
792829 EXPECT_TRUE (src.IsEmpty ());
793830}
831+
832+ INSTANTIATE_TEST_SUITE_P (EventTestWithPacketStats, ServiceRecorderTest,
833+ testing::Values (ServiceRecorderOption{" /dev/null" , 3 , kChunkSize , kNumChunks , 0 , false },
834+ ServiceRecorderOption{" /dev/null" , 3 , kChunkSize , kNumChunks , 0 , true }));
0 commit comments