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

Side by Side Diff: talk/session/media/bundlefilter_unittest.cc

Issue 1437683005: Remove BundleFilter filtering of RTCP. (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
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2004 Google Inc. 3 * Copyright 2004 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 12 matching lines...) Expand all
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28 #include "talk/session/media/bundlefilter.h" 28 #include "talk/session/media/bundlefilter.h"
29 #include "webrtc/base/gunit.h" 29 #include "webrtc/base/gunit.h"
30 30
31 using cricket::StreamParams; 31 using cricket::StreamParams;
32 32
33 static const int kSsrc1 = 0x1111;
34 static const int kSsrc2 = 0x2222;
35 static const int kSsrc3 = 0x3333;
36 static const int kPayloadType1 = 0x11; 33 static const int kPayloadType1 = 0x11;
37 static const int kPayloadType2 = 0x22; 34 static const int kPayloadType2 = 0x22;
38 static const int kPayloadType3 = 0x33; 35 static const int kPayloadType3 = 0x33;
39 36
40 // SSRC = 0x1111, Payload type = 0x11 37 // SSRC = 0x1111, Payload type = 0x11
41 static const unsigned char kRtpPacketPt1Ssrc1[] = { 38 static const unsigned char kRtpPacketPt1Ssrc1[] = {
42 0x80, kPayloadType1, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 39 0x80, kPayloadType1, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
43 0x11, 40 0x11,
44 }; 41 };
45 42
46 // SSRC = 0x2222, Payload type = 0x22 43 // SSRC = 0x2222, Payload type = 0x22
47 static const unsigned char kRtpPacketPt2Ssrc2[] = { 44 static const unsigned char kRtpPacketPt2Ssrc2[] = {
48 0x80, 0x80 + kPayloadType2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 45 0x80, 0x80 + kPayloadType2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
49 0x22, 0x22, 46 0x22, 0x22,
50 }; 47 };
51 48
52 // SSRC = 0x2222, Payload type = 0x33 49 // SSRC = 0x2222, Payload type = 0x33
53 static const unsigned char kRtpPacketPt3Ssrc2[] = { 50 static const unsigned char kRtpPacketPt3Ssrc2[] = {
54 0x80, kPayloadType3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 51 0x80, kPayloadType3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22,
55 0x22, 52 0x22,
56 }; 53 };
57 54
58 // PT = 200 = SR, len = 28, SSRC of sender = 0x0001
59 // NTP TS = 0, RTP TS = 0, packet count = 0
60 static const unsigned char kRtcpPacketSrSsrc01[] = {
61 0x80, 0xC8, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x01,
62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x00, 0x00,
65 };
66
67 // PT = 200 = SR, len = 28, SSRC of sender = 0x2222
68 // NTP TS = 0, RTP TS = 0, packet count = 0
69 static const unsigned char kRtcpPacketSrSsrc2[] = {
70 0x80, 0xC8, 0x00, 0x1B, 0x00, 0x00, 0x22, 0x22,
71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73 0x00, 0x00, 0x00, 0x00,
74 };
75
76 // First packet - SR = PT = 200, len = 0, SSRC of sender = 0x1111
77 // NTP TS = 0, RTP TS = 0, packet count = 0
78 // second packet - SDES = PT = 202, count = 0, SSRC = 0x1111, cname len = 0
79 static const unsigned char kRtcpPacketCompoundSrSdesSsrc1[] = {
80 0x80, 0xC8, 0x00, 0x01, 0x00, 0x00, 0x11, 0x11,
81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83 0x00, 0x00, 0x00, 0x00,
84 0x81, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x01, 0x00,
85 };
86
87 // SDES = PT = 202, count = 0, SSRC = 0x2222, cname len = 0
88 static const unsigned char kRtcpPacketSdesSsrc2[] = {
89 0x81, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x01, 0x00,
90 };
91
92 // Packet has only mandatory fixed RTCP header
93 static const unsigned char kRtcpPacketFixedHeaderOnly[] = {
94 0x80, 0xC8, 0x00, 0x00,
95 };
96
97 // Small packet for SSRC demux.
98 static const unsigned char kRtcpPacketTooSmall[] = {
99 0x80, 0xC8, 0x00, 0x00, 0x00, 0x00,
100 };
101
102 // PT = 206, FMT = 1, Sender SSRC = 0x1111, Media SSRC = 0x1111
103 // No FCI information is needed for PLI.
104 static const unsigned char kRtcpPacketNonCompoundRtcpPliFeedback[] = {
105 0x81, 0xCE, 0x00, 0x0C, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x11, 0x11,
106 };
107
108 // An SCTP packet. 55 // An SCTP packet.
109 static const unsigned char kSctpPacket[] = { 56 static const unsigned char kSctpPacket[] = {
110 0x00, 0x01, 0x00, 0x01, 57 0x00, 0x01, 0x00, 0x01,
111 0xff, 0xff, 0xff, 0xff, 58 0xff, 0xff, 0xff, 0xff,
112 0x00, 0x00, 0x00, 0x00, 59 0x00, 0x00, 0x00, 0x00,
113 0x03, 0x00, 0x00, 0x04, 60 0x03, 0x00, 0x00, 0x04,
114 0x00, 0x00, 0x00, 0x00, 61 0x00, 0x00, 0x00, 0x00,
115 }; 62 };
116 63
117 TEST(BundleFilterTest, AddRemoveStreamTest) {
118 cricket::BundleFilter bundle_filter;
119 EXPECT_FALSE(bundle_filter.HasStreams());
120 EXPECT_TRUE(bundle_filter.AddStream(StreamParams::CreateLegacy(kSsrc1)));
121 StreamParams stream2;
122 stream2.ssrcs.push_back(kSsrc2);
123 stream2.ssrcs.push_back(kSsrc3);
124 EXPECT_TRUE(bundle_filter.AddStream(stream2));
125
126 EXPECT_TRUE(bundle_filter.HasStreams());
127 EXPECT_TRUE(bundle_filter.FindStream(kSsrc1));
128 EXPECT_TRUE(bundle_filter.FindStream(kSsrc2));
129 EXPECT_TRUE(bundle_filter.FindStream(kSsrc3));
130 EXPECT_TRUE(bundle_filter.RemoveStream(kSsrc1));
131 EXPECT_FALSE(bundle_filter.FindStream(kSsrc1));
132 EXPECT_TRUE(bundle_filter.RemoveStream(kSsrc3));
133 EXPECT_FALSE(bundle_filter.RemoveStream(kSsrc2)); // Already removed.
134 EXPECT_FALSE(bundle_filter.HasStreams());
135 }
136
137 TEST(BundleFilterTest, RtpPacketTest) { 64 TEST(BundleFilterTest, RtpPacketTest) {
138 cricket::BundleFilter bundle_filter; 65 cricket::BundleFilter bundle_filter;
139 bundle_filter.AddPayloadType(kPayloadType1); 66 bundle_filter.AddPayloadType(kPayloadType1);
140 EXPECT_TRUE(bundle_filter.DemuxPacket( 67 EXPECT_TRUE(bundle_filter.DemuxPacket(kRtpPacketPt1Ssrc1,
141 reinterpret_cast<const char*>(kRtpPacketPt1Ssrc1), 68 sizeof(kRtpPacketPt1Ssrc1)));
142 sizeof(kRtpPacketPt1Ssrc1), false));
143 bundle_filter.AddPayloadType(kPayloadType2); 69 bundle_filter.AddPayloadType(kPayloadType2);
144 EXPECT_TRUE(bundle_filter.DemuxPacket( 70 EXPECT_TRUE(bundle_filter.DemuxPacket(kRtpPacketPt2Ssrc2,
145 reinterpret_cast<const char*>(kRtpPacketPt2Ssrc2), 71 sizeof(kRtpPacketPt2Ssrc2)));
146 sizeof(kRtpPacketPt2Ssrc2), false));
147 72
148 // Payload type 0x33 is not added. 73 // Payload type 0x33 is not added.
149 EXPECT_FALSE(bundle_filter.DemuxPacket( 74 EXPECT_FALSE(bundle_filter.DemuxPacket(kRtpPacketPt3Ssrc2,
150 reinterpret_cast<const char*>(kRtpPacketPt3Ssrc2), 75 sizeof(kRtpPacketPt3Ssrc2)));
151 sizeof(kRtpPacketPt3Ssrc2), false));
152 // Size is too small. 76 // Size is too small.
153 EXPECT_FALSE(bundle_filter.DemuxPacket( 77 EXPECT_FALSE(bundle_filter.DemuxPacket(kRtpPacketPt1Ssrc1, 11));
154 reinterpret_cast<const char*>(kRtpPacketPt1Ssrc1), 11, false));
155 78
156 bundle_filter.ClearAllPayloadTypes(); 79 bundle_filter.ClearAllPayloadTypes();
157 EXPECT_FALSE(bundle_filter.DemuxPacket( 80 EXPECT_FALSE(bundle_filter.DemuxPacket(kRtpPacketPt1Ssrc1,
158 reinterpret_cast<const char*>(kRtpPacketPt1Ssrc1), 81 sizeof(kRtpPacketPt1Ssrc1)));
159 sizeof(kRtpPacketPt1Ssrc1), false)); 82 EXPECT_FALSE(bundle_filter.DemuxPacket(kRtpPacketPt2Ssrc2,
160 EXPECT_FALSE(bundle_filter.DemuxPacket( 83 sizeof(kRtpPacketPt2Ssrc2)));
161 reinterpret_cast<const char*>(kRtpPacketPt2Ssrc2),
162 sizeof(kRtpPacketPt2Ssrc2), false));
163 }
164
165 TEST(BundleFilterTest, RtcpPacketTest) {
166 cricket::BundleFilter bundle_filter;
167 EXPECT_TRUE(bundle_filter.AddStream(StreamParams::CreateLegacy(kSsrc1)));
168 EXPECT_TRUE(bundle_filter.DemuxPacket(
169 reinterpret_cast<const char*>(kRtcpPacketCompoundSrSdesSsrc1),
170 sizeof(kRtcpPacketCompoundSrSdesSsrc1), true));
171 EXPECT_TRUE(bundle_filter.AddStream(StreamParams::CreateLegacy(kSsrc2)));
172 EXPECT_TRUE(bundle_filter.DemuxPacket(
173 reinterpret_cast<const char*>(kRtcpPacketSrSsrc2),
174 sizeof(kRtcpPacketSrSsrc2), true));
175 EXPECT_TRUE(bundle_filter.DemuxPacket(
176 reinterpret_cast<const char*>(kRtcpPacketSdesSsrc2),
177 sizeof(kRtcpPacketSdesSsrc2), true));
178 EXPECT_TRUE(bundle_filter.RemoveStream(kSsrc2));
179 // RTCP Packets other than SR and RR are demuxed regardless of SSRC.
180 EXPECT_TRUE(bundle_filter.DemuxPacket(
181 reinterpret_cast<const char*>(kRtcpPacketSdesSsrc2),
182 sizeof(kRtcpPacketSdesSsrc2), true));
183 // RTCP Packets with 'special' SSRC 0x01 are demuxed also
184 EXPECT_TRUE(bundle_filter.DemuxPacket(
185 reinterpret_cast<const char*>(kRtcpPacketSrSsrc01),
186 sizeof(kRtcpPacketSrSsrc01), true));
187 EXPECT_FALSE(bundle_filter.DemuxPacket(
188 reinterpret_cast<const char*>(kRtcpPacketSrSsrc2),
189 sizeof(kRtcpPacketSrSsrc2), true));
190 EXPECT_FALSE(bundle_filter.DemuxPacket(
191 reinterpret_cast<const char*>(kRtcpPacketFixedHeaderOnly),
192 sizeof(kRtcpPacketFixedHeaderOnly), true));
193 EXPECT_FALSE(bundle_filter.DemuxPacket(
194 reinterpret_cast<const char*>(kRtcpPacketTooSmall),
195 sizeof(kRtcpPacketTooSmall), true));
196 EXPECT_TRUE(bundle_filter.DemuxPacket(
197 reinterpret_cast<const char*>(kRtcpPacketNonCompoundRtcpPliFeedback),
198 sizeof(kRtcpPacketNonCompoundRtcpPliFeedback), true));
199 // If the streams_ is empty, rtcp packet passes through
200 EXPECT_TRUE(bundle_filter.RemoveStream(kSsrc1));
201 EXPECT_FALSE(bundle_filter.HasStreams());
202 EXPECT_TRUE(bundle_filter.DemuxPacket(
203 reinterpret_cast<const char*>(kRtcpPacketSrSsrc2),
204 sizeof(kRtcpPacketSrSsrc2), true));
205 } 84 }
206 85
207 TEST(BundleFilterTest, InvalidRtpPacket) { 86 TEST(BundleFilterTest, InvalidRtpPacket) {
208 cricket::BundleFilter bundle_filter; 87 cricket::BundleFilter bundle_filter;
209 EXPECT_TRUE(bundle_filter.AddStream(StreamParams::CreateLegacy(kSsrc1))); 88 EXPECT_FALSE(bundle_filter.DemuxPacket(kSctpPacket, sizeof(kSctpPacket)));
210 EXPECT_FALSE(bundle_filter.DemuxPacket(
211 reinterpret_cast<const char*>(kSctpPacket),
212 sizeof(kSctpPacket), false));
213 } 89 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698