Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Side by Side Diff: webrtc/logging/rtc_event_log/rtc_event_log_unittest.cc

Issue 2353543003: Added logging for audio send/receive stream configs. (Closed)
Patch Set: Another rebase. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 config->rtp.rtx.payload_type = prng->Rand(0, 127); 193 config->rtp.rtx.payload_type = prng->Rand(0, 127);
194 // Add header extensions. 194 // Add header extensions.
195 for (unsigned i = 0; i < kNumExtensions; i++) { 195 for (unsigned i = 0; i < kNumExtensions; i++) {
196 if (extensions_bitvector & (1u << i)) { 196 if (extensions_bitvector & (1u << i)) {
197 config->rtp.extensions.push_back( 197 config->rtp.extensions.push_back(
198 RtpExtension(kExtensionNames[i], prng->Rand<int>())); 198 RtpExtension(kExtensionNames[i], prng->Rand<int>()));
199 } 199 }
200 } 200 }
201 } 201 }
202 202
203 void GenerateAudioReceiveConfig(uint32_t extensions_bitvector,
204 AudioReceiveStream::Config* config,
205 Random* prng) {
206 // Add SSRCs for the stream.
207 config->rtp.remote_ssrc = prng->Rand<uint32_t>();
208 config->rtp.local_ssrc = prng->Rand<uint32_t>();
209 // Add header extensions.
210 for (unsigned i = 0; i < kNumExtensions; i++) {
211 if (extensions_bitvector & (1u << i)) {
212 config->rtp.extensions.push_back(
213 RtpExtension(kExtensionNames[i], prng->Rand<int>()));
214 }
215 }
216 }
217
218 void GenerateAudioSendConfig(uint32_t extensions_bitvector,
219 AudioSendStream::Config* config,
220 Random* prng) {
221 // Add SSRC to the stream.
222 config->rtp.ssrc = prng->Rand<uint32_t>();
223 // Add header extensions.
224 for (unsigned i = 0; i < kNumExtensions; i++) {
225 if (extensions_bitvector & (1u << i)) {
226 config->rtp.extensions.push_back(
227 RtpExtension(kExtensionNames[i], prng->Rand<int>()));
228 }
229 }
230 }
231
203 // Test for the RtcEventLog class. Dumps some RTP packets and other events 232 // Test for the RtcEventLog class. Dumps some RTP packets and other events
204 // to disk, then reads them back to see if they match. 233 // to disk, then reads them back to see if they match.
205 void LogSessionAndReadBack(size_t rtp_count, 234 void LogSessionAndReadBack(size_t rtp_count,
206 size_t rtcp_count, 235 size_t rtcp_count,
207 size_t playout_count, 236 size_t playout_count,
208 size_t bwe_loss_count, 237 size_t bwe_loss_count,
209 uint32_t extensions_bitvector, 238 uint32_t extensions_bitvector,
210 uint32_t csrcs_count, 239 uint32_t csrcs_count,
211 unsigned int random_seed) { 240 unsigned int random_seed) {
212 ASSERT_LE(rtcp_count, rtp_count); 241 ASSERT_LE(rtcp_count, rtp_count);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 const size_t event_count = config_count + playout_count + bwe_loss_count + 346 const size_t event_count = config_count + playout_count + bwe_loss_count +
318 rtcp_count + rtp_count + 2; 347 rtcp_count + rtp_count + 2;
319 EXPECT_GE(1000u, event_count); // The events must fit in the message queue. 348 EXPECT_GE(1000u, event_count); // The events must fit in the message queue.
320 EXPECT_EQ(event_count, parsed_log.GetNumberOfEvents()); 349 EXPECT_EQ(event_count, parsed_log.GetNumberOfEvents());
321 if (event_count != parsed_log.GetNumberOfEvents()) { 350 if (event_count != parsed_log.GetNumberOfEvents()) {
322 // Print the expected and actual event types for easier debugging. 351 // Print the expected and actual event types for easier debugging.
323 PrintActualEvents(parsed_log); 352 PrintActualEvents(parsed_log);
324 PrintExpectedEvents(rtp_count, rtcp_count, playout_count, bwe_loss_count); 353 PrintExpectedEvents(rtp_count, rtcp_count, playout_count, bwe_loss_count);
325 } 354 }
326 RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0); 355 RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0);
327 RtcEventLogTestHelper::VerifyReceiveStreamConfig(parsed_log, 1, 356 RtcEventLogTestHelper::VerifyVideoReceiveStreamConfig(parsed_log, 1,
328 receiver_config); 357 receiver_config);
329 RtcEventLogTestHelper::VerifySendStreamConfig(parsed_log, 2, sender_config); 358 RtcEventLogTestHelper::VerifyVideoSendStreamConfig(parsed_log, 2,
359 sender_config);
330 size_t event_index = config_count + 1; 360 size_t event_index = config_count + 1;
331 size_t rtcp_index = 1; 361 size_t rtcp_index = 1;
332 size_t playout_index = 1; 362 size_t playout_index = 1;
333 size_t bwe_loss_index = 1; 363 size_t bwe_loss_index = 1;
334 for (size_t i = 1; i <= rtp_count; i++) { 364 for (size_t i = 1; i <= rtp_count; i++) {
335 RtcEventLogTestHelper::VerifyRtpEvent( 365 RtcEventLogTestHelper::VerifyRtpEvent(
336 parsed_log, event_index, 366 parsed_log, event_index,
337 (i % 2 == 0) ? kIncomingPacket : kOutgoingPacket, 367 (i % 2 == 0) ? kIncomingPacket : kOutgoingPacket,
338 (i % 3 == 0) ? MediaType::AUDIO : MediaType::VIDEO, 368 (i % 3 == 0) ? MediaType::AUDIO : MediaType::VIDEO,
339 rtp_packets[i - 1].data(), rtp_packets[i - 1].headers_size(), 369 rtp_packets[i - 1].data(), rtp_packets[i - 1].headers_size(),
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 RtcEventLogTestHelper::VerifyRtcpEvent(parsed_log, 2, kOutgoingPacket, 480 RtcEventLogTestHelper::VerifyRtcpEvent(parsed_log, 2, kOutgoingPacket,
451 MediaType::VIDEO, rtcp_packet.data(), 481 MediaType::VIDEO, rtcp_packet.data(),
452 rtcp_packet.size()); 482 rtcp_packet.size());
453 483
454 RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 3); 484 RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 3);
455 485
456 // Clean up temporary file - can be pretty slow. 486 // Clean up temporary file - can be pretty slow.
457 remove(temp_filename.c_str()); 487 remove(temp_filename.c_str());
458 } 488 }
459 489
490 class ConfigReadWriteTest {
491 public:
492 ConfigReadWriteTest() : prng(987654321) {}
493 virtual ~ConfigReadWriteTest() {}
494 virtual void GenerateConfig(uint32_t extensions_bitvector) = 0;
495 virtual void VerifyConfig(const ParsedRtcEventLog& parsed_log,
496 size_t index) = 0;
497 virtual void LogConfig(RtcEventLog* event_log) = 0;
498
499 void DoTest() {
500 // Find the name of the current test, in order to use it as a temporary
501 // filename.
502 auto test_info = ::testing::UnitTest::GetInstance()->current_test_info();
503 const std::string temp_filename =
504 test::OutputPath() + test_info->test_case_name() + test_info->name();
505
506 // Use all extensions.
507 uint32_t extensions_bitvector = (1u << kNumExtensions) - 1;
508 GenerateConfig(extensions_bitvector);
509
510 // Log a single config event and stop logging.
511 SimulatedClock fake_clock(prng.Rand<uint32_t>());
512 std::unique_ptr<RtcEventLog> log_dumper(RtcEventLog::Create(&fake_clock));
513
514 log_dumper->StartLogging(temp_filename, 10000000);
515 LogConfig(log_dumper.get());
516 log_dumper->StopLogging();
517
518 // Read the generated file from disk.
519 ParsedRtcEventLog parsed_log;
520 ASSERT_TRUE(parsed_log.ParseFile(temp_filename));
521
522 // Check the generated number of events.
523 EXPECT_EQ(3u, parsed_log.GetNumberOfEvents());
524
525 RtcEventLogTestHelper::VerifyLogStartEvent(parsed_log, 0);
526
527 // Verify that the parsed config struct matches the one that was logged.
528 VerifyConfig(parsed_log, 1);
529
530 RtcEventLogTestHelper::VerifyLogEndEvent(parsed_log, 2);
531
532 // Clean up temporary file - can be pretty slow.
533 remove(temp_filename.c_str());
534 }
535 Random prng;
536 };
537
538 class AudioReceiveConfigReadWriteTest : public ConfigReadWriteTest {
539 public:
540 void GenerateConfig(uint32_t extensions_bitvector) override {
541 GenerateAudioReceiveConfig(extensions_bitvector, &config, &prng);
542 }
543 void LogConfig(RtcEventLog* event_log) override {
544 event_log->LogAudioReceiveStreamConfig(config);
545 }
546 void VerifyConfig(const ParsedRtcEventLog& parsed_log,
547 size_t index) override {
548 RtcEventLogTestHelper::VerifyAudioReceiveStreamConfig(parsed_log, index,
549 config);
550 }
551 AudioReceiveStream::Config config;
552 };
553
554 class AudioSendConfigReadWriteTest : public ConfigReadWriteTest {
555 public:
556 AudioSendConfigReadWriteTest() : config(nullptr) {}
557 void GenerateConfig(uint32_t extensions_bitvector) override {
558 GenerateAudioSendConfig(extensions_bitvector, &config, &prng);
559 }
560 void LogConfig(RtcEventLog* event_log) override {
561 event_log->LogAudioSendStreamConfig(config);
562 }
563 void VerifyConfig(const ParsedRtcEventLog& parsed_log,
564 size_t index) override {
565 RtcEventLogTestHelper::VerifyAudioSendStreamConfig(parsed_log, index,
566 config);
567 }
568 AudioSendStream::Config config;
569 };
570
571 class VideoReceiveConfigReadWriteTest : public ConfigReadWriteTest {
572 public:
573 VideoReceiveConfigReadWriteTest() : config(nullptr) {}
574 void GenerateConfig(uint32_t extensions_bitvector) override {
575 GenerateVideoReceiveConfig(extensions_bitvector, &config, &prng);
576 }
577 void LogConfig(RtcEventLog* event_log) override {
578 event_log->LogVideoReceiveStreamConfig(config);
579 }
580 void VerifyConfig(const ParsedRtcEventLog& parsed_log,
581 size_t index) override {
582 RtcEventLogTestHelper::VerifyVideoReceiveStreamConfig(parsed_log, index,
583 config);
584 }
585 VideoReceiveStream::Config config;
586 };
587
588 class VideoSendConfigReadWriteTest : public ConfigReadWriteTest {
589 public:
590 VideoSendConfigReadWriteTest() : config(nullptr) {}
591 void GenerateConfig(uint32_t extensions_bitvector) override {
592 GenerateVideoSendConfig(extensions_bitvector, &config, &prng);
593 }
594 void LogConfig(RtcEventLog* event_log) override {
595 event_log->LogVideoSendStreamConfig(config);
596 }
597 void VerifyConfig(const ParsedRtcEventLog& parsed_log,
598 size_t index) override {
599 RtcEventLogTestHelper::VerifyVideoSendStreamConfig(parsed_log, index,
600 config);
601 }
602 VideoSendStream::Config config;
603 };
604
605 TEST(RtcEventLogTest, LogAudioReceiveConfig) {
606 AudioReceiveConfigReadWriteTest test;
607 test.DoTest();
608 }
609
610 TEST(RtcEventLogTest, LogAudioSendConfig) {
611 AudioSendConfigReadWriteTest test;
612 test.DoTest();
613 }
614
615 TEST(RtcEventLogTest, LogVideoReceiveConfig) {
616 VideoReceiveConfigReadWriteTest test;
617 test.DoTest();
618 }
619
620 TEST(RtcEventLogTest, LogVideoSendConfig) {
621 VideoSendConfigReadWriteTest test;
622 test.DoTest();
623 }
460 } // namespace webrtc 624 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/logging/rtc_event_log/rtc_event_log_parser.cc ('k') | webrtc/logging/rtc_event_log/rtc_event_log_unittest_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698