OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright (c) 2016 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 * This file includes unit tests for the RtcpPacket. | |
åsapersson
2016/01/12 13:07:19
perhaps remove this comment
danilchap
2016/01/12 13:20:49
Done.
| |
11 */ | |
12 | |
13 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h" | |
14 | |
15 #include "testing/gtest/include/gtest/gtest.h" | |
16 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" | |
17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" | |
18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" | |
19 #include "webrtc/test/rtcp_packet_parser.h" | |
20 | |
21 using webrtc::rtcp::Bye; | |
22 using webrtc::rtcp::CompoundPacket; | |
23 using webrtc::rtcp::Fir; | |
24 using webrtc::rtcp::RawPacket; | |
25 using webrtc::rtcp::ReceiverReport; | |
26 using webrtc::rtcp::ReportBlock; | |
27 using webrtc::rtcp::SenderReport; | |
28 using webrtc::test::RtcpPacketParser; | |
29 | |
30 namespace webrtc { | |
31 | |
32 const uint32_t kSenderSsrc = 0x12345678; | |
33 | |
34 TEST(RtcpPacketTest, AppendPacket) { | |
åsapersson
2016/01/12 13:07:19
rename to RtcpPacketCompoundTest?
danilchap
2016/01/12 13:20:49
Done.
| |
35 Fir fir; | |
36 ReportBlock rb; | |
37 ReceiverReport rr; | |
38 rr.From(kSenderSsrc); | |
39 EXPECT_TRUE(rr.WithReportBlock(rb)); | |
40 rr.Append(&fir); | |
41 | |
42 rtc::scoped_ptr<RawPacket> packet(rr.Build()); | |
43 RtcpPacketParser parser; | |
44 parser.Parse(packet->Buffer(), packet->Length()); | |
45 EXPECT_EQ(1, parser.receiver_report()->num_packets()); | |
46 EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); | |
47 EXPECT_EQ(1, parser.report_block()->num_packets()); | |
48 EXPECT_EQ(1, parser.fir()->num_packets()); | |
49 } | |
50 | |
51 TEST(RtcpPacketTest, AppendPacketOnEmpty) { | |
52 CompoundPacket empty; | |
53 ReceiverReport rr; | |
54 rr.From(kSenderSsrc); | |
55 empty.Append(&rr); | |
56 | |
57 rtc::scoped_ptr<RawPacket> packet(empty.Build()); | |
58 RtcpPacketParser parser; | |
59 parser.Parse(packet->Buffer(), packet->Length()); | |
60 EXPECT_EQ(1, parser.receiver_report()->num_packets()); | |
61 EXPECT_EQ(0, parser.report_block()->num_packets()); | |
62 } | |
63 | |
64 TEST(RtcpPacketTest, AppendPacketWithOwnAppendedPacket) { | |
65 Fir fir; | |
66 Bye bye; | |
67 ReportBlock rb; | |
68 | |
69 ReceiverReport rr; | |
70 EXPECT_TRUE(rr.WithReportBlock(rb)); | |
71 rr.Append(&fir); | |
72 | |
73 SenderReport sr; | |
74 sr.Append(&bye); | |
75 sr.Append(&rr); | |
76 | |
77 rtc::scoped_ptr<RawPacket> packet(sr.Build()); | |
78 RtcpPacketParser parser; | |
79 parser.Parse(packet->Buffer(), packet->Length()); | |
80 EXPECT_EQ(1, parser.sender_report()->num_packets()); | |
81 EXPECT_EQ(1, parser.receiver_report()->num_packets()); | |
82 EXPECT_EQ(1, parser.report_block()->num_packets()); | |
83 EXPECT_EQ(1, parser.bye()->num_packets()); | |
84 EXPECT_EQ(1, parser.fir()->num_packets()); | |
85 } | |
86 | |
87 TEST(RtcpPacketTest, BuildWithInputBuffer) { | |
88 Fir fir; | |
89 ReportBlock rb; | |
90 ReceiverReport rr; | |
91 rr.From(kSenderSsrc); | |
92 EXPECT_TRUE(rr.WithReportBlock(rb)); | |
93 rr.Append(&fir); | |
94 | |
95 const size_t kRrLength = 8; | |
96 const size_t kReportBlockLength = 24; | |
97 const size_t kFirLength = 20; | |
98 | |
99 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { | |
100 public: | |
101 void OnPacketReady(uint8_t* data, size_t length) override { | |
102 RtcpPacketParser parser; | |
103 parser.Parse(data, length); | |
104 EXPECT_EQ(1, parser.receiver_report()->num_packets()); | |
105 EXPECT_EQ(1, parser.report_block()->num_packets()); | |
106 EXPECT_EQ(1, parser.fir()->num_packets()); | |
107 ++packets_created_; | |
108 } | |
109 | |
110 int packets_created_ = 0; | |
111 } verifier; | |
112 const size_t kBufferSize = kRrLength + kReportBlockLength + kFirLength; | |
113 uint8_t buffer[kBufferSize]; | |
114 EXPECT_TRUE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier)); | |
115 EXPECT_EQ(1, verifier.packets_created_); | |
116 } | |
117 | |
118 TEST(RtcpPacketTest, BuildWithTooSmallBuffer_FragmentedSend) { | |
119 Fir fir; | |
120 ReportBlock rb; | |
121 ReceiverReport rr; | |
122 rr.From(kSenderSsrc); | |
123 EXPECT_TRUE(rr.WithReportBlock(rb)); | |
124 rr.Append(&fir); | |
125 | |
126 const size_t kRrLength = 8; | |
127 const size_t kReportBlockLength = 24; | |
128 | |
129 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { | |
130 public: | |
131 void OnPacketReady(uint8_t* data, size_t length) override { | |
132 RtcpPacketParser parser; | |
133 parser.Parse(data, length); | |
134 switch (packets_created_++) { | |
135 case 0: | |
136 EXPECT_EQ(1, parser.receiver_report()->num_packets()); | |
137 EXPECT_EQ(1, parser.report_block()->num_packets()); | |
138 EXPECT_EQ(0, parser.fir()->num_packets()); | |
139 break; | |
140 case 1: | |
141 EXPECT_EQ(0, parser.receiver_report()->num_packets()); | |
142 EXPECT_EQ(0, parser.report_block()->num_packets()); | |
143 EXPECT_EQ(1, parser.fir()->num_packets()); | |
144 break; | |
145 default: | |
146 ADD_FAILURE() << "OnPacketReady not expected to be called " | |
147 << packets_created_ << " times."; | |
148 } | |
149 } | |
150 | |
151 int packets_created_ = 0; | |
152 } verifier; | |
153 const size_t kBufferSize = kRrLength + kReportBlockLength; | |
154 uint8_t buffer[kBufferSize]; | |
155 EXPECT_TRUE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier)); | |
156 EXPECT_EQ(2, verifier.packets_created_); | |
157 } | |
158 | |
159 } // namespace webrtc | |
OLD | NEW |