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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report_unittest.cc

Issue 1453083002: rtcp::ReceiverReport moved into own file and got Parse function (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 1 month 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
(Empty)
1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
12
13 #include <limits>
åsapersson 2015/12/03 13:56:42 needed?
danilchap 2015/12/03 14:23:16 Done.
14
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
17
18 using webrtc::rtcp::RawPacket;
19 using webrtc::rtcp::ReceiverReport;
20 using webrtc::rtcp::ReportBlock;
21 using webrtc::RTCPUtility::RtcpCommonHeader;
22 using webrtc::RTCPUtility::RtcpParseCommonHeader;
23
24 namespace webrtc {
25 namespace {
26
27 class RtcpPacketReceiverReportTest : public ::testing::Test {
28 protected:
29 void BuildPacket() { packet = rr.Build().Pass(); }
30 void ParsePacket() {
31 RtcpCommonHeader header;
32 EXPECT_TRUE(
33 RtcpParseCommonHeader(packet->Buffer(), packet->Length(), &header));
34 EXPECT_EQ(header.BlockSize(), packet->Length());
35 EXPECT_TRUE(parsed_.Parse(
36 header, packet->Buffer() + RtcpCommonHeader::kHeaderSizeBytes));
37 }
38
39 ReceiverReport rr;
40 rtc::scoped_ptr<RawPacket> packet;
41 const ReceiverReport& parsed() { return parsed_; }
42
43 private:
44 ReceiverReport parsed_;
45 };
46
47 const uint32_t kSenderSsrc = 0x12345678;
48 const uint32_t kRemoteSsrc = 0x23456789;
49 const uint8_t kFractionLost = 55;
50 const uint32_t kCumulativeLost = 0x111213;
51 const uint32_t kExtHighestSeqNum = 0x22232425;
52 const uint32_t kJitter = 0x33343536;
53 const uint32_t kLastSr = 0x44454647;
54 const uint32_t kDelayLastSr = 0x55565758;
55 // Manually created ReciverReport with one ReportBlock matching constants above.
åsapersson 2015/12/03 13:56:41 s/ReciverReport/ReceiverReport
danilchap 2015/12/03 14:23:16 Done.
56 // Having this block allows to test Create and Parse seperately.
åsapersson 2015/12/03 13:56:42 s/seperately/separately
danilchap 2015/12/03 14:23:16 Done.
57 const uint8_t kPacket[] = {0x81, 201, 0x00, 0x07, 0x12, 0x34, 0x56, 0x78,
58 0x23, 0x45, 0x67, 0x89, 55, 0x11, 0x12, 0x13,
59 0x22, 0x23, 0x24, 0x25, 0x33, 0x34, 0x35, 0x36,
60 0x44, 0x45, 0x46, 0x47, 0x55, 0x56, 0x57, 0x58};
61 const size_t kPacketLength = sizeof(kPacket);
åsapersson 2015/12/03 13:56:42 perhaps move the constants above the class
danilchap 2015/12/03 14:23:16 Done.
62
63 TEST_F(RtcpPacketReceiverReportTest, NoBlocks) {
åsapersson 2015/12/03 13:56:41 maybe WithNoReportBlock (and move below Create).
danilchap 2015/12/03 14:23:16 Done. WithNo = Without
64 rr.From(kSenderSsrc);
65
66 BuildPacket();
67 ParsePacket();
68
69 EXPECT_EQ(kSenderSsrc, parsed().sender_ssrc());
70 EXPECT_EQ(0u, parsed().report_blocks().size());
71 }
72
73 TEST_F(RtcpPacketReceiverReportTest, Parse) {
74 RtcpCommonHeader header;
75 RtcpParseCommonHeader(kPacket, kPacketLength, &header);
76 EXPECT_TRUE(rr.Parse(header, kPacket + RtcpCommonHeader::kHeaderSizeBytes));
77 const ReceiverReport& parsed = rr;
78
79 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
80 EXPECT_EQ(1u, parsed.report_blocks().size());
81 const ReportBlock& rb = parsed.report_blocks().front();
82 EXPECT_EQ(kRemoteSsrc, rb.source_ssrc());
83 EXPECT_EQ(kFractionLost, rb.fraction_lost());
84 EXPECT_EQ(kCumulativeLost, rb.cumulative_lost());
85 EXPECT_EQ(kExtHighestSeqNum, rb.extended_high_seq_num());
86 EXPECT_EQ(kJitter, rb.jitter());
87 EXPECT_EQ(kLastSr, rb.last_sr());
88 EXPECT_EQ(kDelayLastSr, rb.delay_since_last_sr());
89 }
90
91 TEST_F(RtcpPacketReceiverReportTest, ParseFailesOnIncorretSize) {
åsapersson 2015/12/03 13:56:41 s/Failes/Fails s/Incorret/Incorrect
danilchap 2015/12/03 14:23:16 Done.
92 RtcpCommonHeader header;
93 RtcpParseCommonHeader(kPacket, kPacketLength, &header);
94 header.count_or_format++; // Damage the packet.
95 EXPECT_FALSE(rr.Parse(header, kPacket + kPacketLength));
åsapersson 2015/12/03 13:56:41 kPacket + RtcpCommonHeader::kHeaderSizeBytes?
danilchap 2015/12/03 14:23:16 Done.
96 }
97
98 TEST_F(RtcpPacketReceiverReportTest, Create) {
99 rr.From(kSenderSsrc);
100 ReportBlock rb;
101 rb.To(kRemoteSsrc);
102 rb.WithFractionLost(kFractionLost);
103 rb.WithCumulativeLost(kCumulativeLost);
104 rb.WithExtHighestSeqNum(kExtHighestSeqNum);
105 rb.WithJitter(kJitter);
106 rb.WithLastSr(kLastSr);
107 rb.WithDelayLastSr(kDelayLastSr);
108 rr.WithReportBlock(rb);
109
110 BuildPacket();
111
112 ASSERT_EQ(kPacketLength, packet->Length());
113 EXPECT_EQ(0, memcmp(kPacket, packet->Buffer(), kPacketLength));
114 }
115
116 TEST_F(RtcpPacketReceiverReportTest, WithTwoReportBlocks) {
117 ReportBlock rb1;
118 rb1.To(kRemoteSsrc);
119 ReportBlock rb2;
120 rb2.To(kRemoteSsrc + 1);
121
122 rr.From(kSenderSsrc);
123 EXPECT_TRUE(rr.WithReportBlock(rb1));
124 EXPECT_TRUE(rr.WithReportBlock(rb2));
125
126 BuildPacket();
127 ParsePacket();
128
129 EXPECT_EQ(kSenderSsrc, parsed().sender_ssrc());
130 EXPECT_EQ(2u, parsed().report_blocks().size());
131 EXPECT_EQ(kRemoteSsrc, parsed().report_blocks()[0].source_ssrc());
132 EXPECT_EQ(kRemoteSsrc + 1, parsed().report_blocks()[1].source_ssrc());
133 }
134
135 TEST_F(RtcpPacketReceiverReportTest, WithTooManyReportBlocks) {
136 rr.From(kSenderSsrc);
137 const int kMaxReportBlocks = (1 << 5) - 1;
138 ReportBlock rb;
139 for (int i = 0; i < kMaxReportBlocks; ++i) {
140 rb.To(kRemoteSsrc + i);
141 EXPECT_TRUE(rr.WithReportBlock(rb));
142 }
143 rb.To(kRemoteSsrc + kMaxReportBlocks);
144 EXPECT_FALSE(rr.WithReportBlock(rb));
145 }
146
147 } // namespace
148 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698