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

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

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

Powered by Google App Engine
This is Rietveld 408576698