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

Side by Side Diff: services/device/wake_lock/wake_lock_service_impl_unittest.cc

Issue 2883903002: Add service unittest for WakeLockServiceImpl. (Closed)
Patch Set: Rename Fake* to *ForTesting Created 3 years, 6 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 | « services/device/wake_lock/OWNERS ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/run_loop.h"
6 #include "device/wake_lock/public/interfaces/wake_lock_context.mojom.h"
7 #include "device/wake_lock/public/interfaces/wake_lock_provider.mojom.h"
8 #include "device/wake_lock/public/interfaces/wake_lock_service.mojom.h"
9 #include "device/wake_lock/wake_lock_provider.h"
10 #include "mojo/public/cpp/bindings/interface_ptr.h"
11 #include "services/device/device_service_test_base.h"
12 #include "services/device/public/interfaces/constants.mojom.h"
13
14 namespace device {
15
16 namespace {
17
18 class WakeLockServiceImplTest : public DeviceServiceTestBase {
19 public:
20 WakeLockServiceImplTest() = default;
21 ~WakeLockServiceImplTest() override = default;
22
23 protected:
24 void SetUp() override {
25 DeviceServiceTestBase::SetUp();
26 connector()->BindInterface(mojom::kServiceName, &wake_lock_provider_);
27
28 WakeLockProvider::is_in_service_unittest_ = true;
29 wake_lock_provider_->GetWakeLockWithoutContext(
30 device::mojom::WakeLockType::PreventAppSuspension,
31 device::mojom::WakeLockReason::ReasonOther, "WakeLockServiceImplTest",
32 mojo::MakeRequest(&wake_lock_));
33 }
34
35 void OnHasWakeLock(base::Closure quit_closure, bool has_wakelock) {
36 has_wakelock_ = has_wakelock;
37 quit_closure.Run();
38 }
39
40 bool HasWakeLock() {
41 has_wakelock_ = false;
42
43 base::RunLoop run_loop;
44 wake_lock_->HasWakeLockForTests(
45 base::Bind(&WakeLockServiceImplTest::OnHasWakeLock,
46 base::Unretained(this), run_loop.QuitClosure()));
47 run_loop.Run();
48
49 return has_wakelock_;
50 }
51
52 bool has_wakelock_;
53
54 mojom::WakeLockProviderPtr wake_lock_provider_;
55 mojom::WakeLockServicePtr wake_lock_;
56
57 DISALLOW_COPY_AND_ASSIGN(WakeLockServiceImplTest);
58 };
59
60 // Request a wake lock, then cancel.
61 TEST_F(WakeLockServiceImplTest, RequestThenCancel) {
62 EXPECT_FALSE(HasWakeLock());
63
64 wake_lock_->RequestWakeLock();
65 EXPECT_TRUE(HasWakeLock());
66
67 wake_lock_->CancelWakeLock();
68 EXPECT_FALSE(HasWakeLock());
69 }
70
71 // Cancel a wake lock first, which should have no effect.
72 TEST_F(WakeLockServiceImplTest, CancelThenRequest) {
73 EXPECT_FALSE(HasWakeLock());
74
75 wake_lock_->CancelWakeLock();
76 EXPECT_FALSE(HasWakeLock());
77
78 wake_lock_->RequestWakeLock();
79 EXPECT_TRUE(HasWakeLock());
80
81 wake_lock_->CancelWakeLock();
82 EXPECT_FALSE(HasWakeLock());
83 }
84
85 // Send multiple requests, which should be coalesced as one request.
86 TEST_F(WakeLockServiceImplTest, MultipleRequests) {
87 EXPECT_FALSE(HasWakeLock());
88
89 wake_lock_->RequestWakeLock();
90 wake_lock_->RequestWakeLock();
91 wake_lock_->RequestWakeLock();
92 EXPECT_TRUE(HasWakeLock());
93
94 wake_lock_->CancelWakeLock();
95 EXPECT_FALSE(HasWakeLock());
96 }
97
98 // WakeLockProvider connection broken doesn't affect WakeLockService.
99 TEST_F(WakeLockServiceImplTest, OnWakeLockProviderConnectionError) {
100 EXPECT_FALSE(HasWakeLock());
101
102 wake_lock_->RequestWakeLock();
103 EXPECT_TRUE(HasWakeLock());
104
105 wake_lock_provider_.reset();
106 base::RunLoop().RunUntilIdle();
107
108 EXPECT_TRUE(HasWakeLock());
109 wake_lock_->CancelWakeLock();
110 EXPECT_FALSE(HasWakeLock());
111 }
112
113 // One WakeLockService instance can serve multiple clients at same time.
114 TEST_F(WakeLockServiceImplTest, MultipleClients) {
115 EXPECT_FALSE(HasWakeLock());
116
117 mojom::WakeLockServicePtr wake_lock_1;
118 mojom::WakeLockServicePtr wake_lock_2;
119 mojom::WakeLockServicePtr wake_lock_3;
120 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_1));
121 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_2));
122 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_3));
123
124 EXPECT_FALSE(HasWakeLock());
125
126 wake_lock_1->RequestWakeLock();
127 wake_lock_2->RequestWakeLock();
128 wake_lock_3->RequestWakeLock();
129 EXPECT_TRUE(HasWakeLock());
130
131 wake_lock_1->CancelWakeLock();
132 wake_lock_2->CancelWakeLock();
133 EXPECT_TRUE(HasWakeLock());
134
135 wake_lock_3->CancelWakeLock();
136 EXPECT_FALSE(HasWakeLock());
137 }
138
139 // WakeLockService should update the wake lock status correctly when
140 // connection error happens.
141 TEST_F(WakeLockServiceImplTest, OnWakeLockConnectionError) {
142 EXPECT_FALSE(HasWakeLock());
143
144 mojom::WakeLockServicePtr wake_lock_1;
145 mojom::WakeLockServicePtr wake_lock_2;
146 mojom::WakeLockServicePtr wake_lock_3;
147 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_1));
148 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_2));
149 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_3));
150
151 EXPECT_FALSE(HasWakeLock());
152
153 wake_lock_1->RequestWakeLock();
154 wake_lock_2->RequestWakeLock();
155 wake_lock_3->RequestWakeLock();
156 EXPECT_TRUE(HasWakeLock());
157
158 wake_lock_1.reset();
159 base::RunLoop().RunUntilIdle();
160 EXPECT_TRUE(HasWakeLock());
161
162 wake_lock_2.reset();
163 wake_lock_3.reset();
164 base::RunLoop().RunUntilIdle();
165 EXPECT_FALSE(HasWakeLock());
166 }
167
168 // Test mixed operations.
169 TEST_F(WakeLockServiceImplTest, MixedTest) {
170 EXPECT_FALSE(HasWakeLock());
171
172 mojom::WakeLockServicePtr wake_lock_1;
173 mojom::WakeLockServicePtr wake_lock_2;
174 mojom::WakeLockServicePtr wake_lock_3;
175 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_1));
176 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_2));
177 wake_lock_->AddClient(mojo::MakeRequest(&wake_lock_3));
178
179 EXPECT_FALSE(HasWakeLock());
180
181 // Execute a series of calls that should result in |wake_lock_1| and
182 // |wake_lock_3| having outstanding wake lock requests.
183 wake_lock_1->RequestWakeLock();
184 wake_lock_1->CancelWakeLock();
185 wake_lock_2->RequestWakeLock();
186 wake_lock_1->RequestWakeLock();
187 wake_lock_1->RequestWakeLock();
188 wake_lock_3->CancelWakeLock();
189 wake_lock_3->CancelWakeLock();
190 wake_lock_2->CancelWakeLock();
191 wake_lock_3->RequestWakeLock();
192 wake_lock_2.reset();
193 EXPECT_TRUE(HasWakeLock());
194
195 wake_lock_1.reset();
196 base::RunLoop().RunUntilIdle();
197 EXPECT_TRUE(HasWakeLock());
198
199 wake_lock_3->CancelWakeLock();
200 EXPECT_FALSE(HasWakeLock());
201 }
202
203 } // namespace
204
205 } // namespace device
OLDNEW
« no previous file with comments | « services/device/wake_lock/OWNERS ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698