OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 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 15 matching lines...) Expand all Loading... |
26 using webrtc::rtcp::SenderReport; | 26 using webrtc::rtcp::SenderReport; |
27 using webrtc::test::RtcpPacketParser; | 27 using webrtc::test::RtcpPacketParser; |
28 | 28 |
29 namespace webrtc { | 29 namespace webrtc { |
30 | 30 |
31 const uint32_t kSenderSsrc = 0x12345678; | 31 const uint32_t kSenderSsrc = 0x12345678; |
32 const uint32_t kRemoteSsrc = 0x23456789; | 32 const uint32_t kRemoteSsrc = 0x23456789; |
33 const uint8_t kSeqNo = 13; | 33 const uint8_t kSeqNo = 13; |
34 | 34 |
35 TEST(RtcpCompoundPacketTest, AppendPacket) { | 35 TEST(RtcpCompoundPacketTest, AppendPacket) { |
| 36 CompoundPacket compound; |
36 Fir fir; | 37 Fir fir; |
37 fir.WithRequestTo(kRemoteSsrc, kSeqNo); | 38 fir.WithRequestTo(kRemoteSsrc, kSeqNo); |
38 ReportBlock rb; | 39 ReportBlock rb; |
39 ReceiverReport rr; | 40 ReceiverReport rr; |
40 rr.From(kSenderSsrc); | 41 rr.From(kSenderSsrc); |
41 EXPECT_TRUE(rr.WithReportBlock(rb)); | 42 EXPECT_TRUE(rr.WithReportBlock(rb)); |
42 rr.Append(&fir); | 43 compound.Append(&rr); |
| 44 compound.Append(&fir); |
43 | 45 |
44 rtc::Buffer packet = rr.Build(); | 46 rtc::Buffer packet = compound.Build(); |
45 RtcpPacketParser parser; | 47 RtcpPacketParser parser; |
46 parser.Parse(packet.data(), packet.size()); | 48 parser.Parse(packet.data(), packet.size()); |
47 EXPECT_EQ(1, parser.receiver_report()->num_packets()); | 49 EXPECT_EQ(1, parser.receiver_report()->num_packets()); |
48 EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); | 50 EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); |
49 EXPECT_EQ(1, parser.report_block()->num_packets()); | 51 EXPECT_EQ(1, parser.report_block()->num_packets()); |
50 EXPECT_EQ(1, parser.fir()->num_packets()); | 52 EXPECT_EQ(1, parser.fir()->num_packets()); |
51 } | 53 } |
52 | 54 |
53 TEST(RtcpCompoundPacketTest, AppendPacketOnEmpty) { | |
54 CompoundPacket empty; | |
55 ReceiverReport rr; | |
56 rr.From(kSenderSsrc); | |
57 empty.Append(&rr); | |
58 | |
59 rtc::Buffer packet = empty.Build(); | |
60 RtcpPacketParser parser; | |
61 parser.Parse(packet.data(), packet.size()); | |
62 EXPECT_EQ(1, parser.receiver_report()->num_packets()); | |
63 EXPECT_EQ(0, parser.report_block()->num_packets()); | |
64 } | |
65 | |
66 TEST(RtcpCompoundPacketTest, AppendPacketWithOwnAppendedPacket) { | 55 TEST(RtcpCompoundPacketTest, AppendPacketWithOwnAppendedPacket) { |
| 56 CompoundPacket root; |
| 57 CompoundPacket leaf; |
67 Fir fir; | 58 Fir fir; |
68 fir.WithRequestTo(kRemoteSsrc, kSeqNo); | 59 fir.WithRequestTo(kRemoteSsrc, kSeqNo); |
69 Bye bye; | 60 Bye bye; |
70 ReportBlock rb; | 61 ReportBlock rb; |
71 | 62 |
72 ReceiverReport rr; | 63 ReceiverReport rr; |
73 EXPECT_TRUE(rr.WithReportBlock(rb)); | 64 EXPECT_TRUE(rr.WithReportBlock(rb)); |
74 rr.Append(&fir); | 65 leaf.Append(&rr); |
| 66 leaf.Append(&fir); |
75 | 67 |
76 SenderReport sr; | 68 SenderReport sr; |
77 sr.Append(&bye); | 69 root.Append(&sr); |
78 sr.Append(&rr); | 70 root.Append(&bye); |
| 71 root.Append(&leaf); |
79 | 72 |
80 rtc::Buffer packet = sr.Build(); | 73 rtc::Buffer packet = root.Build(); |
81 RtcpPacketParser parser; | 74 RtcpPacketParser parser; |
82 parser.Parse(packet.data(), packet.size()); | 75 parser.Parse(packet.data(), packet.size()); |
83 EXPECT_EQ(1, parser.sender_report()->num_packets()); | 76 EXPECT_EQ(1, parser.sender_report()->num_packets()); |
84 EXPECT_EQ(1, parser.receiver_report()->num_packets()); | 77 EXPECT_EQ(1, parser.receiver_report()->num_packets()); |
85 EXPECT_EQ(1, parser.report_block()->num_packets()); | 78 EXPECT_EQ(1, parser.report_block()->num_packets()); |
86 EXPECT_EQ(1, parser.bye()->num_packets()); | 79 EXPECT_EQ(1, parser.bye()->num_packets()); |
87 EXPECT_EQ(1, parser.fir()->num_packets()); | 80 EXPECT_EQ(1, parser.fir()->num_packets()); |
88 } | 81 } |
89 | 82 |
90 TEST(RtcpCompoundPacketTest, BuildWithInputBuffer) { | 83 TEST(RtcpCompoundPacketTest, BuildWithInputBuffer) { |
| 84 CompoundPacket compound; |
91 Fir fir; | 85 Fir fir; |
92 fir.WithRequestTo(kRemoteSsrc, kSeqNo); | 86 fir.WithRequestTo(kRemoteSsrc, kSeqNo); |
93 ReportBlock rb; | 87 ReportBlock rb; |
94 ReceiverReport rr; | 88 ReceiverReport rr; |
95 rr.From(kSenderSsrc); | 89 rr.From(kSenderSsrc); |
96 EXPECT_TRUE(rr.WithReportBlock(rb)); | 90 EXPECT_TRUE(rr.WithReportBlock(rb)); |
97 rr.Append(&fir); | 91 compound.Append(&rr); |
| 92 compound.Append(&fir); |
98 | 93 |
99 const size_t kRrLength = 8; | 94 const size_t kRrLength = 8; |
100 const size_t kReportBlockLength = 24; | 95 const size_t kReportBlockLength = 24; |
101 const size_t kFirLength = 20; | 96 const size_t kFirLength = 20; |
102 | 97 |
103 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { | 98 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { |
104 public: | 99 public: |
105 void OnPacketReady(uint8_t* data, size_t length) override { | 100 void OnPacketReady(uint8_t* data, size_t length) override { |
106 RtcpPacketParser parser; | 101 RtcpPacketParser parser; |
107 parser.Parse(data, length); | 102 parser.Parse(data, length); |
108 EXPECT_EQ(1, parser.receiver_report()->num_packets()); | 103 EXPECT_EQ(1, parser.receiver_report()->num_packets()); |
109 EXPECT_EQ(1, parser.report_block()->num_packets()); | 104 EXPECT_EQ(1, parser.report_block()->num_packets()); |
110 EXPECT_EQ(1, parser.fir()->num_packets()); | 105 EXPECT_EQ(1, parser.fir()->num_packets()); |
111 ++packets_created_; | 106 ++packets_created_; |
112 } | 107 } |
113 | 108 |
114 int packets_created_ = 0; | 109 int packets_created_ = 0; |
115 } verifier; | 110 } verifier; |
116 const size_t kBufferSize = kRrLength + kReportBlockLength + kFirLength; | 111 const size_t kBufferSize = kRrLength + kReportBlockLength + kFirLength; |
117 uint8_t buffer[kBufferSize]; | 112 uint8_t buffer[kBufferSize]; |
118 EXPECT_TRUE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier)); | 113 EXPECT_TRUE(compound.BuildExternalBuffer(buffer, kBufferSize, &verifier)); |
119 EXPECT_EQ(1, verifier.packets_created_); | 114 EXPECT_EQ(1, verifier.packets_created_); |
120 } | 115 } |
121 | 116 |
122 TEST(RtcpCompoundPacketTest, BuildWithTooSmallBuffer_FragmentedSend) { | 117 TEST(RtcpCompoundPacketTest, BuildWithTooSmallBuffer_FragmentedSend) { |
| 118 CompoundPacket compound; |
123 Fir fir; | 119 Fir fir; |
124 fir.WithRequestTo(kRemoteSsrc, kSeqNo); | 120 fir.WithRequestTo(kRemoteSsrc, kSeqNo); |
125 ReportBlock rb; | 121 ReportBlock rb; |
126 ReceiverReport rr; | 122 ReceiverReport rr; |
127 rr.From(kSenderSsrc); | 123 rr.From(kSenderSsrc); |
128 EXPECT_TRUE(rr.WithReportBlock(rb)); | 124 EXPECT_TRUE(rr.WithReportBlock(rb)); |
129 rr.Append(&fir); | 125 compound.Append(&rr); |
| 126 compound.Append(&fir); |
130 | 127 |
131 const size_t kRrLength = 8; | 128 const size_t kRrLength = 8; |
132 const size_t kReportBlockLength = 24; | 129 const size_t kReportBlockLength = 24; |
133 | 130 |
134 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { | 131 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { |
135 public: | 132 public: |
136 void OnPacketReady(uint8_t* data, size_t length) override { | 133 void OnPacketReady(uint8_t* data, size_t length) override { |
137 RtcpPacketParser parser; | 134 RtcpPacketParser parser; |
138 parser.Parse(data, length); | 135 parser.Parse(data, length); |
139 switch (packets_created_++) { | 136 switch (packets_created_++) { |
(...skipping 10 matching lines...) Expand all Loading... |
150 default: | 147 default: |
151 ADD_FAILURE() << "OnPacketReady not expected to be called " | 148 ADD_FAILURE() << "OnPacketReady not expected to be called " |
152 << packets_created_ << " times."; | 149 << packets_created_ << " times."; |
153 } | 150 } |
154 } | 151 } |
155 | 152 |
156 int packets_created_ = 0; | 153 int packets_created_ = 0; |
157 } verifier; | 154 } verifier; |
158 const size_t kBufferSize = kRrLength + kReportBlockLength; | 155 const size_t kBufferSize = kRrLength + kReportBlockLength; |
159 uint8_t buffer[kBufferSize]; | 156 uint8_t buffer[kBufferSize]; |
160 EXPECT_TRUE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier)); | 157 EXPECT_TRUE(compound.BuildExternalBuffer(buffer, kBufferSize, &verifier)); |
161 EXPECT_EQ(2, verifier.packets_created_); | 158 EXPECT_EQ(2, verifier.packets_created_); |
162 } | 159 } |
163 | 160 |
164 } // namespace webrtc | 161 } // namespace webrtc |
OLD | NEW |