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

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

Issue 2675173003: Adding "adapter" ORTC objects on top of ChannelManager/BaseChannel/etc. (Closed)
Patch Set: More sender/receiver tests. 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_),
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 // mux.
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 TEST_F(RtpTransportTest, GetAndSetRtcpParameters) {
73 rtc::FakePacketTransport rtp("rtp");
74 rtc::FakePacketTransport rtcp("rtcp");
75 // Start with non-muxed RTCP.
76 RtcpParameters rtcp_parameters;
77 rtcp_parameters.mux = false;
78 rtcp_parameters.cname = "teST";
79 rtcp_parameters.reduced_size = false;
80 auto result =
81 ortc_factory_->CreateRtpTransport(rtcp_parameters, &rtp, &rtcp, nullptr);
82 ASSERT_TRUE(result.ok());
83 auto transport = result.MoveValue();
84 EXPECT_EQ(rtcp_parameters, transport->GetRtcpParameters());
85 // Changing the CNAME is currently unsupported.
86 rtcp_parameters.cname = "different";
87 EXPECT_EQ(RTCErrorType::UNSUPPORTED_OPERATION,
88 transport->SetRtcpParameters(rtcp_parameters).type());
89 rtcp_parameters.cname = "teST";
90 // Enable RTCP muxing and reduced-size RTCP.
91 rtcp_parameters.mux = true;
92 rtcp_parameters.reduced_size = true;
93 EXPECT_TRUE(transport->SetRtcpParameters(rtcp_parameters).ok());
94 EXPECT_EQ(rtcp_parameters, transport->GetRtcpParameters());
95 // Empty CNAME should result in the existing CNAME being used.
96 rtcp_parameters.cname.clear();
97 EXPECT_TRUE(transport->SetRtcpParameters(rtcp_parameters).ok());
98 EXPECT_EQ("teST", transport->GetRtcpParameters().cname);
99 // Disabling RTCP muxing after enabling shouldn't be allowed, since enabling
100 // muxing should have made the RTP transport forget about the RTCP packet
101 // transport initially passed into it.
102 rtcp_parameters.mux = false;
103 EXPECT_EQ(RTCErrorType::INVALID_STATE,
104 transport->SetRtcpParameters(rtcp_parameters).type());
105 }
106
107 // When Send or Receive is called on a sender or receiver, the RTCP parameters
108 // from the RtpTransport underneath the sender should be applied to the created
109 // media stream. The only relevant parameters (currently) are |cname| and
110 // |reduced_size|.
111 TEST_F(RtpTransportTest, SendAndReceiveApplyRtcpParametersToMediaEngine) {
112 // First, create video transport with reduced-size RTCP.
113 rtc::FakePacketTransport fake_packet_transport1("1");
114 RtcpParameters rtcp_parameters;
115 rtcp_parameters.mux = true;
116 rtcp_parameters.reduced_size = true;
117 rtcp_parameters.cname = "foo";
118 auto rtp_transport_result = ortc_factory_->CreateRtpTransport(
119 rtcp_parameters, &fake_packet_transport1, nullptr, nullptr);
120 auto video_transport = rtp_transport_result.MoveValue();
121
122 // Create video sender and call Send, expecting parameters to be applied.
123 auto sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_VIDEO,
124 video_transport.get());
125 auto video_sender = sender_result.MoveValue();
126 EXPECT_TRUE(video_sender->Send(MakeMinimalVp8Parameters()).ok());
127 cricket::FakeVideoMediaChannel* fake_video_channel =
128 fake_media_engine_->GetVideoChannel(0);
129 ASSERT_NE(nullptr, fake_video_channel);
130 EXPECT_TRUE(fake_video_channel->send_rtcp_parameters().reduced_size);
131 ASSERT_EQ(1u, fake_video_channel->send_streams().size());
132 const cricket::StreamParams& video_send_stream =
133 fake_video_channel->send_streams()[0];
134 EXPECT_EQ("foo", video_send_stream.cname);
135
136 // Create video receiver and call Receive, expecting parameters to be applied
137 // (minus |cname|, since that's the sent cname, not received).
138 auto receiver_result = ortc_factory_->CreateRtpReceiver(
139 cricket::MEDIA_TYPE_VIDEO, video_transport.get());
140 auto video_receiver = receiver_result.MoveValue();
141 EXPECT_TRUE(
142 video_receiver->Receive(MakeMinimalVp8ParametersWithSsrc(0xdeadbeef))
143 .ok());
144 EXPECT_TRUE(fake_video_channel->recv_rtcp_parameters().reduced_size);
145
146 // Create audio transport with non-reduced size RTCP.
147 rtc::FakePacketTransport fake_packet_transport2("2");
148 rtcp_parameters.reduced_size = false;
149 rtcp_parameters.cname = "bar";
150 rtp_transport_result = ortc_factory_->CreateRtpTransport(
151 rtcp_parameters, &fake_packet_transport2, nullptr, nullptr);
152 auto audio_transport = rtp_transport_result.MoveValue();
153
154 // Create audio sender and call Send, expecting parameters to be applied.
155 sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_AUDIO,
156 audio_transport.get());
157 auto audio_sender = sender_result.MoveValue();
158 EXPECT_TRUE(audio_sender->Send(MakeMinimalIsacParameters()).ok());
159
160 cricket::FakeVoiceMediaChannel* fake_voice_channel =
161 fake_media_engine_->GetVoiceChannel(0);
162 ASSERT_NE(nullptr, fake_voice_channel);
163 EXPECT_FALSE(fake_voice_channel->send_rtcp_parameters().reduced_size);
164 ASSERT_EQ(1u, fake_voice_channel->send_streams().size());
165 const cricket::StreamParams& audio_send_stream =
166 fake_voice_channel->send_streams()[0];
167 EXPECT_EQ("bar", audio_send_stream.cname);
168
169 // Create audio receiver and call Receive, expecting parameters to be applied
170 // (minus |cname|, since that's the sent cname, not received).
171 receiver_result = ortc_factory_->CreateRtpReceiver(cricket::MEDIA_TYPE_AUDIO,
172 audio_transport.get());
173 auto audio_receiver = receiver_result.MoveValue();
174 EXPECT_TRUE(
175 audio_receiver->Receive(MakeMinimalOpusParametersWithSsrc(0xbaadf00d))
176 .ok());
177 EXPECT_FALSE(fake_voice_channel->recv_rtcp_parameters().reduced_size);
178 }
179
180 // When SetRtcpParameters is called, the modified parameters should be applied
181 // to the media engine.
182 // TODO(deadbeef): Once the implementation supports changing the CNAME,
183 // test that here.
184 TEST_F(RtpTransportTest, SetRtcpParametersAppliesParametersToMediaEngine) {
185 rtc::FakePacketTransport fake_packet_transport("fake");
186 RtcpParameters rtcp_parameters;
187 rtcp_parameters.mux = true;
188 rtcp_parameters.reduced_size = false;
189 auto rtp_transport_result = ortc_factory_->CreateRtpTransport(
190 rtcp_parameters, &fake_packet_transport, nullptr, nullptr);
191 auto rtp_transport = rtp_transport_result.MoveValue();
192
193 // Create video sender and call Send, applying an initial set of parameters.
194 auto sender_result = ortc_factory_->CreateRtpSender(cricket::MEDIA_TYPE_VIDEO,
195 rtp_transport.get());
196 auto sender = sender_result.MoveValue();
197 EXPECT_TRUE(sender->Send(MakeMinimalVp8Parameters()).ok());
198
199 // Modify parameters and expect them to be changed at the media engine level.
200 rtcp_parameters.reduced_size = true;
201 EXPECT_TRUE(rtp_transport->SetRtcpParameters(rtcp_parameters).ok());
202
203 cricket::FakeVideoMediaChannel* fake_video_channel =
204 fake_media_engine_->GetVideoChannel(0);
205 ASSERT_NE(nullptr, fake_video_channel);
206 EXPECT_TRUE(fake_video_channel->send_rtcp_parameters().reduced_size);
207 }
208
209 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698