blob: 39a8f0134d63f42d82390cc9840e98e7734024b7 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellanderb24317b2016-02-10 07:54:43 -08002 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
kjellanderb24317b2016-02-10 07:54:43 -08004 * 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.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
11// This file contains mock implementations of observers used in PeerConnection.
12
Henrik Kjellander15583c12016-02-10 10:53:12 +010013#ifndef WEBRTC_API_TEST_MOCKPEERCONNECTIONOBSERVERS_H_
14#define WEBRTC_API_TEST_MOCKPEERCONNECTIONOBSERVERS_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000015
kwibergd1fe2812016-04-27 06:47:29 -070016#include <memory>
henrike@webrtc.org28e20752013-07-10 00:45:36 +000017#include <string>
18
Henrik Kjellander15583c12016-02-10 10:53:12 +010019#include "webrtc/api/datachannelinterface.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000020
21namespace webrtc {
22
23class MockCreateSessionDescriptionObserver
24 : public webrtc::CreateSessionDescriptionObserver {
25 public:
26 MockCreateSessionDescriptionObserver()
27 : called_(false),
28 result_(false) {}
29 virtual ~MockCreateSessionDescriptionObserver() {}
30 virtual void OnSuccess(SessionDescriptionInterface* desc) {
31 called_ = true;
32 result_ = true;
33 desc_.reset(desc);
34 }
35 virtual void OnFailure(const std::string& error) {
36 called_ = true;
37 result_ = false;
38 }
39 bool called() const { return called_; }
40 bool result() const { return result_; }
41 SessionDescriptionInterface* release_desc() {
42 return desc_.release();
43 }
44
45 private:
46 bool called_;
47 bool result_;
kwibergd1fe2812016-04-27 06:47:29 -070048 std::unique_ptr<SessionDescriptionInterface> desc_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000049};
50
51class MockSetSessionDescriptionObserver
52 : public webrtc::SetSessionDescriptionObserver {
53 public:
54 MockSetSessionDescriptionObserver()
55 : called_(false),
56 result_(false) {}
57 virtual ~MockSetSessionDescriptionObserver() {}
58 virtual void OnSuccess() {
59 called_ = true;
60 result_ = true;
61 }
62 virtual void OnFailure(const std::string& error) {
63 called_ = true;
64 result_ = false;
65 }
66 bool called() const { return called_; }
67 bool result() const { return result_; }
68
69 private:
70 bool called_;
71 bool result_;
72};
73
74class MockDataChannelObserver : public webrtc::DataChannelObserver {
75 public:
76 explicit MockDataChannelObserver(webrtc::DataChannelInterface* channel)
jiayl@webrtc.org1a6c6282014-06-12 21:59:29 +000077 : channel_(channel), received_message_count_(0) {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000078 channel_->RegisterObserver(this);
79 state_ = channel_->state();
80 }
81 virtual ~MockDataChannelObserver() {
82 channel_->UnregisterObserver();
83 }
84
Peter Boström0c4e06b2015-10-07 12:23:21 +020085 void OnBufferedAmountChange(uint64_t previous_amount) override {}
bemasc0edd50c2015-07-01 13:34:33 -070086
87 void OnStateChange() override { state_ = channel_->state(); }
88 void OnMessage(const DataBuffer& buffer) override {
Karl Wiberg94784372015-04-20 14:03:07 +020089 last_message_.assign(buffer.data.data<char>(), buffer.data.size());
jiayl@webrtc.org1a6c6282014-06-12 21:59:29 +000090 ++received_message_count_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000091 }
92
93 bool IsOpen() const { return state_ == DataChannelInterface::kOpen; }
94 const std::string& last_message() const { return last_message_; }
jiayl@webrtc.org1a6c6282014-06-12 21:59:29 +000095 size_t received_message_count() const { return received_message_count_; }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000096
97 private:
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000098 rtc::scoped_refptr<webrtc::DataChannelInterface> channel_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000099 DataChannelInterface::DataState state_;
100 std::string last_message_;
jiayl@webrtc.org1a6c6282014-06-12 21:59:29 +0000101 size_t received_message_count_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000102};
103
104class MockStatsObserver : public webrtc::StatsObserver {
105 public:
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000106 MockStatsObserver() : called_(false), stats_() {}
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000107 virtual ~MockStatsObserver() {}
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000108
tommi@webrtc.org5b06b062014-08-15 08:38:30 +0000109 virtual void OnComplete(const StatsReports& reports) {
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000110 ASSERT(!called_);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000111 called_ = true;
pthatcher@webrtc.org7bea1ff2015-03-04 01:38:30 +0000112 stats_.Clear();
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000113 stats_.number_of_reports = reports.size();
114 for (const auto* r : reports) {
tommi@webrtc.org4fb7e252015-01-21 11:36:18 +0000115 if (r->type() == StatsReport::kStatsReportTypeSsrc) {
jbauchbe24c942015-06-22 15:06:43 -0700116 stats_.timestamp = r->timestamp();
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000117 GetIntValue(r, StatsReport::kStatsValueNameAudioOutputLevel,
118 &stats_.audio_output_level);
119 GetIntValue(r, StatsReport::kStatsValueNameAudioInputLevel,
120 &stats_.audio_input_level);
121 GetIntValue(r, StatsReport::kStatsValueNameBytesReceived,
122 &stats_.bytes_received);
123 GetIntValue(r, StatsReport::kStatsValueNameBytesSent,
124 &stats_.bytes_sent);
tommi@webrtc.org4fb7e252015-01-21 11:36:18 +0000125 } else if (r->type() == StatsReport::kStatsReportTypeBwe) {
jbauchbe24c942015-06-22 15:06:43 -0700126 stats_.timestamp = r->timestamp();
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000127 GetIntValue(r, StatsReport::kStatsValueNameAvailableReceiveBandwidth,
128 &stats_.available_receive_bandwidth);
pthatcher@webrtc.org7bea1ff2015-03-04 01:38:30 +0000129 } else if (r->type() == StatsReport::kStatsReportTypeComponent) {
jbauchbe24c942015-06-22 15:06:43 -0700130 stats_.timestamp = r->timestamp();
pthatcher@webrtc.org7bea1ff2015-03-04 01:38:30 +0000131 GetStringValue(r, StatsReport::kStatsValueNameDtlsCipher,
132 &stats_.dtls_cipher);
133 GetStringValue(r, StatsReport::kStatsValueNameSrtpCipher,
134 &stats_.srtp_cipher);
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000135 }
136 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000137 }
138
139 bool called() const { return called_; }
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000140 size_t number_of_reports() const { return stats_.number_of_reports; }
jbauchbe24c942015-06-22 15:06:43 -0700141 double timestamp() const { return stats_.timestamp; }
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000142
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000143 int AudioOutputLevel() const {
144 ASSERT(called_);
145 return stats_.audio_output_level;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000146 }
147
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000148 int AudioInputLevel() const {
149 ASSERT(called_);
150 return stats_.audio_input_level;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000151 }
152
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000153 int BytesReceived() const {
154 ASSERT(called_);
155 return stats_.bytes_received;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000156 }
157
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000158 int BytesSent() const {
159 ASSERT(called_);
160 return stats_.bytes_sent;
buildbot@webrtc.orgb4c7b092014-08-25 12:11:58 +0000161 }
162
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000163 int AvailableReceiveBandwidth() const {
164 ASSERT(called_);
165 return stats_.available_receive_bandwidth;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000166 }
167
pthatcher@webrtc.org7bea1ff2015-03-04 01:38:30 +0000168 std::string DtlsCipher() const {
169 ASSERT(called_);
170 return stats_.dtls_cipher;
171 }
172
173 std::string SrtpCipher() const {
174 ASSERT(called_);
175 return stats_.srtp_cipher;
176 }
177
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000178 private:
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000179 bool GetIntValue(const StatsReport* report,
180 StatsReport::StatsValueName name,
181 int* value) {
tommi@webrtc.org92f40182015-03-04 15:25:19 +0000182 const StatsReport::Value* v = report->FindValue(name);
183 if (v) {
184 // TODO(tommi): We should really just be using an int here :-/
185 *value = rtc::FromString<int>(v->ToString());
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000186 }
tommi@webrtc.org92f40182015-03-04 15:25:19 +0000187 return v != nullptr;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000188 }
tommi@webrtc.org92f40182015-03-04 15:25:19 +0000189
pthatcher@webrtc.org7bea1ff2015-03-04 01:38:30 +0000190 bool GetStringValue(const StatsReport* report,
191 StatsReport::StatsValueName name,
192 std::string* value) {
tommi@webrtc.org92f40182015-03-04 15:25:19 +0000193 const StatsReport::Value* v = report->FindValue(name);
194 if (v)
195 *value = v->ToString();
196 return v != nullptr;
pthatcher@webrtc.org7bea1ff2015-03-04 01:38:30 +0000197 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000198
199 bool called_;
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000200 struct {
pthatcher@webrtc.org7bea1ff2015-03-04 01:38:30 +0000201 void Clear() {
202 number_of_reports = 0;
jbauchbe24c942015-06-22 15:06:43 -0700203 timestamp = 0;
pthatcher@webrtc.org7bea1ff2015-03-04 01:38:30 +0000204 audio_output_level = 0;
205 audio_input_level = 0;
206 bytes_received = 0;
207 bytes_sent = 0;
208 available_receive_bandwidth = 0;
209 dtls_cipher.clear();
210 srtp_cipher.clear();
211 }
212
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000213 size_t number_of_reports;
jbauchbe24c942015-06-22 15:06:43 -0700214 double timestamp;
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000215 int audio_output_level;
216 int audio_input_level;
217 int bytes_received;
218 int bytes_sent;
219 int available_receive_bandwidth;
pthatcher@webrtc.org7bea1ff2015-03-04 01:38:30 +0000220 std::string dtls_cipher;
221 std::string srtp_cipher;
tommi@webrtc.org209df9b2014-12-17 14:09:05 +0000222 } stats_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000223};
224
225} // namespace webrtc
226
Henrik Kjellander15583c12016-02-10 10:53:12 +0100227#endif // WEBRTC_API_TEST_MOCKPEERCONNECTIONOBSERVERS_H_