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

Side by Side Diff: webrtc/api/peerconnectioninterface_unittest.cc

Issue 2563153002: Implement the "needs-ice-restart" logic for SetConfiguration. (Closed)
Patch Set: Fixing signed/unsigned comparison warning. Created 4 years 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
« no previous file with comments | « webrtc/api/peerconnectioninterface.h ('k') | webrtc/api/webrtcsession.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 static const char kRecvonly[] = "recvonly"; 65 static const char kRecvonly[] = "recvonly";
66 static const char kSendrecv[] = "sendrecv"; 66 static const char kSendrecv[] = "sendrecv";
67 67
68 // Reference SDP with a MediaStream with label "stream1" and audio track with 68 // Reference SDP with a MediaStream with label "stream1" and audio track with
69 // id "audio_1" and a video track with id "video_1; 69 // id "audio_1" and a video track with id "video_1;
70 static const char kSdpStringWithStream1[] = 70 static const char kSdpStringWithStream1[] =
71 "v=0\r\n" 71 "v=0\r\n"
72 "o=- 0 0 IN IP4 127.0.0.1\r\n" 72 "o=- 0 0 IN IP4 127.0.0.1\r\n"
73 "s=-\r\n" 73 "s=-\r\n"
74 "t=0 0\r\n" 74 "t=0 0\r\n"
75 "m=audio 1 RTP/AVPF 103\r\n"
75 "a=ice-ufrag:e5785931\r\n" 76 "a=ice-ufrag:e5785931\r\n"
76 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" 77 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
77 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" 78 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
78 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" 79 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
79 "m=audio 1 RTP/AVPF 103\r\n"
80 "a=mid:audio\r\n" 80 "a=mid:audio\r\n"
81 "a=sendrecv\r\n" 81 "a=sendrecv\r\n"
82 "a=rtcp-mux\r\n" 82 "a=rtcp-mux\r\n"
83 "a=rtpmap:103 ISAC/16000\r\n" 83 "a=rtpmap:103 ISAC/16000\r\n"
84 "a=ssrc:1 cname:stream1\r\n" 84 "a=ssrc:1 cname:stream1\r\n"
85 "a=ssrc:1 mslabel:stream1\r\n" 85 "a=ssrc:1 mslabel:stream1\r\n"
86 "a=ssrc:1 label:audiotrack0\r\n" 86 "a=ssrc:1 label:audiotrack0\r\n"
87 "m=video 1 RTP/AVPF 120\r\n" 87 "m=video 1 RTP/AVPF 120\r\n"
88 "a=ice-ufrag:e5785931\r\n"
89 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
90 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
91 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
88 "a=mid:video\r\n" 92 "a=mid:video\r\n"
89 "a=sendrecv\r\n" 93 "a=sendrecv\r\n"
90 "a=rtcp-mux\r\n" 94 "a=rtcp-mux\r\n"
91 "a=rtpmap:120 VP8/90000\r\n" 95 "a=rtpmap:120 VP8/90000\r\n"
92 "a=ssrc:2 cname:stream1\r\n" 96 "a=ssrc:2 cname:stream1\r\n"
93 "a=ssrc:2 mslabel:stream1\r\n" 97 "a=ssrc:2 mslabel:stream1\r\n"
94 "a=ssrc:2 label:videotrack0\r\n"; 98 "a=ssrc:2 label:videotrack0\r\n";
95 99
96 // Reference SDP with a MediaStream with label "stream1" and audio track with 100 // Reference SDP with a MediaStream with label "stream1" and audio track with
97 // id "audio_1"; 101 // id "audio_1";
98 static const char kSdpStringWithStream1AudioTrackOnly[] = 102 static const char kSdpStringWithStream1AudioTrackOnly[] =
99 "v=0\r\n" 103 "v=0\r\n"
100 "o=- 0 0 IN IP4 127.0.0.1\r\n" 104 "o=- 0 0 IN IP4 127.0.0.1\r\n"
101 "s=-\r\n" 105 "s=-\r\n"
102 "t=0 0\r\n" 106 "t=0 0\r\n"
107 "m=audio 1 RTP/AVPF 103\r\n"
103 "a=ice-ufrag:e5785931\r\n" 108 "a=ice-ufrag:e5785931\r\n"
104 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" 109 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
105 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" 110 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
106 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" 111 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
107 "m=audio 1 RTP/AVPF 103\r\n"
108 "a=mid:audio\r\n" 112 "a=mid:audio\r\n"
109 "a=sendrecv\r\n" 113 "a=sendrecv\r\n"
110 "a=rtpmap:103 ISAC/16000\r\n" 114 "a=rtpmap:103 ISAC/16000\r\n"
111 "a=ssrc:1 cname:stream1\r\n" 115 "a=ssrc:1 cname:stream1\r\n"
112 "a=ssrc:1 mslabel:stream1\r\n" 116 "a=ssrc:1 mslabel:stream1\r\n"
113 "a=ssrc:1 label:audiotrack0\r\n" 117 "a=ssrc:1 label:audiotrack0\r\n"
114 "a=rtcp-mux\r\n"; 118 "a=rtcp-mux\r\n";
115 119
116 // Reference SDP with two MediaStreams with label "stream1" and "stream2. Each 120 // Reference SDP with two MediaStreams with label "stream1" and "stream2. Each
117 // MediaStreams have one audio track and one video track. 121 // MediaStreams have one audio track and one video track.
118 // This uses MSID. 122 // This uses MSID.
119 static const char kSdpStringWithStream1And2[] = 123 static const char kSdpStringWithStream1And2[] =
120 "v=0\r\n" 124 "v=0\r\n"
121 "o=- 0 0 IN IP4 127.0.0.1\r\n" 125 "o=- 0 0 IN IP4 127.0.0.1\r\n"
122 "s=-\r\n" 126 "s=-\r\n"
123 "t=0 0\r\n" 127 "t=0 0\r\n"
128 "a=msid-semantic: WMS stream1 stream2\r\n"
129 "m=audio 1 RTP/AVPF 103\r\n"
124 "a=ice-ufrag:e5785931\r\n" 130 "a=ice-ufrag:e5785931\r\n"
125 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" 131 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
126 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" 132 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
127 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" 133 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
128 "a=msid-semantic: WMS stream1 stream2\r\n"
129 "m=audio 1 RTP/AVPF 103\r\n"
130 "a=mid:audio\r\n" 134 "a=mid:audio\r\n"
131 "a=sendrecv\r\n" 135 "a=sendrecv\r\n"
132 "a=rtcp-mux\r\n" 136 "a=rtcp-mux\r\n"
133 "a=rtpmap:103 ISAC/16000\r\n" 137 "a=rtpmap:103 ISAC/16000\r\n"
134 "a=ssrc:1 cname:stream1\r\n" 138 "a=ssrc:1 cname:stream1\r\n"
135 "a=ssrc:1 msid:stream1 audiotrack0\r\n" 139 "a=ssrc:1 msid:stream1 audiotrack0\r\n"
136 "a=ssrc:3 cname:stream2\r\n" 140 "a=ssrc:3 cname:stream2\r\n"
137 "a=ssrc:3 msid:stream2 audiotrack1\r\n" 141 "a=ssrc:3 msid:stream2 audiotrack1\r\n"
138 "m=video 1 RTP/AVPF 120\r\n" 142 "m=video 1 RTP/AVPF 120\r\n"
143 "a=ice-ufrag:e5785931\r\n"
144 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
145 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
146 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
139 "a=mid:video\r\n" 147 "a=mid:video\r\n"
140 "a=sendrecv\r\n" 148 "a=sendrecv\r\n"
141 "a=rtcp-mux\r\n" 149 "a=rtcp-mux\r\n"
142 "a=rtpmap:120 VP8/0\r\n" 150 "a=rtpmap:120 VP8/0\r\n"
143 "a=ssrc:2 cname:stream1\r\n" 151 "a=ssrc:2 cname:stream1\r\n"
144 "a=ssrc:2 msid:stream1 videotrack0\r\n" 152 "a=ssrc:2 msid:stream1 videotrack0\r\n"
145 "a=ssrc:4 cname:stream2\r\n" 153 "a=ssrc:4 cname:stream2\r\n"
146 "a=ssrc:4 msid:stream2 videotrack1\r\n"; 154 "a=ssrc:4 msid:stream2 videotrack1\r\n";
147 155
148 // Reference SDP without MediaStreams. Msid is not supported. 156 // Reference SDP without MediaStreams. Msid is not supported.
149 static const char kSdpStringWithoutStreams[] = 157 static const char kSdpStringWithoutStreams[] =
150 "v=0\r\n" 158 "v=0\r\n"
151 "o=- 0 0 IN IP4 127.0.0.1\r\n" 159 "o=- 0 0 IN IP4 127.0.0.1\r\n"
152 "s=-\r\n" 160 "s=-\r\n"
153 "t=0 0\r\n" 161 "t=0 0\r\n"
162 "m=audio 1 RTP/AVPF 103\r\n"
154 "a=ice-ufrag:e5785931\r\n" 163 "a=ice-ufrag:e5785931\r\n"
155 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" 164 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
156 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" 165 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
157 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" 166 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
158 "m=audio 1 RTP/AVPF 103\r\n"
159 "a=mid:audio\r\n" 167 "a=mid:audio\r\n"
160 "a=sendrecv\r\n" 168 "a=sendrecv\r\n"
161 "a=rtcp-mux\r\n" 169 "a=rtcp-mux\r\n"
162 "a=rtpmap:103 ISAC/16000\r\n" 170 "a=rtpmap:103 ISAC/16000\r\n"
163 "m=video 1 RTP/AVPF 120\r\n" 171 "m=video 1 RTP/AVPF 120\r\n"
172 "a=ice-ufrag:e5785931\r\n"
173 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
174 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
175 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
164 "a=mid:video\r\n" 176 "a=mid:video\r\n"
165 "a=sendrecv\r\n" 177 "a=sendrecv\r\n"
166 "a=rtcp-mux\r\n" 178 "a=rtcp-mux\r\n"
167 "a=rtpmap:120 VP8/90000\r\n"; 179 "a=rtpmap:120 VP8/90000\r\n";
168 180
169 // Reference SDP without MediaStreams. Msid is supported. 181 // Reference SDP without MediaStreams. Msid is supported.
170 static const char kSdpStringWithMsidWithoutStreams[] = 182 static const char kSdpStringWithMsidWithoutStreams[] =
171 "v=0\r\n" 183 "v=0\r\n"
172 "o=- 0 0 IN IP4 127.0.0.1\r\n" 184 "o=- 0 0 IN IP4 127.0.0.1\r\n"
173 "s=-\r\n" 185 "s=-\r\n"
174 "t=0 0\r\n" 186 "t=0 0\r\n"
187 "a=msid-semantic: WMS\r\n"
188 "m=audio 1 RTP/AVPF 103\r\n"
175 "a=ice-ufrag:e5785931\r\n" 189 "a=ice-ufrag:e5785931\r\n"
176 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" 190 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
177 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" 191 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
178 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" 192 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
179 "a=msid-semantic: WMS\r\n"
180 "m=audio 1 RTP/AVPF 103\r\n"
181 "a=mid:audio\r\n" 193 "a=mid:audio\r\n"
182 "a=sendrecv\r\n" 194 "a=sendrecv\r\n"
183 "a=rtcp-mux\r\n" 195 "a=rtcp-mux\r\n"
184 "a=rtpmap:103 ISAC/16000\r\n" 196 "a=rtpmap:103 ISAC/16000\r\n"
185 "m=video 1 RTP/AVPF 120\r\n" 197 "m=video 1 RTP/AVPF 120\r\n"
198 "a=ice-ufrag:e5785931\r\n"
199 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
200 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
201 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
186 "a=mid:video\r\n" 202 "a=mid:video\r\n"
187 "a=sendrecv\r\n" 203 "a=sendrecv\r\n"
188 "a=rtcp-mux\r\n" 204 "a=rtcp-mux\r\n"
189 "a=rtpmap:120 VP8/90000\r\n"; 205 "a=rtpmap:120 VP8/90000\r\n";
190 206
191 // Reference SDP without MediaStreams and audio only. 207 // Reference SDP without MediaStreams and audio only.
192 static const char kSdpStringWithoutStreamsAudioOnly[] = 208 static const char kSdpStringWithoutStreamsAudioOnly[] =
193 "v=0\r\n" 209 "v=0\r\n"
194 "o=- 0 0 IN IP4 127.0.0.1\r\n" 210 "o=- 0 0 IN IP4 127.0.0.1\r\n"
195 "s=-\r\n" 211 "s=-\r\n"
196 "t=0 0\r\n" 212 "t=0 0\r\n"
213 "m=audio 1 RTP/AVPF 103\r\n"
197 "a=ice-ufrag:e5785931\r\n" 214 "a=ice-ufrag:e5785931\r\n"
198 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" 215 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
199 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" 216 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
200 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" 217 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
201 "m=audio 1 RTP/AVPF 103\r\n"
202 "a=mid:audio\r\n" 218 "a=mid:audio\r\n"
203 "a=sendrecv\r\n" 219 "a=sendrecv\r\n"
204 "a=rtcp-mux\r\n" 220 "a=rtcp-mux\r\n"
205 "a=rtpmap:103 ISAC/16000\r\n"; 221 "a=rtpmap:103 ISAC/16000\r\n";
206 222
207 // Reference SENDONLY SDP without MediaStreams. Msid is not supported. 223 // Reference SENDONLY SDP without MediaStreams. Msid is not supported.
208 static const char kSdpStringSendOnlyWithoutStreams[] = 224 static const char kSdpStringSendOnlyWithoutStreams[] =
209 "v=0\r\n" 225 "v=0\r\n"
210 "o=- 0 0 IN IP4 127.0.0.1\r\n" 226 "o=- 0 0 IN IP4 127.0.0.1\r\n"
211 "s=-\r\n" 227 "s=-\r\n"
212 "t=0 0\r\n" 228 "t=0 0\r\n"
229 "m=audio 1 RTP/AVPF 103\r\n"
213 "a=ice-ufrag:e5785931\r\n" 230 "a=ice-ufrag:e5785931\r\n"
214 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" 231 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
215 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" 232 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
216 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" 233 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
217 "m=audio 1 RTP/AVPF 103\r\n"
218 "a=mid:audio\r\n" 234 "a=mid:audio\r\n"
219 "a=sendrecv\r\n" 235 "a=sendrecv\r\n"
220 "a=sendonly\r\n" 236 "a=sendonly\r\n"
221 "a=rtcp-mux\r\n" 237 "a=rtcp-mux\r\n"
222 "a=rtpmap:103 ISAC/16000\r\n" 238 "a=rtpmap:103 ISAC/16000\r\n"
223 "m=video 1 RTP/AVPF 120\r\n" 239 "m=video 1 RTP/AVPF 120\r\n"
240 "a=ice-ufrag:e5785931\r\n"
241 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
242 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
243 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
224 "a=mid:video\r\n" 244 "a=mid:video\r\n"
225 "a=sendrecv\r\n" 245 "a=sendrecv\r\n"
226 "a=sendonly\r\n" 246 "a=sendonly\r\n"
227 "a=rtcp-mux\r\n" 247 "a=rtcp-mux\r\n"
228 "a=rtpmap:120 VP8/90000\r\n"; 248 "a=rtpmap:120 VP8/90000\r\n";
229 249
230 static const char kSdpStringInit[] = 250 static const char kSdpStringInit[] =
231 "v=0\r\n" 251 "v=0\r\n"
232 "o=- 0 0 IN IP4 127.0.0.1\r\n" 252 "o=- 0 0 IN IP4 127.0.0.1\r\n"
233 "s=-\r\n" 253 "s=-\r\n"
234 "t=0 0\r\n" 254 "t=0 0\r\n"
255 "a=msid-semantic: WMS\r\n";
256
257 static const char kSdpStringAudio[] =
258 "m=audio 1 RTP/AVPF 103\r\n"
235 "a=ice-ufrag:e5785931\r\n" 259 "a=ice-ufrag:e5785931\r\n"
236 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n" 260 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
237 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:" 261 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
238 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n" 262 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
239 "a=msid-semantic: WMS\r\n";
240
241 static const char kSdpStringAudio[] =
242 "m=audio 1 RTP/AVPF 103\r\n"
243 "a=mid:audio\r\n" 263 "a=mid:audio\r\n"
244 "a=sendrecv\r\n" 264 "a=sendrecv\r\n"
245 "a=rtcp-mux\r\n" 265 "a=rtcp-mux\r\n"
246 "a=rtpmap:103 ISAC/16000\r\n"; 266 "a=rtpmap:103 ISAC/16000\r\n";
247 267
248 static const char kSdpStringVideo[] = 268 static const char kSdpStringVideo[] =
249 "m=video 1 RTP/AVPF 120\r\n" 269 "m=video 1 RTP/AVPF 120\r\n"
270 "a=ice-ufrag:e5785931\r\n"
271 "a=ice-pwd:36fb7878390db89481c1d46daa4278d8\r\n"
272 "a=fingerprint:sha-256 58:AB:6E:F5:F1:E4:57:B7:E9:46:F4:86:04:28:F9:A7:ED:"
273 "BD:AB:AE:40:EF:CE:9A:51:2C:2A:B1:9B:8B:78:84\r\n"
250 "a=mid:video\r\n" 274 "a=mid:video\r\n"
251 "a=sendrecv\r\n" 275 "a=sendrecv\r\n"
252 "a=rtcp-mux\r\n" 276 "a=rtcp-mux\r\n"
253 "a=rtpmap:120 VP8/90000\r\n"; 277 "a=rtpmap:120 VP8/90000\r\n";
254 278
255 static const char kSdpStringMs1Audio0[] = 279 static const char kSdpStringMs1Audio0[] =
256 "a=ssrc:1 cname:stream1\r\n" 280 "a=ssrc:1 cname:stream1\r\n"
257 "a=ssrc:1 msid:stream1 audiotrack0\r\n"; 281 "a=ssrc:1 msid:stream1 audiotrack0\r\n";
258 282
259 static const char kSdpStringMs1Video0[] = 283 static const char kSdpStringMs1Video0[] =
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 const cricket::MediaContentDescription* media_desc = 342 const cricket::MediaContentDescription* media_desc =
319 static_cast<const cricket::MediaContentDescription*>( 343 static_cast<const cricket::MediaContentDescription*>(
320 content_info->description); 344 content_info->description);
321 if (!media_desc || media_desc->streams().empty()) { 345 if (!media_desc || media_desc->streams().empty()) {
322 return false; 346 return false;
323 } 347 }
324 *ssrc = media_desc->streams().begin()->first_ssrc(); 348 *ssrc = media_desc->streams().begin()->first_ssrc();
325 return true; 349 return true;
326 } 350 }
327 351
352 // Get the ufrags out of an SDP blob. Useful for testing ICE restart
353 // behavior.
354 std::vector<std::string> GetUfrags(
355 const webrtc::SessionDescriptionInterface* desc) {
356 std::vector<std::string> ufrags;
357 for (const cricket::TransportInfo& info :
358 desc->description()->transport_infos()) {
359 ufrags.push_back(info.description.ice_ufrag);
360 }
361 return ufrags;
362 }
363
328 void SetSsrcToZero(std::string* sdp) { 364 void SetSsrcToZero(std::string* sdp) {
329 const char kSdpSsrcAtribute[] = "a=ssrc:"; 365 const char kSdpSsrcAtribute[] = "a=ssrc:";
330 const char kSdpSsrcAtributeZero[] = "a=ssrc:0"; 366 const char kSdpSsrcAtributeZero[] = "a=ssrc:0";
331 size_t ssrc_pos = 0; 367 size_t ssrc_pos = 0;
332 while ((ssrc_pos = sdp->find(kSdpSsrcAtribute, ssrc_pos)) != 368 while ((ssrc_pos = sdp->find(kSdpSsrcAtribute, ssrc_pos)) !=
333 std::string::npos) { 369 std::string::npos) {
334 size_t end_ssrc = sdp->find(" ", ssrc_pos); 370 size_t end_ssrc = sdp->find(" ", ssrc_pos);
335 sdp->replace(ssrc_pos, end_ssrc - ssrc_pos, kSdpSsrcAtributeZero); 371 sdp->replace(ssrc_pos, end_ssrc - ssrc_pos, kSdpSsrcAtributeZero);
336 ssrc_pos = end_ssrc; 372 ssrc_pos = end_ssrc;
337 } 373 }
(...skipping 2381 matching lines...) Expand 10 before | Expand all | Expand 10 after
2719 CreateAndSetRemoteOffer(kSdpStringWithStream1AudioTrackOnly); 2755 CreateAndSetRemoteOffer(kSdpStringWithStream1AudioTrackOnly);
2720 EXPECT_EQ(observer_.num_added_tracks_, 1); 2756 EXPECT_EQ(observer_.num_added_tracks_, 1);
2721 EXPECT_EQ(observer_.last_added_track_label_, kAudioTracks[0]); 2757 EXPECT_EQ(observer_.last_added_track_label_, kAudioTracks[0]);
2722 2758
2723 // Create and set the updated remote SDP. 2759 // Create and set the updated remote SDP.
2724 CreateAndSetRemoteOffer(kSdpStringWithStream1); 2760 CreateAndSetRemoteOffer(kSdpStringWithStream1);
2725 EXPECT_EQ(observer_.num_added_tracks_, 2); 2761 EXPECT_EQ(observer_.num_added_tracks_, 2);
2726 EXPECT_EQ(observer_.last_added_track_label_, kVideoTracks[0]); 2762 EXPECT_EQ(observer_.last_added_track_label_, kVideoTracks[0]);
2727 } 2763 }
2728 2764
2765 // Test that when SetConfiguration is called and the configuration is
2766 // changing, the next offer causes an ICE restart.
2767 TEST_F(PeerConnectionInterfaceTest, SetConfigurationCausingIceRetart) {
2768 PeerConnectionInterface::RTCConfiguration config;
2769 config.type = PeerConnectionInterface::kRelay;
2770 // Need to pass default constraints to prevent disabling of DTLS...
2771 FakeConstraints default_constraints;
2772 CreatePeerConnection(config, &default_constraints);
2773 AddAudioVideoStream(kStreamLabel1, "audio_label", "video_label");
2774
2775 // Do initial offer/answer so there's something to restart.
2776 CreateOfferAsLocalDescription();
2777 CreateAnswerAsRemoteDescription(kSdpStringWithStream1);
2778
2779 // Grab the ufrags.
2780 std::vector<std::string> initial_ufrags = GetUfrags(pc_->local_description());
2781
2782 // Change ICE policy, which should trigger an ICE restart on the next offer.
2783 config.type = PeerConnectionInterface::kAll;
2784 EXPECT_TRUE(pc_->SetConfiguration(config));
2785 CreateOfferAsLocalDescription();
2786
2787 // Grab the new ufrags.
2788 std::vector<std::string> subsequent_ufrags =
2789 GetUfrags(pc_->local_description());
2790
2791 // Sanity check.
2792 EXPECT_EQ(initial_ufrags.size(), subsequent_ufrags.size());
2793 // Check that each ufrag is different.
2794 for (int i = 0; i < static_cast<int>(initial_ufrags.size()); ++i) {
2795 EXPECT_NE(initial_ufrags[i], subsequent_ufrags[i]);
2796 }
2797 }
2798
2799 // Test that when SetConfiguration is called and the configuration *isn't*
2800 // changing, the next offer does *not* cause an ICE restart.
2801 TEST_F(PeerConnectionInterfaceTest, SetConfigurationNotCausingIceRetart) {
2802 PeerConnectionInterface::RTCConfiguration config;
2803 config.type = PeerConnectionInterface::kRelay;
2804 // Need to pass default constraints to prevent disabling of DTLS...
2805 FakeConstraints default_constraints;
2806 CreatePeerConnection(config, &default_constraints);
2807 AddAudioVideoStream(kStreamLabel1, "audio_label", "video_label");
2808
2809 // Do initial offer/answer so there's something to restart.
2810 CreateOfferAsLocalDescription();
2811 CreateAnswerAsRemoteDescription(kSdpStringWithStream1);
2812
2813 // Grab the ufrags.
2814 std::vector<std::string> initial_ufrags = GetUfrags(pc_->local_description());
2815
2816 // Call SetConfiguration with a config identical to what the PC was
2817 // constructed with.
2818 EXPECT_TRUE(pc_->SetConfiguration(config));
2819 CreateOfferAsLocalDescription();
2820
2821 // Grab the new ufrags.
2822 std::vector<std::string> subsequent_ufrags =
2823 GetUfrags(pc_->local_description());
2824
2825 EXPECT_EQ(initial_ufrags, subsequent_ufrags);
2826 }
2827
2828 // Test for a weird corner case scenario:
2829 // 1. Audio/video session established.
2830 // 2. SetConfiguration changes ICE config; ICE restart needed.
2831 // 3. ICE restart initiated by remote peer, but only for one m= section.
2832 // 4. Next createOffer should initiate an ICE restart, but only for the other
2833 // m= section; it would be pointless to do an ICE restart for the m= section
2834 // that was already restarted.
2835 TEST_F(PeerConnectionInterfaceTest, SetConfigurationCausingPartialIceRestart) {
2836 PeerConnectionInterface::RTCConfiguration config;
2837 config.type = PeerConnectionInterface::kRelay;
2838 // Need to pass default constraints to prevent disabling of DTLS...
2839 FakeConstraints default_constraints;
2840 CreatePeerConnection(config, &default_constraints);
2841 AddAudioVideoStream(kStreamLabel1, "audio_label", "video_label");
2842
2843 // Do initial offer/answer so there's something to restart.
2844 CreateOfferAsLocalDescription();
2845 CreateAnswerAsRemoteDescription(kSdpStringWithStream1);
2846
2847 // Change ICE policy, which should set the "needs-ice-restart" flag.
2848 config.type = PeerConnectionInterface::kAll;
2849 EXPECT_TRUE(pc_->SetConfiguration(config));
2850
2851 // Do ICE restart for the first m= section, initiated by remote peer.
2852 webrtc::JsepSessionDescription* remote_offer =
2853 new webrtc::JsepSessionDescription(SessionDescriptionInterface::kOffer);
2854 EXPECT_TRUE(remote_offer->Initialize(kSdpStringWithStream1, nullptr));
2855 remote_offer->description()->transport_infos()[0].description.ice_ufrag =
2856 "modified";
2857 EXPECT_TRUE(DoSetRemoteDescription(remote_offer));
2858 CreateAnswerAsLocalDescription();
2859
2860 // Grab the ufrags.
2861 std::vector<std::string> initial_ufrags = GetUfrags(pc_->local_description());
2862 ASSERT_EQ(2, initial_ufrags.size());
2863
2864 // Create offer and grab the new ufrags.
2865 CreateOfferAsLocalDescription();
2866 std::vector<std::string> subsequent_ufrags =
2867 GetUfrags(pc_->local_description());
2868 ASSERT_EQ(2, subsequent_ufrags.size());
2869
2870 // Ensure that only the ufrag for the second m= section changed.
2871 EXPECT_EQ(initial_ufrags[0], subsequent_ufrags[0]);
2872 EXPECT_NE(initial_ufrags[1], subsequent_ufrags[1]);
2873 }
2874
2729 class PeerConnectionMediaConfigTest : public testing::Test { 2875 class PeerConnectionMediaConfigTest : public testing::Test {
2730 protected: 2876 protected:
2731 void SetUp() override { 2877 void SetUp() override {
2732 pcf_ = new rtc::RefCountedObject<PeerConnectionFactoryForTest>(); 2878 pcf_ = new rtc::RefCountedObject<PeerConnectionFactoryForTest>();
2733 pcf_->Initialize(); 2879 pcf_->Initialize();
2734 } 2880 }
2735 const cricket::MediaConfig& TestCreatePeerConnection( 2881 const cricket::MediaConfig& TestCreatePeerConnection(
2736 const PeerConnectionInterface::RTCConfiguration& config, 2882 const PeerConnectionInterface::RTCConfiguration& config,
2737 const MediaConstraintsInterface *constraints) { 2883 const MediaConstraintsInterface *constraints) {
2738 pcf_->create_media_controller_called_ = false; 2884 pcf_->create_media_controller_called_ = false;
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
2982 FakeConstraints updated_answer_c; 3128 FakeConstraints updated_answer_c;
2983 answer_c.SetMandatoryReceiveAudio(false); 3129 answer_c.SetMandatoryReceiveAudio(false);
2984 answer_c.SetMandatoryReceiveVideo(false); 3130 answer_c.SetMandatoryReceiveVideo(false);
2985 3131
2986 cricket::MediaSessionOptions updated_answer_options; 3132 cricket::MediaSessionOptions updated_answer_options;
2987 EXPECT_TRUE( 3133 EXPECT_TRUE(
2988 ParseConstraintsForAnswer(&updated_answer_c, &updated_answer_options)); 3134 ParseConstraintsForAnswer(&updated_answer_c, &updated_answer_options));
2989 EXPECT_TRUE(updated_answer_options.has_audio()); 3135 EXPECT_TRUE(updated_answer_options.has_audio());
2990 EXPECT_TRUE(updated_answer_options.has_video()); 3136 EXPECT_TRUE(updated_answer_options.has_video());
2991 } 3137 }
OLDNEW
« no previous file with comments | « webrtc/api/peerconnectioninterface.h ('k') | webrtc/api/webrtcsession.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698