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

Side by Side Diff: webrtc/ortc/rtptransport_unittest.cc

Issue 2675173003: Adding "adapter" ORTC objects on top of ChannelManager/BaseChannel/etc. (Closed)
Patch Set: Merge with master Created 3 years, 10 months 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 2017 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 <memory>
12
13 #include "webrtc/base/fakenetwork.h"
14 #include "webrtc/base/gunit.h"
15 #include "webrtc/base/physicalsocketserver.h"
16 #include "webrtc/base/virtualsocketserver.h"
17 #include "webrtc/media/base/fakemediaengine.h"
18 #include "webrtc/ortc/ortcfactory.h"
19 #include "webrtc/ortc/testrtpparameters.h"
20 #include "webrtc/p2p/base/fakepackettransport.h"
21
22 namespace webrtc {
23
24 // This test uses a virtual network and fake media engine, in order to test the
25 // RtpTransport at only an API level. Any end-to-end test should go in
26 // ortcfactory_integrationtest.cc instead.
27 class RtpTransportTest : public testing::Test {
28 public:
29 RtpTransportTest()
30 : virtual_socket_server_(&physical_socket_server_),
pthatcher1 2017/02/21 20:34:54 Why do we need a virtual socket server when you're
31 socket_server_scope_(&virtual_socket_server_) {
32 fake_media_engine_ = new cricket::FakeMediaEngine();
33 auto result = OrtcFactory::Create(
34 nullptr, nullptr, &fake_network_manager_, nullptr, nullptr,
35 std::unique_ptr<cricket::MediaEngineInterface>(fake_media_engine_));
36 ortc_factory_ = result.MoveValue();
37 }
38
39 protected:
40 // Owned by |ortc_factory_|.
41 cricket::FakeMediaEngine* fake_media_engine_;
42 rtc::PhysicalSocketServer physical_socket_server_;
43 rtc::VirtualSocketServer virtual_socket_server_;
44 rtc::SocketServerScope socket_server_scope_;
45 rtc::FakeNetworkManager fake_network_manager_;
46 std::unique_ptr<OrtcFactoryInterface> ortc_factory_;
47 };
48
49 // Test GetRtpPacketTransport and GetRtcpPacketTransport, with and without RTCP
50 // muxing.
51 TEST_F(RtpTransportTest, GetPacketTransports) {
52 rtc::FakePacketTransport rtp("rtp");
53 rtc::FakePacketTransport rtcp("rtcp");
54 // With muxed RTCP.
55 RtcpParameters rtcp_parameters;
56 rtcp_parameters.mux = true;
57 auto result = ortc_factory_->CreateRtpTransport(rtcp_parameters, &rtp,
58 nullptr, nullptr);
59 ASSERT_TRUE(result.ok());
60 EXPECT_EQ(&rtp, result.value()->GetRtpPacketTransport());
61 EXPECT_EQ(nullptr, result.value()->GetRtcpPacketTransport());
62 result.MoveValue().reset();
63 // With non-muxed RTCP.
64 rtcp_parameters.mux = false;
65 result =
66 ortc_factory_->CreateRtpTransport(rtcp_parameters, &rtp, &rtcp, nullptr);
67 ASSERT_TRUE(result.ok());
68 EXPECT_EQ(&rtp, result.value()->GetRtpPacketTransport());
69 EXPECT_EQ(&rtcp, result.value()->GetRtcpPacketTransport());
70 }
71
72 // If an RtpTransport starts out un-muxed and then starts muxing, the RTCP
73 // packet transport should be forgotten and GetRtcpPacketTransport should
74 // return null.
75 TEST_F(RtpTransportTest, EnablingRtcpMuxingUnsetsRtcpTransport) {
76 rtc::FakePacketTransport rtp("rtp");
77 rtc::FakePacketTransport rtcp("rtcp");
78
79 // Create non-muxed.
80 RtcpParameters rtcp_parameters;
81 rtcp_parameters.mux = false;
82 auto result =
83 ortc_factory_->CreateRtpTransport(rtcp_parameters, &rtp, &rtcp, nullptr);
84 ASSERT_TRUE(result.ok());
85 auto rtp_transport = result.MoveValue();
86
87 // Enable muxing.
88 rtcp_parameters.mux = true;
89 EXPECT_TRUE(rtp_transport->SetRtcpParameters(rtcp_parameters).ok());
90 EXPECT_EQ(nullptr, rtp_transport->GetRtcpPacketTransport());
91 }
92
93 TEST_F(RtpTransportTest, GetAndSetRtcpParameters) {
94 rtc::FakePacketTransport rtp("rtp");
95 rtc::FakePacketTransport rtcp("rtcp");
96 // Start with non-muxed RTCP.
97 RtcpParameters rtcp_parameters;
98 rtcp_parameters.mux = false;
99 rtcp_parameters.cname = "teST";
100 rtcp_parameters.reduced_size = false;
101 auto result =
102 ortc_factory_->CreateRtpTransport(rtcp_parameters, &rtp, &rtcp, nullptr);
103 ASSERT_TRUE(result.ok());
104 auto transport = result.MoveValue();
105 EXPECT_EQ(rtcp_parameters, transport->GetRtcpParameters());
106
107 // Changing the CNAME is currently unsupported.
108 rtcp_parameters.cname = "different";
109 EXPECT_EQ(RTCErrorType::UNSUPPORTED_OPERATION,
110 transport->SetRtcpParameters(rtcp_parameters).type());
111 rtcp_parameters.cname = "teST";
112
113 // Enable RTCP muxing and reduced-size RTCP.
114 rtcp_parameters.mux = true;
115 rtcp_parameters.reduced_size = true;
116 EXPECT_TRUE(transport->SetRtcpParameters(rtcp_parameters).ok());
117 EXPECT_EQ(rtcp_parameters, transport->GetRtcpParameters());
118
119 // Empty CNAME should result in the existing CNAME being used.
120 rtcp_parameters.cname.clear();
121 EXPECT_TRUE(transport->SetRtcpParameters(rtcp_parameters).ok());
122 EXPECT_EQ("teST", transport->GetRtcpParameters().cname);
123
124 // Disabling RTCP muxing after enabling shouldn't be allowed, since enabling
125 // muxing should have made the RTP transport forget about the RTCP packet
126 // transport initially passed into it.
127 rtcp_parameters.mux = false;
128 EXPECT_EQ(RTCErrorType::INVALID_STATE,
129 transport->SetRtcpParameters(rtcp_parameters).type());
130 }
131
132 // When Send or Receive is called on a sender or receiver, the RTCP parameters
133 // from the RtpTransport underneath the sender should be applied to the created
134 // media stream. The only relevant parameters (currently) are |cname| and
135 // |reduced_size|.
136 TEST_F(RtpTransportTest, SendAndReceiveApplyRtcpParametersToMediaEngine) {
137 // First, create video transport with reduced-size RTCP.
138 rtc::FakePacketTransport fake_packet_transport1("1");
139 RtcpParameters rtcp_parameters;
140 rtcp_parameters.mux = true;
141 rtcp_parameters.reduced_size = true;
142 rtcp_parameters.cname = "foo";
143 auto rtp_transport_result = ortc_factory_->CreateRtpTransport(
144 rtcp_parameters, &fake_packet_transport1, nullptr, nullptr);
145 auto video_transport = rtp_transport_result.MoveValue();
146
147 // Create video sender and call Send, expecting parameters to be applied.
148 auto sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_VIDEO,
149 video_transport.get());
150 auto video_sender = sender_result.MoveValue();
151 EXPECT_TRUE(video_sender->Send(MakeMinimalVp8Parameters()).ok());
152 cricket::FakeVideoMediaChannel* fake_video_channel =
153 fake_media_engine_->GetVideoChannel(0);
154 ASSERT_NE(nullptr, fake_video_channel);
155 EXPECT_TRUE(fake_video_channel->send_rtcp_parameters().reduced_size);
156 ASSERT_EQ(1u, fake_video_channel->send_streams().size());
157 const cricket::StreamParams& video_send_stream =
158 fake_video_channel->send_streams()[0];
159 EXPECT_EQ("foo", video_send_stream.cname);
160
161 // Create video receiver and call Receive, expecting parameters to be applied
162 // (minus |cname|, since that's the sent cname, not received).
163 auto receiver_result = ortc_factory_->CreateRtpReceiver(
164 cricket::MEDIA_TYPE_VIDEO, video_transport.get());
165 auto video_receiver = receiver_result.MoveValue();
166 EXPECT_TRUE(
167 video_receiver->Receive(MakeMinimalVp8ParametersWithSsrc(0xdeadbeef))
168 .ok());
169 EXPECT_TRUE(fake_video_channel->recv_rtcp_parameters().reduced_size);
170
171 // Create audio transport with non-reduced size RTCP.
172 rtc::FakePacketTransport fake_packet_transport2("2");
173 rtcp_parameters.reduced_size = false;
174 rtcp_parameters.cname = "bar";
175 rtp_transport_result = ortc_factory_->CreateRtpTransport(
176 rtcp_parameters, &fake_packet_transport2, nullptr, nullptr);
177 auto audio_transport = rtp_transport_result.MoveValue();
178
179 // Create audio sender and call Send, expecting parameters to be applied.
180 sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_AUDIO,
181 audio_transport.get());
182 auto audio_sender = sender_result.MoveValue();
183 EXPECT_TRUE(audio_sender->Send(MakeMinimalIsacParameters()).ok());
184
185 cricket::FakeVoiceMediaChannel* fake_voice_channel =
186 fake_media_engine_->GetVoiceChannel(0);
187 ASSERT_NE(nullptr, fake_voice_channel);
188 EXPECT_FALSE(fake_voice_channel->send_rtcp_parameters().reduced_size);
189 ASSERT_EQ(1u, fake_voice_channel->send_streams().size());
190 const cricket::StreamParams& audio_send_stream =
191 fake_voice_channel->send_streams()[0];
192 EXPECT_EQ("bar", audio_send_stream.cname);
193
194 // Create audio receiver and call Receive, expecting parameters to be applied
195 // (minus |cname|, since that's the sent cname, not received).
196 receiver_result = ortc_factory_->CreateRtpReceiver(cricket::MEDIA_TYPE_AUDIO,
197 audio_transport.get());
198 auto audio_receiver = receiver_result.MoveValue();
199 EXPECT_TRUE(
200 audio_receiver->Receive(MakeMinimalOpusParametersWithSsrc(0xbaadf00d))
201 .ok());
202 EXPECT_FALSE(fake_voice_channel->recv_rtcp_parameters().reduced_size);
203 }
204
205 // When SetRtcpParameters is called, the modified parameters should be applied
206 // to the media engine.
207 // TODO(deadbeef): Once the implementation supports changing the CNAME,
208 // test that here.
209 TEST_F(RtpTransportTest, SetRtcpParametersAppliesParametersToMediaEngine) {
210 rtc::FakePacketTransport fake_packet_transport("fake");
211 RtcpParameters rtcp_parameters;
212 rtcp_parameters.mux = true;
213 rtcp_parameters.reduced_size = false;
214 auto rtp_transport_result = ortc_factory_->CreateRtpTransport(
215 rtcp_parameters, &fake_packet_transport, nullptr, nullptr);
216 auto rtp_transport = rtp_transport_result.MoveValue();
217
218 // Create video sender and call Send, applying an initial set of parameters.
219 auto sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_VIDEO,
220 rtp_transport.get());
221 auto sender = sender_result.MoveValue();
222 EXPECT_TRUE(sender->Send(MakeMinimalVp8Parameters()).ok());
223
224 // Modify parameters and expect them to be changed at the media engine level.
225 rtcp_parameters.reduced_size = true;
226 EXPECT_TRUE(rtp_transport->SetRtcpParameters(rtcp_parameters).ok());
227
228 cricket::FakeVideoMediaChannel* fake_video_channel =
229 fake_media_engine_->GetVideoChannel(0);
230 ASSERT_NE(nullptr, fake_video_channel);
231 EXPECT_TRUE(fake_video_channel->send_rtcp_parameters().reduced_size);
232 }
233
234 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698