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

Side by Side Diff: webrtc/api/proxy_unittest.cc

Issue 2514883002: Create //webrtc/api:libjingle_peerconnection_api + refactorings. (Closed)
Patch Set: Rebase Created 3 years, 11 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
« no previous file with comments | « webrtc/api/peerconnectioninterface_unittest.cc ('k') | webrtc/api/quicdatachannel.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2013 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 "webrtc/api/proxy.h"
12
13 #include <memory>
14 #include <string>
15
16 #include "webrtc/base/gunit.h"
17 #include "webrtc/base/refcount.h"
18 #include "webrtc/base/thread.h"
19 #include "webrtc/test/gmock.h"
20
21 using ::testing::_;
22 using ::testing::DoAll;
23 using ::testing::Exactly;
24 using ::testing::InvokeWithoutArgs;
25 using ::testing::Return;
26
27 namespace webrtc {
28
29 // Interface used for testing here.
30 class FakeInterface : public rtc::RefCountInterface {
31 public:
32 virtual void VoidMethod0() = 0;
33 virtual std::string Method0() = 0;
34 virtual std::string ConstMethod0() const = 0;
35 virtual std::string Method1(std::string s) = 0;
36 virtual std::string ConstMethod1(std::string s) const = 0;
37 virtual std::string Method2(std::string s1, std::string s2) = 0;
38
39 protected:
40 virtual ~FakeInterface() {}
41 };
42
43 // Implementation of the test interface.
44 class Fake : public FakeInterface {
45 public:
46 static rtc::scoped_refptr<Fake> Create() {
47 return new rtc::RefCountedObject<Fake>();
48 }
49 // Used to verify destructor is called on the correct thread.
50 MOCK_METHOD0(Destroy, void());
51
52 MOCK_METHOD0(VoidMethod0, void());
53 MOCK_METHOD0(Method0, std::string());
54 MOCK_CONST_METHOD0(ConstMethod0, std::string());
55
56 MOCK_METHOD1(Method1, std::string(std::string));
57 MOCK_CONST_METHOD1(ConstMethod1, std::string(std::string));
58
59 MOCK_METHOD2(Method2, std::string(std::string, std::string));
60
61 protected:
62 Fake() {}
63 ~Fake() { Destroy(); }
64 };
65
66 // Proxies for the test interface.
67 BEGIN_PROXY_MAP(Fake)
68 PROXY_WORKER_THREAD_DESTRUCTOR()
69 PROXY_METHOD0(void, VoidMethod0)
70 PROXY_METHOD0(std::string, Method0)
71 PROXY_CONSTMETHOD0(std::string, ConstMethod0)
72 PROXY_WORKER_METHOD1(std::string, Method1, std::string)
73 PROXY_CONSTMETHOD1(std::string, ConstMethod1, std::string)
74 PROXY_WORKER_METHOD2(std::string, Method2, std::string, std::string)
75 END_PROXY_MAP()
76
77 // Preprocessor hack to get a proxy class a name different than FakeProxy.
78 #define FakeProxy FakeSignalingProxy
79 #define FakeProxyWithInternal FakeSignalingProxyWithInternal
80 BEGIN_SIGNALING_PROXY_MAP(Fake)
81 PROXY_SIGNALING_THREAD_DESTRUCTOR()
82 PROXY_METHOD0(void, VoidMethod0)
83 PROXY_METHOD0(std::string, Method0)
84 PROXY_CONSTMETHOD0(std::string, ConstMethod0)
85 PROXY_METHOD1(std::string, Method1, std::string)
86 PROXY_CONSTMETHOD1(std::string, ConstMethod1, std::string)
87 PROXY_METHOD2(std::string, Method2, std::string, std::string)
88 END_PROXY_MAP()
89 #undef FakeProxy
90
91 class SignalingProxyTest : public testing::Test {
92 public:
93 // Checks that the functions are called on the right thread.
94 void CheckSignalingThread() { EXPECT_TRUE(signaling_thread_->IsCurrent()); }
95
96 protected:
97 void SetUp() override {
98 signaling_thread_.reset(new rtc::Thread());
99 ASSERT_TRUE(signaling_thread_->Start());
100 fake_ = Fake::Create();
101 fake_signaling_proxy_ =
102 FakeSignalingProxy::Create(signaling_thread_.get(), fake_.get());
103 }
104
105 protected:
106 std::unique_ptr<rtc::Thread> signaling_thread_;
107 rtc::scoped_refptr<FakeInterface> fake_signaling_proxy_;
108 rtc::scoped_refptr<Fake> fake_;
109 };
110
111 TEST_F(SignalingProxyTest, SignalingThreadDestructor) {
112 EXPECT_CALL(*fake_, Destroy())
113 .Times(Exactly(1))
114 .WillOnce(
115 InvokeWithoutArgs(this, &SignalingProxyTest::CheckSignalingThread));
116 fake_ = nullptr;
117 fake_signaling_proxy_ = nullptr;
118 }
119
120 TEST_F(SignalingProxyTest, VoidMethod0) {
121 EXPECT_CALL(*fake_, VoidMethod0())
122 .Times(Exactly(1))
123 .WillOnce(
124 InvokeWithoutArgs(this, &SignalingProxyTest::CheckSignalingThread));
125 fake_signaling_proxy_->VoidMethod0();
126 }
127
128 TEST_F(SignalingProxyTest, Method0) {
129 EXPECT_CALL(*fake_, Method0())
130 .Times(Exactly(1))
131 .WillOnce(DoAll(
132 InvokeWithoutArgs(this, &SignalingProxyTest::CheckSignalingThread),
133 Return("Method0")));
134 EXPECT_EQ("Method0", fake_signaling_proxy_->Method0());
135 }
136
137 TEST_F(SignalingProxyTest, ConstMethod0) {
138 EXPECT_CALL(*fake_, ConstMethod0())
139 .Times(Exactly(1))
140 .WillOnce(DoAll(
141 InvokeWithoutArgs(this, &SignalingProxyTest::CheckSignalingThread),
142 Return("ConstMethod0")));
143 EXPECT_EQ("ConstMethod0", fake_signaling_proxy_->ConstMethod0());
144 }
145
146 TEST_F(SignalingProxyTest, Method1) {
147 const std::string arg1 = "arg1";
148 EXPECT_CALL(*fake_, Method1(arg1))
149 .Times(Exactly(1))
150 .WillOnce(DoAll(
151 InvokeWithoutArgs(this, &SignalingProxyTest::CheckSignalingThread),
152 Return("Method1")));
153 EXPECT_EQ("Method1", fake_signaling_proxy_->Method1(arg1));
154 }
155
156 TEST_F(SignalingProxyTest, ConstMethod1) {
157 const std::string arg1 = "arg1";
158 EXPECT_CALL(*fake_, ConstMethod1(arg1))
159 .Times(Exactly(1))
160 .WillOnce(DoAll(
161 InvokeWithoutArgs(this, &SignalingProxyTest::CheckSignalingThread),
162 Return("ConstMethod1")));
163 EXPECT_EQ("ConstMethod1", fake_signaling_proxy_->ConstMethod1(arg1));
164 }
165
166 TEST_F(SignalingProxyTest, Method2) {
167 const std::string arg1 = "arg1";
168 const std::string arg2 = "arg2";
169 EXPECT_CALL(*fake_, Method2(arg1, arg2))
170 .Times(Exactly(1))
171 .WillOnce(DoAll(
172 InvokeWithoutArgs(this, &SignalingProxyTest::CheckSignalingThread),
173 Return("Method2")));
174 EXPECT_EQ("Method2", fake_signaling_proxy_->Method2(arg1, arg2));
175 }
176
177 class ProxyTest : public testing::Test {
178 public:
179 // Checks that the functions are called on the right thread.
180 void CheckSignalingThread() { EXPECT_TRUE(signaling_thread_->IsCurrent()); }
181 void CheckWorkerThread() { EXPECT_TRUE(worker_thread_->IsCurrent()); }
182
183 protected:
184 void SetUp() override {
185 signaling_thread_.reset(new rtc::Thread());
186 worker_thread_.reset(new rtc::Thread());
187 ASSERT_TRUE(signaling_thread_->Start());
188 ASSERT_TRUE(worker_thread_->Start());
189 fake_ = Fake::Create();
190 fake_proxy_ = FakeProxy::Create(signaling_thread_.get(),
191 worker_thread_.get(), fake_.get());
192 }
193
194 protected:
195 std::unique_ptr<rtc::Thread> signaling_thread_;
196 std::unique_ptr<rtc::Thread> worker_thread_;
197 rtc::scoped_refptr<FakeInterface> fake_proxy_;
198 rtc::scoped_refptr<Fake> fake_;
199 };
200
201 TEST_F(ProxyTest, WorkerThreadDestructor) {
202 EXPECT_CALL(*fake_, Destroy())
203 .Times(Exactly(1))
204 .WillOnce(InvokeWithoutArgs(this, &ProxyTest::CheckWorkerThread));
205 fake_ = nullptr;
206 fake_proxy_ = nullptr;
207 }
208
209 TEST_F(ProxyTest, VoidMethod0) {
210 EXPECT_CALL(*fake_, VoidMethod0())
211 .Times(Exactly(1))
212 .WillOnce(InvokeWithoutArgs(this, &ProxyTest::CheckSignalingThread));
213 fake_proxy_->VoidMethod0();
214 }
215
216 TEST_F(ProxyTest, Method0) {
217 EXPECT_CALL(*fake_, Method0())
218 .Times(Exactly(1))
219 .WillOnce(
220 DoAll(InvokeWithoutArgs(this, &ProxyTest::CheckSignalingThread),
221 Return("Method0")));
222 EXPECT_EQ("Method0",
223 fake_proxy_->Method0());
224 }
225
226 TEST_F(ProxyTest, ConstMethod0) {
227 EXPECT_CALL(*fake_, ConstMethod0())
228 .Times(Exactly(1))
229 .WillOnce(
230 DoAll(InvokeWithoutArgs(this, &ProxyTest::CheckSignalingThread),
231 Return("ConstMethod0")));
232 EXPECT_EQ("ConstMethod0",
233 fake_proxy_->ConstMethod0());
234 }
235
236 TEST_F(ProxyTest, WorkerMethod1) {
237 const std::string arg1 = "arg1";
238 EXPECT_CALL(*fake_, Method1(arg1))
239 .Times(Exactly(1))
240 .WillOnce(DoAll(InvokeWithoutArgs(this, &ProxyTest::CheckWorkerThread),
241 Return("Method1")));
242 EXPECT_EQ("Method1", fake_proxy_->Method1(arg1));
243 }
244
245 TEST_F(ProxyTest, ConstMethod1) {
246 const std::string arg1 = "arg1";
247 EXPECT_CALL(*fake_, ConstMethod1(arg1))
248 .Times(Exactly(1))
249 .WillOnce(
250 DoAll(InvokeWithoutArgs(this, &ProxyTest::CheckSignalingThread),
251 Return("ConstMethod1")));
252 EXPECT_EQ("ConstMethod1", fake_proxy_->ConstMethod1(arg1));
253 }
254
255 TEST_F(ProxyTest, WorkerMethod2) {
256 const std::string arg1 = "arg1";
257 const std::string arg2 = "arg2";
258 EXPECT_CALL(*fake_, Method2(arg1, arg2))
259 .Times(Exactly(1))
260 .WillOnce(DoAll(InvokeWithoutArgs(this, &ProxyTest::CheckWorkerThread),
261 Return("Method2")));
262 EXPECT_EQ("Method2", fake_proxy_->Method2(arg1, arg2));
263 }
264
265 // Interface for testing OWNED_PROXY_MAP.
266 class FooInterface {
267 public:
268 virtual ~FooInterface() {}
269 virtual void Bar() = 0;
270 };
271
272 class Foo : public FooInterface {
273 public:
274 Foo() {}
275 MOCK_METHOD0(Bar, void());
276 };
277
278 BEGIN_OWNED_PROXY_MAP(Foo)
279 PROXY_SIGNALING_THREAD_DESTRUCTOR()
280 PROXY_METHOD0(void, Bar)
281 END_PROXY_MAP()
282
283 class OwnedProxyTest : public testing::Test {
284 public:
285 OwnedProxyTest()
286 : foo_(new Foo()),
287 foo_proxy_(
288 FooProxy::Create(&signaling_thread_, &worker_thread_, foo_)) {
289 signaling_thread_.Start();
290 worker_thread_.Start();
291 }
292
293 void CheckSignalingThread() { EXPECT_TRUE(signaling_thread_.IsCurrent()); }
294 void CheckWorkerThread() { EXPECT_TRUE(worker_thread_.IsCurrent()); }
295
296 protected:
297 rtc::Thread signaling_thread_;
298 rtc::Thread worker_thread_;
299 Foo* foo_; // Owned by foo_proxy_, not this class.
300 std::unique_ptr<FooInterface> foo_proxy_;
301 };
302
303 // Just tests that a method can be invoked using an "owned proxy" (as opposed
304 // to normal ref-counted version).
305 TEST_F(OwnedProxyTest, BasicTest) {
306 EXPECT_CALL(*foo_, Bar())
307 .Times(Exactly(1))
308 .WillOnce(InvokeWithoutArgs(this, &OwnedProxyTest::CheckSignalingThread));
309 foo_proxy_->Bar();
310 }
311
312 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/peerconnectioninterface_unittest.cc ('k') | webrtc/api/quicdatachannel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698