MockCall.h (13200B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #ifndef MOCK_CALL_H_ 6 #define MOCK_CALL_H_ 7 8 #include "gmock/gmock.h" 9 #include "mozilla/Assertions.h" 10 #include "mozilla/Maybe.h" 11 #include "mozilla/media/MediaUtils.h" 12 #include "WebrtcCallWrapper.h" 13 #include "WebrtcEnvironmentWrapper.h" 14 #include "PeerConnectionCtx.h" 15 16 // libwebrtc 17 #include "api/call/audio_sink.h" 18 #include "call/call.h" 19 20 namespace test { 21 class MockCallWrapper; 22 23 class MockAudioSendStream : public webrtc::AudioSendStream { 24 public: 25 explicit MockAudioSendStream(RefPtr<MockCallWrapper> aCallWrapper) 26 : mCallWrapper(std::move(aCallWrapper)) {} 27 28 const webrtc::AudioSendStream::Config& GetConfig() const override; 29 30 void Reconfigure(const Config& config, 31 webrtc::SetParametersCallback callback) override; 32 33 void Start() override {} 34 35 void Stop() override {} 36 37 void SendAudioData(std::unique_ptr<webrtc::AudioFrame> audio_frame) override { 38 } 39 40 bool SendTelephoneEvent(int payload_type, int payload_frequency, int event, 41 int duration_ms) override { 42 return true; 43 } 44 45 void SetMuted(bool muted) override {} 46 47 Stats GetStats() const override { return mStats; } 48 49 Stats GetStats(bool has_remote_tracks) const override { return mStats; } 50 51 virtual ~MockAudioSendStream() {} 52 53 const RefPtr<MockCallWrapper> mCallWrapper; 54 webrtc::AudioSendStream::Stats mStats; 55 }; 56 57 class MockAudioReceiveStream : public webrtc::AudioReceiveStreamInterface { 58 public: 59 explicit MockAudioReceiveStream(RefPtr<MockCallWrapper> aCallWrapper) 60 : mCallWrapper(std::move(aCallWrapper)) {} 61 62 void Start() override {} 63 64 void Stop() override {} 65 66 bool IsRunning() const override { return true; } 67 68 Stats GetStats(bool get_and_clear_legacy_stats) const override { 69 return mStats; 70 } 71 72 void SetSink(webrtc::AudioSinkInterface* sink) override {} 73 74 void SetGain(float gain) override {} 75 76 std::vector<webrtc::RtpSource> GetSources() const override { 77 return mRtpSources; 78 } 79 80 webrtc::AudioMixer::Source* source() override { return nullptr; } 81 82 void SetRtcpMode(webrtc::RtcpMode mode) override {} 83 84 virtual void SetDepacketizerToDecoderFrameTransformer( 85 webrtc::scoped_refptr<webrtc::FrameTransformerInterface> 86 frame_transformer) override { 87 MOZ_CRASH( 88 "Unimplemented after webrtc.org e2561e17e2 removed the Reconfigure " 89 "method."); 90 } 91 virtual void SetDecoderMap( 92 std::map<int, webrtc::SdpAudioFormat> decoder_map) override; 93 virtual void SetNackHistory(int history_ms) override { 94 MOZ_CRASH( 95 "Unimplemented after webrtc.org e2561e17e2 removed the Reconfigure " 96 "method."); 97 } 98 virtual void SetNonSenderRttMeasurement(bool enabled) override {} 99 void SetFrameDecryptor(webrtc::scoped_refptr<webrtc::FrameDecryptorInterface> 100 frame_decryptor) override {} 101 bool SetBaseMinimumPlayoutDelayMs(int delay_ms) override { return false; } 102 int GetBaseMinimumPlayoutDelayMs() const override { return 0; } 103 uint32_t remote_ssrc() const override { return 0; } 104 105 virtual ~MockAudioReceiveStream() {} 106 107 const RefPtr<MockCallWrapper> mCallWrapper; 108 webrtc::AudioReceiveStreamInterface::Stats mStats; 109 std::vector<webrtc::RtpSource> mRtpSources; 110 }; 111 112 class MockVideoSendStream : public webrtc::VideoSendStream { 113 public: 114 explicit MockVideoSendStream(RefPtr<MockCallWrapper> aCallWrapper) 115 : mCallWrapper(std::move(aCallWrapper)) {} 116 117 void Start() override {} 118 119 void Stop() override {} 120 121 bool started() override { return false; } 122 123 void SetSource( 124 webrtc::VideoSourceInterface<webrtc::VideoFrame>* source, 125 const webrtc::DegradationPreference& degradation_preference) override; 126 127 void ReconfigureVideoEncoder(webrtc::VideoEncoderConfig config) override; 128 129 void ReconfigureVideoEncoder(webrtc::VideoEncoderConfig config, 130 webrtc::SetParametersCallback callback) override; 131 132 Stats GetStats() override { return mStats; } 133 134 void AddAdaptationResource( 135 webrtc::scoped_refptr<webrtc::Resource> resource) override {} 136 137 std::vector<webrtc::scoped_refptr<webrtc::Resource>> GetAdaptationResources() 138 override { 139 return std::vector<webrtc::scoped_refptr<webrtc::Resource>>(); 140 } 141 142 void SetCsrcs(webrtc::ArrayView<const uint32_t> csrcs) override {} 143 void GenerateKeyFrame(const std::vector<std::string>& rids) override {} 144 145 virtual ~MockVideoSendStream() {} 146 147 const RefPtr<MockCallWrapper> mCallWrapper; 148 webrtc::VideoSendStream::Stats mStats; 149 }; 150 151 class MockVideoReceiveStream : public webrtc::VideoReceiveStreamInterface { 152 public: 153 explicit MockVideoReceiveStream(RefPtr<MockCallWrapper> aCallWrapper) 154 : mCallWrapper(std::move(aCallWrapper)) {} 155 156 void Start() override {} 157 158 void Stop() override {} 159 160 Stats GetStats() const override { return mStats; } 161 162 std::vector<webrtc::RtpSource> GetSources() const override { 163 return std::vector<webrtc::RtpSource>(); 164 } 165 166 bool SetBaseMinimumPlayoutDelayMs(int delay_ms) override { return false; } 167 168 int GetBaseMinimumPlayoutDelayMs() const override { return 0; } 169 170 void SetFrameDecryptor(webrtc::scoped_refptr<webrtc::FrameDecryptorInterface> 171 frame_decryptor) override {} 172 173 void SetDepacketizerToDecoderFrameTransformer( 174 webrtc::scoped_refptr<webrtc::FrameTransformerInterface> 175 frame_transformer) override {} 176 177 RecordingState SetAndGetRecordingState(RecordingState state, 178 bool generate_key_frame) override { 179 return {}; 180 } 181 182 void GenerateKeyFrame() override {} 183 184 void SetRtcpMode(webrtc::RtcpMode mode) override {} 185 186 void SetFlexFecProtection( 187 webrtc::RtpPacketSinkInterface* flexfec_sink) override {} 188 189 void SetLossNotificationEnabled(bool enabled) override {} 190 191 void SetNackHistory(webrtc::TimeDelta history) override {} 192 193 void SetProtectionPayloadTypes(int red_payload_type, 194 int ulpfec_payload_type) override {} 195 196 void SetRtcpXr(Config::Rtp::RtcpXr rtcp_xr) override {} 197 198 virtual void SetAssociatedPayloadTypes( 199 std::map<int, int> associated_payload_types) override {} 200 201 virtual void UpdateRtxSsrc(uint32_t ssrc) override {}; 202 203 virtual ~MockVideoReceiveStream() {} 204 205 const RefPtr<MockCallWrapper> mCallWrapper; 206 webrtc::VideoReceiveStreamInterface::Stats mStats; 207 }; 208 209 class MockCall : public webrtc::Call { 210 public: 211 explicit MockCall(RefPtr<MockCallWrapper> aCallWrapper) 212 : mCallWrapper(std::move(aCallWrapper)) {} 213 214 webrtc::AudioSendStream* CreateAudioSendStream( 215 const webrtc::AudioSendStream::Config& config) override { 216 MOZ_RELEASE_ASSERT(!mAudioSendConfig); 217 mAudioSendConfig = mozilla::Some(config); 218 return new MockAudioSendStream(mCallWrapper); 219 } 220 221 void DestroyAudioSendStream(webrtc::AudioSendStream* send_stream) override { 222 mAudioSendConfig = mozilla::Nothing(); 223 delete static_cast<MockAudioSendStream*>(send_stream); 224 } 225 226 webrtc::AudioReceiveStreamInterface* CreateAudioReceiveStream( 227 const webrtc::AudioReceiveStreamInterface::Config& config) override { 228 MOZ_RELEASE_ASSERT(!mAudioReceiveConfig); 229 mAudioReceiveConfig = mozilla::Some(config); 230 return new MockAudioReceiveStream(mCallWrapper); 231 } 232 void DestroyAudioReceiveStream( 233 webrtc::AudioReceiveStreamInterface* receive_stream) override { 234 mAudioReceiveConfig = mozilla::Nothing(); 235 delete static_cast<MockAudioReceiveStream*>(receive_stream); 236 } 237 238 webrtc::VideoSendStream* CreateVideoSendStream( 239 webrtc::VideoSendStream::Config config, 240 webrtc::VideoEncoderConfig encoder_config) override { 241 MOZ_RELEASE_ASSERT(!mVideoSendConfig); 242 MOZ_RELEASE_ASSERT(!mVideoSendEncoderConfig); 243 mVideoSendConfig = mozilla::Some(std::move(config)); 244 mVideoSendEncoderConfig = mozilla::Some(std::move(encoder_config)); 245 return new MockVideoSendStream(mCallWrapper); 246 } 247 248 void DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) override { 249 mVideoSendConfig = mozilla::Nothing(); 250 mVideoSendEncoderConfig = mozilla::Nothing(); 251 delete static_cast<MockVideoSendStream*>(send_stream); 252 } 253 254 webrtc::VideoReceiveStreamInterface* CreateVideoReceiveStream( 255 webrtc::VideoReceiveStreamInterface::Config configuration) override { 256 MOZ_RELEASE_ASSERT(!mVideoReceiveConfig); 257 mVideoReceiveConfig = mozilla::Some(std::move(configuration)); 258 return new MockVideoReceiveStream(mCallWrapper); 259 } 260 261 void DestroyVideoReceiveStream( 262 webrtc::VideoReceiveStreamInterface* receive_stream) override { 263 mVideoReceiveConfig = mozilla::Nothing(); 264 delete static_cast<MockVideoReceiveStream*>(receive_stream); 265 } 266 267 webrtc::FlexfecReceiveStream* CreateFlexfecReceiveStream( 268 const webrtc::FlexfecReceiveStream::Config config) override { 269 return nullptr; 270 } 271 272 void DestroyFlexfecReceiveStream( 273 webrtc::FlexfecReceiveStream* receive_stream) override {} 274 275 void AddAdaptationResource( 276 webrtc::scoped_refptr<webrtc::Resource> resource) override {} 277 278 webrtc::PacketReceiver* Receiver() override { return nullptr; } 279 280 webrtc::RtpTransportControllerSendInterface* GetTransportControllerSend() 281 override { 282 return nullptr; 283 } 284 285 Stats GetStats() const override { return mStats; } 286 287 void SignalChannelNetworkState(webrtc::MediaType media, 288 webrtc::NetworkState state) override {} 289 290 void OnAudioTransportOverheadChanged( 291 int transport_overhead_per_packet) override {} 292 293 void OnLocalSsrcUpdated(webrtc::AudioReceiveStreamInterface& stream, 294 uint32_t local_ssrc) override {} 295 void OnLocalSsrcUpdated(webrtc::VideoReceiveStreamInterface& stream, 296 uint32_t local_ssrc) override {} 297 void OnLocalSsrcUpdated(webrtc::FlexfecReceiveStream& stream, 298 uint32_t local_ssrc) override {} 299 300 void OnUpdateSyncGroup(webrtc::AudioReceiveStreamInterface& stream, 301 absl::string_view sync_group) override {} 302 303 void OnSentPacket(const webrtc::SentPacketInfo& sent_packet) override {} 304 305 void SetClientBitratePreferences( 306 const webrtc::BitrateSettings& preferences) override {} 307 308 void SetEncoderInfo(const webrtc::VideoEncoder::EncoderInfo& aInfo) { 309 mEncoderInfo = aInfo; 310 } 311 312 void SetPreferredRtcpCcAckType( 313 webrtc::RtcpFeedbackType preferred_rtcp_cc_ack_type) override {} 314 std::optional<int> FeedbackAccordingToRfc8888Count() override { return 0; } 315 std::optional<int> FeedbackAccordingToTransportCcCount() override { 316 return 0; 317 } 318 319 std::vector<webrtc::VideoStream> CreateEncoderStreams(int width, int height) { 320 mVideoSendEncoderConfig->video_stream_factory->SetEncoderInfo(mEncoderInfo); 321 return mVideoSendEncoderConfig->video_stream_factory->CreateEncoderStreams( 322 mUnusedConfig, width, height, *mVideoSendEncoderConfig); 323 } 324 325 virtual webrtc::TaskQueueBase* network_thread() const override { 326 return nullptr; 327 } 328 329 virtual webrtc::TaskQueueBase* worker_thread() const override { 330 return nullptr; 331 } 332 333 virtual ~MockCall() {}; 334 335 const RefPtr<MockCallWrapper> mCallWrapper; 336 mozilla::Maybe<webrtc::AudioReceiveStreamInterface::Config> 337 mAudioReceiveConfig; 338 mozilla::Maybe<webrtc::AudioSendStream::Config> mAudioSendConfig; 339 mozilla::Maybe<webrtc::VideoReceiveStreamInterface::Config> 340 mVideoReceiveConfig; 341 mozilla::Maybe<webrtc::VideoSendStream::Config> mVideoSendConfig; 342 mozilla::Maybe<webrtc::VideoEncoderConfig> mVideoSendEncoderConfig; 343 webrtc::Call::Stats mStats; 344 webrtc::MozTrialsConfig mUnusedConfig; 345 webrtc::VideoEncoder::EncoderInfo mEncoderInfo; 346 webrtc::DegradationPreference mConfiguredDegradationPreference; 347 }; 348 349 class MockCallWrapper : public mozilla::WebrtcCallWrapper { 350 public: 351 MockCallWrapper( 352 RefPtr<mozilla::SharedWebrtcState> aSharedState, 353 mozilla::UniquePtr<webrtc::VideoBitrateAllocatorFactory> 354 aVideoBitrateAllocatorFactory, 355 mozilla::UniquePtr<webrtc::RtcEventLog> aEventLog, 356 mozilla::UniquePtr<webrtc::TaskQueueFactory> aTaskQueueFactory, 357 const mozilla::dom::RTCStatsTimestampMaker& aTimestampMaker, 358 mozilla::UniquePtr<mozilla::media::ShutdownBlockingTicket> 359 aShutdownTicket) 360 : mozilla::WebrtcCallWrapper( 361 std::move(aSharedState), std::move(aVideoBitrateAllocatorFactory), 362 mozilla::WebrtcEnvironmentWrapper::Create(aTimestampMaker), 363 aTimestampMaker, std::move(aShutdownTicket)) {} 364 365 static RefPtr<MockCallWrapper> Create() { 366 auto state = mozilla::MakeRefPtr<mozilla::SharedWebrtcState>( 367 mozilla::AbstractThread::GetCurrent(), webrtc::AudioState::Config(), 368 nullptr, nullptr); 369 auto wrapper = mozilla::MakeRefPtr<MockCallWrapper>( 370 state, nullptr, nullptr, nullptr, 371 mozilla::dom::RTCStatsTimestampMaker::Create(), nullptr); 372 wrapper->SetCall(mozilla::WrapUnique(new MockCall(wrapper))); 373 return wrapper; 374 } 375 376 MockCall* GetMockCall() { return static_cast<MockCall*>(Call()); } 377 }; 378 379 } // namespace test 380 #endif