1 /*
2  *  Copyright (c) 2015 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 #ifndef AUDIO_MOCK_VOE_CHANNEL_PROXY_H_
12 #define AUDIO_MOCK_VOE_CHANNEL_PROXY_H_
13 
14 #include <map>
15 #include <memory>
16 #include <string>
17 #include <utility>
18 #include <vector>
19 
20 #include "api/test/mock_frame_encryptor.h"
21 #include "audio/channel_receive.h"
22 #include "audio/channel_send.h"
23 #include "modules/rtp_rtcp/source/rtp_packet_received.h"
24 #include "test/gmock.h"
25 
26 namespace webrtc {
27 namespace test {
28 
29 class MockChannelReceive : public voe::ChannelReceiveInterface {
30  public:
31   MOCK_METHOD2(SetNACKStatus, void(bool enable, int max_packets));
32   MOCK_METHOD1(RegisterReceiverCongestionControlObjects,
33                void(PacketRouter* packet_router));
34   MOCK_METHOD0(ResetReceiverCongestionControlObjects, void());
35   MOCK_CONST_METHOD0(GetRTCPStatistics, CallReceiveStatistics());
36   MOCK_CONST_METHOD0(GetNetworkStatistics, NetworkStatistics());
37   MOCK_CONST_METHOD0(GetDecodingCallStatistics, AudioDecodingCallStats());
38   MOCK_CONST_METHOD0(GetSpeechOutputLevelFullRange, int());
39   MOCK_CONST_METHOD0(GetTotalOutputEnergy, double());
40   MOCK_CONST_METHOD0(GetTotalOutputDuration, double());
41   MOCK_CONST_METHOD0(GetDelayEstimate, uint32_t());
42   MOCK_METHOD1(SetSink, void(AudioSinkInterface* sink));
43   MOCK_METHOD1(OnRtpPacket, void(const RtpPacketReceived& packet));
44   MOCK_METHOD2(ReceivedRTCPPacket, void(const uint8_t* packet, size_t length));
45   MOCK_METHOD1(SetChannelOutputVolumeScaling, void(float scaling));
46   MOCK_METHOD2(GetAudioFrameWithInfo,
47                AudioMixer::Source::AudioFrameInfo(int sample_rate_hz,
48                                                   AudioFrame* audio_frame));
49   MOCK_CONST_METHOD0(PreferredSampleRate, int());
50   MOCK_METHOD1(SetAssociatedSendChannel,
51                void(const voe::ChannelSendInterface* send_channel));
52   MOCK_CONST_METHOD2(GetPlayoutRtpTimestamp,
53                      bool(uint32_t* rtp_timestamp, int64_t* time_ms));
54   MOCK_METHOD2(SetEstimatedPlayoutNtpTimestampMs,
55                void(int64_t ntp_timestamp_ms, int64_t time_ms));
56   MOCK_CONST_METHOD1(GetCurrentEstimatedPlayoutNtpTimestampMs,
57                      absl::optional<int64_t>(int64_t now_ms));
58   MOCK_CONST_METHOD0(GetSyncInfo, absl::optional<Syncable::Info>());
59   MOCK_METHOD1(SetMinimumPlayoutDelay, void(int delay_ms));
60   MOCK_METHOD1(SetBaseMinimumPlayoutDelayMs, bool(int delay_ms));
61   MOCK_CONST_METHOD0(GetBaseMinimumPlayoutDelayMs, int());
62   MOCK_CONST_METHOD0(GetReceiveCodec,
63                      absl::optional<std::pair<int, SdpAudioFormat>>());
64   MOCK_METHOD1(SetReceiveCodecs,
65                void(const std::map<int, SdpAudioFormat>& codecs));
66   MOCK_CONST_METHOD0(GetSources, std::vector<RtpSource>());
67   MOCK_METHOD0(StartPlayout, void());
68   MOCK_METHOD0(StopPlayout, void());
69   MOCK_METHOD1(SetDepacketizerToDecoderFrameTransformer,
70                void(rtc::scoped_refptr<webrtc::FrameTransformerInterface>
71                         frame_transformer));
72 };
73 
74 class MockChannelSend : public voe::ChannelSendInterface {
75  public:
76   // GMock doesn't like move-only types, like std::unique_ptr.
SetEncoder(int payload_type,std::unique_ptr<AudioEncoder> encoder)77   virtual void SetEncoder(int payload_type,
78                           std::unique_ptr<AudioEncoder> encoder) {
79     return SetEncoderForMock(payload_type, &encoder);
80   }
81   MOCK_METHOD2(SetEncoderForMock,
82                void(int payload_type, std::unique_ptr<AudioEncoder>* encoder));
83   MOCK_METHOD1(
84       ModifyEncoder,
85       void(rtc::FunctionView<void(std::unique_ptr<AudioEncoder>*)> modifier));
86   MOCK_METHOD1(CallEncoder,
87                void(rtc::FunctionView<void(AudioEncoder*)> modifier));
88   MOCK_METHOD1(SetRTCP_CNAME, void(absl::string_view c_name));
89   MOCK_METHOD2(SetSendAudioLevelIndicationStatus, void(bool enable, int id));
90   MOCK_METHOD2(RegisterSenderCongestionControlObjects,
91                void(RtpTransportControllerSendInterface* transport,
92                     RtcpBandwidthObserver* bandwidth_observer));
93   MOCK_METHOD0(ResetSenderCongestionControlObjects, void());
94   MOCK_CONST_METHOD0(GetRTCPStatistics, CallSendStatistics());
95   MOCK_CONST_METHOD0(GetRemoteRTCPReportBlocks, std::vector<ReportBlock>());
96   MOCK_CONST_METHOD0(GetANAStatistics, ANAStats());
97   MOCK_METHOD2(RegisterCngPayloadType,
98                void(int payload_type, int payload_frequency));
99   MOCK_METHOD2(SetSendTelephoneEventPayloadType,
100                void(int payload_type, int payload_frequency));
101   MOCK_METHOD2(SendTelephoneEventOutband, bool(int event, int duration_ms));
102   MOCK_METHOD1(OnBitrateAllocation, void(BitrateAllocationUpdate update));
103   MOCK_METHOD1(SetInputMute, void(bool muted));
104   MOCK_METHOD2(ReceivedRTCPPacket, void(const uint8_t* packet, size_t length));
105   // GMock doesn't like move-only types, like std::unique_ptr.
ProcessAndEncodeAudio(std::unique_ptr<AudioFrame> audio_frame)106   virtual void ProcessAndEncodeAudio(std::unique_ptr<AudioFrame> audio_frame) {
107     ProcessAndEncodeAudioForMock(&audio_frame);
108   }
109   MOCK_METHOD1(ProcessAndEncodeAudioForMock,
110                void(std::unique_ptr<AudioFrame>* audio_frame));
111   MOCK_METHOD1(SetTransportOverhead,
112                void(size_t transport_overhead_per_packet));
113   MOCK_CONST_METHOD0(GetRtpRtcp, RtpRtcp*());
114   MOCK_CONST_METHOD0(GetBitrate, int());
115   MOCK_METHOD1(OnTwccBasedUplinkPacketLossRate, void(float packet_loss_rate));
116   MOCK_METHOD1(OnRecoverableUplinkPacketLossRate,
117                void(float recoverable_packet_loss_rate));
118   MOCK_CONST_METHOD0(GetRTT, int64_t());
119   MOCK_METHOD0(StartSend, void());
120   MOCK_METHOD0(StopSend, void());
121   MOCK_METHOD1(
122       SetFrameEncryptor,
123       void(rtc::scoped_refptr<FrameEncryptorInterface> frame_encryptor));
124   MOCK_METHOD1(SetEncoderToPacketizerFrameTransformer,
125                void(rtc::scoped_refptr<webrtc::FrameTransformerInterface>
126                         frame_transformer));
127 };
128 }  // namespace test
129 }  // namespace webrtc
130 
131 #endif  // AUDIO_MOCK_VOE_CHANNEL_PROXY_H_
132