Index: webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports_unittest.cc |
index e329213ba6842959cb59a76b4c65af842dcbedc7..65f8b725528b7cdd2436a565419d7789b0170f4d 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports_unittest.cc |
@@ -12,253 +12,339 @@ |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
-#include "webrtc/test/rtcp_packet_parser.h" |
+#include "webrtc/base/random.h" |
+using testing::ElementsAre; |
+using testing::ElementsAreArray; |
+using testing::IsEmpty; |
+using testing::make_tuple; |
using webrtc::rtcp::Dlrr; |
using webrtc::rtcp::ExtendedReports; |
using webrtc::rtcp::RawPacket; |
+using webrtc::rtcp::ReceiveTimeInfo; |
using webrtc::rtcp::Rrtr; |
using webrtc::rtcp::VoipMetric; |
-using webrtc::test::RtcpPacketParser; |
+using webrtc::RTCPUtility::RtcpCommonHeader; |
+using webrtc::RTCPUtility::RtcpParseCommonHeader; |
namespace webrtc { |
+// Define comparision operators that shouldn't be needed in production, |
+// but make testing matches more clear. |
+bool operator==(const RTCPVoIPMetric& metric1, const RTCPVoIPMetric& metric2) { |
+ return metric1.lossRate == metric2.lossRate && |
+ metric1.discardRate == metric2.discardRate && |
+ metric1.burstDensity == metric2.burstDensity && |
+ metric1.gapDensity == metric2.gapDensity && |
+ metric1.burstDuration == metric2.burstDuration && |
+ metric1.gapDuration == metric2.gapDuration && |
+ metric1.roundTripDelay == metric2.roundTripDelay && |
+ metric1.endSystemDelay == metric2.endSystemDelay && |
+ metric1.signalLevel == metric2.signalLevel && |
+ metric1.noiseLevel == metric2.noiseLevel && |
+ metric1.RERL == metric2.RERL && |
+ metric1.Gmin == metric2.Gmin && |
+ metric1.Rfactor == metric2.Rfactor && |
+ metric1.extRfactor == metric2.extRfactor && |
+ metric1.MOSLQ == metric2.MOSLQ && |
+ metric1.MOSCQ == metric2.MOSCQ && |
+ metric1.RXconfig == metric2.RXconfig && |
+ metric1.JBnominal == metric2.JBnominal && |
+ metric1.JBmax == metric2.JBmax && |
+ metric1.JBabsMax == metric2.JBabsMax; |
+} |
+ |
namespace rtcp { |
-const uint32_t kSenderSsrc = 0x12345678; |
-const uint32_t kRemoteSsrc = 0x23456789; |
+bool operator==(const Rrtr& rrtr1, const Rrtr& rrtr2) { |
+ return rrtr1.ntp() == rrtr2.ntp(); |
+} |
+ |
+bool operator==(const ReceiveTimeInfo& time1, const ReceiveTimeInfo& time2) { |
+ return time1.ssrc == time2.ssrc && |
+ time1.last_rr == time2.last_rr && |
+ time1.delay_since_last_rr == time2.delay_since_last_rr; |
+} |
+ |
+bool operator==(const Dlrr& dlrr1, const Dlrr& dlrr2) { |
+ return dlrr1.sub_blocks() == dlrr2.sub_blocks(); |
+} |
+ |
+bool operator==(const VoipMetric& metric1, const VoipMetric& metric2) { |
+ return metric1.ssrc() == metric2.ssrc() && |
+ metric1.voip_metric() == metric2.voip_metric(); |
+} |
+} // namespace rtcp |
+ |
+class RtcpPacketExtendedReportsTest : public ::testing::Test { |
+ public: |
+ const uint32_t kSenderSsrc = 0x12345678; |
+ const uint8_t kEmptyPacket[8] = {0x80, 207, 0x00, 0x01, |
+ 0x12, 0x34, 0x56, 0x78}; |
+ |
+ RtcpPacketExtendedReportsTest() : random_(0x123456789) {} |
-TEST(RtcpPacketExtendedReportsTest, WithNoReportBlocks) { |
+ protected: |
+ static bool Parse(const uint8_t* buffer, |
+ size_t length, |
+ ExtendedReports* packet) { |
+ RtcpCommonHeader header; |
+ EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header)); |
+ EXPECT_EQ(length, header.BlockSize()); |
+ return packet->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes); |
+ } |
+ static bool Parse(const RawPacket& buffer, ExtendedReports* packet) { |
+ return Parse(buffer.Buffer(), buffer.Length(), packet); |
+ } |
+ |
+ template <typename T> |
+ T Rand() { |
+ return random_.Rand<T>(); |
+ } |
+ |
+ private: |
+ Random random_; |
+}; |
+ |
+template <> |
+ReceiveTimeInfo RtcpPacketExtendedReportsTest::Rand<ReceiveTimeInfo>() { |
+ uint32_t ssrc = Rand<uint32_t>(); |
+ uint32_t last_rr = Rand<uint32_t>(); |
+ uint32_t delay_since_last_rr = Rand<uint32_t>(); |
+ return ReceiveTimeInfo(ssrc, last_rr, delay_since_last_rr); |
+} |
+ |
+template <> |
+NtpTime RtcpPacketExtendedReportsTest::Rand<NtpTime>() { |
+ uint32_t secs = Rand<uint32_t>(); |
+ uint32_t frac = Rand<uint32_t>(); |
+ return NtpTime(secs, frac); |
+} |
+ |
+template <> |
+Rrtr RtcpPacketExtendedReportsTest::Rand<Rrtr>() { |
+ Rrtr rrtr; |
+ rrtr.WithNtp(Rand<NtpTime>()); |
+ return rrtr; |
+} |
+ |
+template <> |
+RTCPVoIPMetric RtcpPacketExtendedReportsTest::Rand<RTCPVoIPMetric>() { |
+ RTCPVoIPMetric metric; |
+ metric.lossRate = Rand<uint8_t>(); |
+ metric.discardRate = Rand<uint8_t>(); |
+ metric.burstDensity = Rand<uint8_t>(); |
+ metric.gapDensity = Rand<uint8_t>(); |
+ metric.burstDuration = Rand<uint16_t>(); |
+ metric.gapDuration = Rand<uint16_t>(); |
+ metric.roundTripDelay = Rand<uint16_t>(); |
+ metric.endSystemDelay = Rand<uint16_t>(); |
+ metric.signalLevel = Rand<uint8_t>(); |
+ metric.noiseLevel = Rand<uint8_t>(); |
+ metric.RERL = Rand<uint8_t>(); |
+ metric.Gmin = Rand<uint8_t>(); |
+ metric.Rfactor = Rand<uint8_t>(); |
+ metric.extRfactor = Rand<uint8_t>(); |
+ metric.MOSLQ = Rand<uint8_t>(); |
+ metric.MOSCQ = Rand<uint8_t>(); |
+ metric.RXconfig = Rand<uint8_t>(); |
+ metric.JBnominal = Rand<uint16_t>(); |
+ metric.JBmax = Rand<uint16_t>(); |
+ metric.JBabsMax = Rand<uint16_t>(); |
+ return metric; |
+} |
+ |
+template <> |
+VoipMetric RtcpPacketExtendedReportsTest::Rand<VoipMetric>() { |
+ VoipMetric voip_metric; |
+ voip_metric.To(Rand<uint32_t>()); |
+ voip_metric.WithVoipMetric(Rand<RTCPVoIPMetric>()); |
+ return voip_metric; |
+} |
+ |
+TEST_F(RtcpPacketExtendedReportsTest, CreateWithoutReportBlocks) { |
ExtendedReports xr; |
xr.From(kSenderSsrc); |
- rtc::scoped_ptr<RawPacket> packet(xr.Build()); |
- RtcpPacketParser parser; |
- parser.Parse(packet->Buffer(), packet->Length()); |
- EXPECT_EQ(1, parser.xr_header()->num_packets()); |
- EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); |
+ rtc::scoped_ptr<RawPacket> packet = xr.Build(); |
+ |
+ EXPECT_THAT(make_tuple(packet->Buffer(), packet->Length()), |
+ ElementsAreArray(kEmptyPacket)); |
} |
-TEST(RtcpPacketExtendedReportsTest, WithRrtr) { |
- Rrtr rrtr; |
- rrtr.WithNtp(NtpTime(0x11111111, 0x22222222)); |
+TEST_F(RtcpPacketExtendedReportsTest, ParseWithoutReportBlocks) { |
+ ExtendedReports parsed; |
+ EXPECT_TRUE(Parse(kEmptyPacket, sizeof(kEmptyPacket), &parsed)); |
+ EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
+ EXPECT_THAT(parsed.rrtrs(), IsEmpty()); |
+ EXPECT_THAT(parsed.dlrrs(), IsEmpty()); |
+ EXPECT_THAT(parsed.voip_metrics(), IsEmpty()); |
+} |
+ |
+TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithRrtr) { |
åsapersson
2016/01/29 12:46:09
maybe CreateAndParseWithOneRrtrBlock
danilchap
2016/01/29 13:49:31
Done.
|
+ Rrtr rrtr = Rand<Rrtr>(); |
ExtendedReports xr; |
xr.From(kSenderSsrc); |
- EXPECT_TRUE(xr.WithRrtr(&rrtr)); |
- |
- rtc::scoped_ptr<RawPacket> packet(xr.Build()); |
- RtcpPacketParser parser; |
- parser.Parse(packet->Buffer(), packet->Length()); |
- EXPECT_EQ(1, parser.xr_header()->num_packets()); |
- EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); |
- EXPECT_EQ(1, parser.rrtr()->num_packets()); |
- EXPECT_EQ(0x11111111U, parser.rrtr()->NtpSec()); |
- EXPECT_EQ(0x22222222U, parser.rrtr()->NtpFrac()); |
+ EXPECT_TRUE(xr.WithRrtr(rrtr)); |
+ rtc::scoped_ptr<RawPacket> packet = xr.Build(); |
+ |
+ ExtendedReports mparsed; |
+ EXPECT_TRUE(Parse(*packet, &mparsed)); |
+ const ExtendedReports& parsed = mparsed; |
+ |
+ EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
+ EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); |
} |
-TEST(RtcpPacketExtendedReportsTest, WithTwoRrtrBlocks) { |
- Rrtr rrtr1; |
- rrtr1.WithNtp(NtpTime(0x11111111, 0x22222222)); |
- Rrtr rrtr2; |
- rrtr2.WithNtp(NtpTime(0x33333333, 0x44444444)); |
+TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoRrtrBlocks) { |
+ Rrtr rrtr1 = Rand<Rrtr>(); |
+ Rrtr rrtr2 = Rand<Rrtr>(); |
ExtendedReports xr; |
xr.From(kSenderSsrc); |
- EXPECT_TRUE(xr.WithRrtr(&rrtr1)); |
- EXPECT_TRUE(xr.WithRrtr(&rrtr2)); |
- |
- rtc::scoped_ptr<RawPacket> packet(xr.Build()); |
- RtcpPacketParser parser; |
- parser.Parse(packet->Buffer(), packet->Length()); |
- EXPECT_EQ(1, parser.xr_header()->num_packets()); |
- EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); |
- EXPECT_EQ(2, parser.rrtr()->num_packets()); |
- EXPECT_EQ(0x33333333U, parser.rrtr()->NtpSec()); |
- EXPECT_EQ(0x44444444U, parser.rrtr()->NtpFrac()); |
+ EXPECT_TRUE(xr.WithRrtr(rrtr1)); |
+ EXPECT_TRUE(xr.WithRrtr(rrtr2)); |
+ |
+ rtc::scoped_ptr<RawPacket> packet = xr.Build(); |
+ |
+ ExtendedReports mparsed; |
+ EXPECT_TRUE(Parse(*packet, &mparsed)); |
+ const ExtendedReports& parsed = mparsed; |
+ |
+ EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
+ EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr1, rrtr2)); |
} |
-TEST(RtcpPacketExtendedReportsTest, WithDlrrWithOneSubBlock) { |
+TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithOneSubBlock) { |
Dlrr dlrr; |
- EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); |
+ EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
ExtendedReports xr; |
xr.From(kSenderSsrc); |
- EXPECT_TRUE(xr.WithDlrr(&dlrr)); |
- |
- rtc::scoped_ptr<RawPacket> packet(xr.Build()); |
- RtcpPacketParser parser; |
- parser.Parse(packet->Buffer(), packet->Length()); |
- EXPECT_EQ(1, parser.xr_header()->num_packets()); |
- EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); |
- EXPECT_EQ(1, parser.dlrr()->num_packets()); |
- EXPECT_EQ(1, parser.dlrr_items()->num_packets()); |
- EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); |
- EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); |
- EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); |
+ EXPECT_TRUE(xr.WithDlrr(dlrr)); |
+ |
+ rtc::scoped_ptr<RawPacket> packet = xr.Build(); |
+ |
+ ExtendedReports mparsed; |
+ EXPECT_TRUE(Parse(*packet, &mparsed)); |
+ const ExtendedReports& parsed = mparsed; |
+ |
+ EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
+ EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); |
} |
-TEST(RtcpPacketExtendedReportsTest, WithDlrrWithTwoSubBlocks) { |
+TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithDlrrWithTwoSubBlocks) { |
Dlrr dlrr; |
- EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); |
- EXPECT_TRUE(dlrr.WithDlrrItem(0x44444444, 0x55555555, 0x66666666)); |
+ EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
+ EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
ExtendedReports xr; |
xr.From(kSenderSsrc); |
- EXPECT_TRUE(xr.WithDlrr(&dlrr)); |
- |
- rtc::scoped_ptr<RawPacket> packet(xr.Build()); |
- RtcpPacketParser parser; |
- parser.Parse(packet->Buffer(), packet->Length()); |
- EXPECT_EQ(1, parser.xr_header()->num_packets()); |
- EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); |
- EXPECT_EQ(1, parser.dlrr()->num_packets()); |
- EXPECT_EQ(2, parser.dlrr_items()->num_packets()); |
- EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); |
- EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); |
- EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); |
- EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); |
- EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); |
- EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); |
+ EXPECT_TRUE(xr.WithDlrr(dlrr)); |
+ |
+ rtc::scoped_ptr<RawPacket> packet = xr.Build(); |
+ |
+ ExtendedReports mparsed; |
+ EXPECT_TRUE(Parse(*packet, &mparsed)); |
+ const ExtendedReports& parsed = mparsed; |
+ |
+ EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
+ EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); |
} |
-TEST(RtcpPacketExtendedReportsTest, WithTwoDlrrBlocks) { |
+TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithTwoDlrrBlocks) { |
Dlrr dlrr1; |
- EXPECT_TRUE(dlrr1.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); |
+ EXPECT_TRUE(dlrr1.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
Dlrr dlrr2; |
- EXPECT_TRUE(dlrr2.WithDlrrItem(0x44444444, 0x55555555, 0x66666666)); |
+ EXPECT_TRUE(dlrr2.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
ExtendedReports xr; |
xr.From(kSenderSsrc); |
- EXPECT_TRUE(xr.WithDlrr(&dlrr1)); |
- EXPECT_TRUE(xr.WithDlrr(&dlrr2)); |
- |
- rtc::scoped_ptr<RawPacket> packet(xr.Build()); |
- RtcpPacketParser parser; |
- parser.Parse(packet->Buffer(), packet->Length()); |
- EXPECT_EQ(1, parser.xr_header()->num_packets()); |
- EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); |
- EXPECT_EQ(2, parser.dlrr()->num_packets()); |
- EXPECT_EQ(2, parser.dlrr_items()->num_packets()); |
- EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); |
- EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); |
- EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); |
- EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); |
- EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); |
- EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); |
+ EXPECT_TRUE(xr.WithDlrr(dlrr1)); |
+ EXPECT_TRUE(xr.WithDlrr(dlrr2)); |
+ |
+ rtc::scoped_ptr<RawPacket> packet = xr.Build(); |
+ |
+ ExtendedReports mparsed; |
+ EXPECT_TRUE(Parse(*packet, &mparsed)); |
+ const ExtendedReports& parsed = mparsed; |
+ |
+ EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
+ EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr1, dlrr2)); |
} |
-TEST(RtcpPacketExtendedReportsTest, WithVoipMetric) { |
- RTCPVoIPMetric metric; |
- metric.lossRate = 1; |
- metric.discardRate = 2; |
- metric.burstDensity = 3; |
- metric.gapDensity = 4; |
- metric.burstDuration = 0x1111; |
- metric.gapDuration = 0x2222; |
- metric.roundTripDelay = 0x3333; |
- metric.endSystemDelay = 0x4444; |
- metric.signalLevel = 5; |
- metric.noiseLevel = 6; |
- metric.RERL = 7; |
- metric.Gmin = 8; |
- metric.Rfactor = 9; |
- metric.extRfactor = 10; |
- metric.MOSLQ = 11; |
- metric.MOSCQ = 12; |
- metric.RXconfig = 13; |
- metric.JBnominal = 0x5555; |
- metric.JBmax = 0x6666; |
- metric.JBabsMax = 0x7777; |
- VoipMetric metric_block; |
- metric_block.To(kRemoteSsrc); |
- metric_block.WithVoipMetric(metric); |
+TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithVoipMetric) { |
+ VoipMetric voip_metric = Rand<VoipMetric>(); |
+ |
ExtendedReports xr; |
xr.From(kSenderSsrc); |
- EXPECT_TRUE(xr.WithVoipMetric(&metric_block)); |
- |
- rtc::scoped_ptr<RawPacket> packet(xr.Build()); |
- RtcpPacketParser parser; |
- parser.Parse(packet->Buffer(), packet->Length()); |
- EXPECT_EQ(1, parser.xr_header()->num_packets()); |
- EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); |
- EXPECT_EQ(1, parser.voip_metric()->num_packets()); |
- EXPECT_EQ(kRemoteSsrc, parser.voip_metric()->Ssrc()); |
- EXPECT_EQ(1, parser.voip_metric()->LossRate()); |
- EXPECT_EQ(2, parser.voip_metric()->DiscardRate()); |
- EXPECT_EQ(3, parser.voip_metric()->BurstDensity()); |
- EXPECT_EQ(4, parser.voip_metric()->GapDensity()); |
- EXPECT_EQ(0x1111, parser.voip_metric()->BurstDuration()); |
- EXPECT_EQ(0x2222, parser.voip_metric()->GapDuration()); |
- EXPECT_EQ(0x3333, parser.voip_metric()->RoundTripDelay()); |
- EXPECT_EQ(0x4444, parser.voip_metric()->EndSystemDelay()); |
- EXPECT_EQ(5, parser.voip_metric()->SignalLevel()); |
- EXPECT_EQ(6, parser.voip_metric()->NoiseLevel()); |
- EXPECT_EQ(7, parser.voip_metric()->Rerl()); |
- EXPECT_EQ(8, parser.voip_metric()->Gmin()); |
- EXPECT_EQ(9, parser.voip_metric()->Rfactor()); |
- EXPECT_EQ(10, parser.voip_metric()->ExtRfactor()); |
- EXPECT_EQ(11, parser.voip_metric()->MosLq()); |
- EXPECT_EQ(12, parser.voip_metric()->MosCq()); |
- EXPECT_EQ(13, parser.voip_metric()->RxConfig()); |
- EXPECT_EQ(0x5555, parser.voip_metric()->JbNominal()); |
- EXPECT_EQ(0x6666, parser.voip_metric()->JbMax()); |
- EXPECT_EQ(0x7777, parser.voip_metric()->JbAbsMax()); |
+ EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); |
+ |
+ rtc::scoped_ptr<RawPacket> packet = xr.Build(); |
+ |
+ ExtendedReports mparsed; |
+ EXPECT_TRUE(Parse(*packet, &mparsed)); |
+ const ExtendedReports& parsed = mparsed; |
+ |
+ EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
+ EXPECT_THAT(parsed.voip_metrics(), ElementsAre(voip_metric)); |
} |
-TEST(RtcpPacketExtendedReportsTest, WithMultipleReportBlocks) { |
- Rrtr rrtr; |
+TEST_F(RtcpPacketExtendedReportsTest, CreateAndParseWithMultipleReportBlocks) { |
+ Rrtr rrtr = Rand<Rrtr>(); |
Dlrr dlrr; |
- EXPECT_TRUE(dlrr.WithDlrrItem(1, 2, 3)); |
- VoipMetric metric; |
+ EXPECT_TRUE(dlrr.WithDlrrItem(Rand<ReceiveTimeInfo>())); |
+ VoipMetric metric = Rand<VoipMetric>(); |
ExtendedReports xr; |
xr.From(kSenderSsrc); |
- EXPECT_TRUE(xr.WithRrtr(&rrtr)); |
- EXPECT_TRUE(xr.WithDlrr(&dlrr)); |
- EXPECT_TRUE(xr.WithVoipMetric(&metric)); |
- |
- rtc::scoped_ptr<RawPacket> packet(xr.Build()); |
- RtcpPacketParser parser; |
- parser.Parse(packet->Buffer(), packet->Length()); |
- EXPECT_EQ(1, parser.xr_header()->num_packets()); |
- EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); |
- EXPECT_EQ(1, parser.rrtr()->num_packets()); |
- EXPECT_EQ(1, parser.dlrr()->num_packets()); |
- EXPECT_EQ(1, parser.dlrr_items()->num_packets()); |
- EXPECT_EQ(1, parser.voip_metric()->num_packets()); |
+ EXPECT_TRUE(xr.WithRrtr(rrtr)); |
+ EXPECT_TRUE(xr.WithDlrr(dlrr)); |
+ EXPECT_TRUE(xr.WithVoipMetric(metric)); |
+ |
+ rtc::scoped_ptr<RawPacket> packet = xr.Build(); |
+ |
+ ExtendedReports mparsed; |
+ EXPECT_TRUE(Parse(*packet, &mparsed)); |
+ const ExtendedReports& parsed = mparsed; |
+ |
+ EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); |
+ EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); |
+ EXPECT_THAT(parsed.dlrrs(), ElementsAre(dlrr)); |
+ EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); |
} |
-TEST(RtcpPacketExtendedReportsTest, DlrrWithoutItemNotIncludedInPacket) { |
- Rrtr rrtr; |
+TEST_F(RtcpPacketExtendedReportsTest, DlrrWithoutItemNotIncludedInPacket) { |
+ Rrtr rrtr = Rand<Rrtr>(); |
Dlrr dlrr; |
- VoipMetric metric; |
+ VoipMetric metric = Rand<VoipMetric>(); |
ExtendedReports xr; |
xr.From(kSenderSsrc); |
- EXPECT_TRUE(xr.WithRrtr(&rrtr)); |
- EXPECT_TRUE(xr.WithDlrr(&dlrr)); |
- EXPECT_TRUE(xr.WithVoipMetric(&metric)); |
- |
- rtc::scoped_ptr<RawPacket> packet(xr.Build()); |
- RtcpPacketParser parser; |
- parser.Parse(packet->Buffer(), packet->Length()); |
- EXPECT_EQ(1, parser.xr_header()->num_packets()); |
- EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); |
- EXPECT_EQ(1, parser.rrtr()->num_packets()); |
- EXPECT_EQ(0, parser.dlrr()->num_packets()); |
- EXPECT_EQ(1, parser.voip_metric()->num_packets()); |
+ EXPECT_TRUE(xr.WithRrtr(rrtr)); |
+ EXPECT_TRUE(xr.WithDlrr(dlrr)); |
+ EXPECT_TRUE(xr.WithVoipMetric(metric)); |
+ |
+ rtc::scoped_ptr<RawPacket> packet = xr.Build(); |
+ |
+ ExtendedReports mparsed; |
+ EXPECT_TRUE(Parse(*packet, &mparsed)); |
+ const ExtendedReports& parsed = mparsed; |
+ |
+ EXPECT_THAT(parsed.rrtrs(), ElementsAre(rrtr)); |
+ EXPECT_THAT(parsed.dlrrs(), IsEmpty()); |
+ EXPECT_THAT(parsed.voip_metrics(), ElementsAre(metric)); |
} |
-TEST(RtcpPacketExtendedReportsTest, WithTooManyBlocks) { |
- const int kMaxBlocks = 50; |
+TEST_F(RtcpPacketExtendedReportsTest, WithTooManyBlocks) { |
+ const size_t kMaxBlocks = 50; |
ExtendedReports xr; |
- Rrtr rrtr; |
- for (int i = 0; i < kMaxBlocks; ++i) |
- EXPECT_TRUE(xr.WithRrtr(&rrtr)); |
- EXPECT_FALSE(xr.WithRrtr(&rrtr)); |
+ Rrtr rrtr = Rand<Rrtr>(); |
+ for (size_t i = 0; i < kMaxBlocks; ++i) |
+ EXPECT_TRUE(xr.WithRrtr(rrtr)); |
+ EXPECT_FALSE(xr.WithRrtr(rrtr)); |
Dlrr dlrr; |
- for (int i = 0; i < kMaxBlocks; ++i) |
- EXPECT_TRUE(xr.WithDlrr(&dlrr)); |
- EXPECT_FALSE(xr.WithDlrr(&dlrr)); |
+ for (size_t i = 0; i < kMaxBlocks; ++i) |
+ EXPECT_TRUE(xr.WithDlrr(dlrr)); |
+ EXPECT_FALSE(xr.WithDlrr(dlrr)); |
- VoipMetric voip_metric; |
- for (int i = 0; i < kMaxBlocks; ++i) |
- EXPECT_TRUE(xr.WithVoipMetric(&voip_metric)); |
- EXPECT_FALSE(xr.WithVoipMetric(&voip_metric)); |
+ VoipMetric voip_metric = Rand<VoipMetric>(); |
+ for (size_t i = 0; i < kMaxBlocks; ++i) |
+ EXPECT_TRUE(xr.WithVoipMetric(voip_metric)); |
+ EXPECT_FALSE(xr.WithVoipMetric(voip_metric)); |
} |
-} // namespace rtcp |
} // namespace webrtc |