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

Side by Side Diff: build/android/pylib/device/battery_utils_test.py

Issue 1124763003: Update from https://crrev.com/327068 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: update nacl, buildtools, fix display_change_notifier_unittest Created 5 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 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """
7 Unit tests for the contents of battery_utils.py
8 """
9
10 # pylint: disable=W0613
11
12 import logging
13 import os
14 import sys
15 import unittest
16
17 from pylib import android_commands
18 from pylib import constants
19 from pylib.device import battery_utils
20 from pylib.device import device_errors
21 from pylib.device import device_utils
22 from pylib.device import device_utils_test
23 from pylib.utils import mock_calls
24
25 # RunCommand from third_party/android_testrunner/run_command.py is mocked
26 # below, so its path needs to be in sys.path.
27 sys.path.append(os.path.join(
28 constants.DIR_SOURCE_ROOT, 'third_party', 'android_testrunner'))
29
30 sys.path.append(os.path.join(
31 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock'))
32 import mock # pylint: disable=F0401
33
34 _DUMPSYS_OUTPUT = [
35 '9,0,i,uid,1000,test_package1',
36 '9,0,i,uid,1001,test_package2',
37 '9,1000,l,pwi,uid,1',
38 '9,1001,l,pwi,uid,2'
39 ]
40
41
42 class BatteryUtilsTest(mock_calls.TestCase):
43
44 def ShellError(self, output=None, status=1):
45 def action(cmd, *args, **kwargs):
46 raise device_errors.AdbShellCommandFailedError(
47 cmd, output, status, str(self.device))
48 if output is None:
49 output = 'Permission denied\n'
50 return action
51
52 def setUp(self):
53 self.adb = device_utils_test._AdbWrapperMock('0123456789abcdef')
54 self.device = device_utils.DeviceUtils(
55 self.adb, default_timeout=10, default_retries=0)
56 self.watchMethodCalls(self.call.adb, ignore=['GetDeviceSerial'])
57 self.battery = battery_utils.BatteryUtils(
58 self.device, default_timeout=10, default_retries=0)
59
60
61 class BatteryUtilsInitTest(unittest.TestCase):
62
63 def testInitWithDeviceUtil(self):
64 serial = '0fedcba987654321'
65 a = android_commands.AndroidCommands(device=serial)
66 d = device_utils.DeviceUtils(a)
67 b = battery_utils.BatteryUtils(d)
68 self.assertEqual(d, b._device)
69
70 def testInitWithMissing_fails(self):
71 with self.assertRaises(TypeError):
72 battery_utils.BatteryUtils(None)
73 with self.assertRaises(TypeError):
74 battery_utils.BatteryUtils('')
75
76
77 class BatteryUtilsSetChargingTest(BatteryUtilsTest):
78
79 @mock.patch('time.sleep', mock.Mock())
80 def testSetCharging_enabled(self):
81 with self.assertCalls(
82 (self.call.device.FileExists(mock.ANY), True),
83 (self.call.device.RunShellCommand(mock.ANY, check_return=True), []),
84 (self.call.battery.GetCharging(), False),
85 (self.call.device.RunShellCommand(mock.ANY, check_return=True), []),
86 (self.call.battery.GetCharging(), True)):
87 self.battery.SetCharging(True)
88
89 def testSetCharging_alreadyEnabled(self):
90 with self.assertCalls(
91 (self.call.device.FileExists(mock.ANY), True),
92 (self.call.device.RunShellCommand(mock.ANY, check_return=True), []),
93 (self.call.battery.GetCharging(), True)):
94 self.battery.SetCharging(True)
95
96 @mock.patch('time.sleep', mock.Mock())
97 def testSetCharging_disabled(self):
98 with self.assertCalls(
99 (self.call.device.FileExists(mock.ANY), True),
100 (self.call.device.RunShellCommand(mock.ANY, check_return=True), []),
101 (self.call.battery.GetCharging(), True),
102 (self.call.device.RunShellCommand(mock.ANY, check_return=True), []),
103 (self.call.battery.GetCharging(), False)):
104 self.battery.SetCharging(False)
105
106
107 class BatteryUtilsSetBatteryMeasurementTest(BatteryUtilsTest):
108
109 def testBatteryMeasurement(self):
110 with self.assertCalls(
111 (self.call.device.RunShellCommand(
112 mock.ANY, retries=0, single_line=True,
113 timeout=10, check_return=True), '22'),
114 (self.call.device.RunShellCommand(
115 ['dumpsys', 'battery', 'reset'], check_return=True), []),
116 (self.call.device.RunShellCommand(
117 ['dumpsys', 'batterystats', '--reset'], check_return=True), []),
118 (self.call.device.RunShellCommand(
119 ['dumpsys', 'batterystats', '--charged', '--checkin'],
120 check_return=True), []),
121 (self.call.device.RunShellCommand(
122 ['dumpsys', 'battery', 'set', 'ac', '0'], check_return=True), []),
123 (self.call.device.RunShellCommand(
124 ['dumpsys', 'battery', 'set', 'usb', '0'], check_return=True), []),
125 (self.call.battery.GetCharging(), False),
126 (self.call.device.RunShellCommand(
127 ['dumpsys', 'battery', 'reset'], check_return=True), []),
128 (self.call.battery.GetCharging(), True)):
129 with self.battery.BatteryMeasurement():
130 pass
131
132
133 class BatteryUtilsGetPowerData(BatteryUtilsTest):
134
135 def testGetPowerData(self):
136 with self.assertCalls(
137 (self.call.device.RunShellCommand(
138 ['dumpsys', 'batterystats', '-c'], check_return=True),
139 _DUMPSYS_OUTPUT)):
140 data = self.battery.GetPowerData()
141 check = {
142 'test_package1': {'uid': '1000', 'data': [1.0]},
143 'test_package2': {'uid': '1001', 'data': [2.0]}
144 }
145 self.assertEqual(data, check)
146
147 def testGetPowerData_packageCollisionSame(self):
148 self.battery._cache['uids'] = {'test_package1': '1000'}
149 with self.assertCall(
150 self.call.device.RunShellCommand(
151 ['dumpsys', 'batterystats', '-c'], check_return=True),
152 _DUMPSYS_OUTPUT):
153 data = self.battery.GetPowerData()
154 check = {
155 'test_package1': {'uid': '1000', 'data': [1.0]},
156 'test_package2': {'uid': '1001', 'data': [2.0]}
157 }
158 self.assertEqual(data, check)
159
160 def testGetPowerData_packageCollisionDifferent(self):
161 self.battery._cache['uids'] = {'test_package1': '1'}
162 with self.assertCall(
163 self.call.device.RunShellCommand(
164 ['dumpsys', 'batterystats', '-c'], check_return=True),
165 _DUMPSYS_OUTPUT):
166 with self.assertRaises(device_errors.CommandFailedError):
167 self.battery.GetPowerData()
168
169 def testGetPowerData_cacheCleared(self):
170 with self.assertCalls(
171 (self.call.device.RunShellCommand(
172 ['dumpsys', 'batterystats', '-c'], check_return=True),
173 _DUMPSYS_OUTPUT)):
174 self.battery._cache.clear()
175 data = self.battery.GetPowerData()
176 check = {
177 'test_package1': {'uid': '1000', 'data': [1.0]},
178 'test_package2': {'uid': '1001', 'data': [2.0]}
179 }
180 self.assertEqual(data, check)
181
182 def testGetPackagePowerData(self):
183 with self.assertCalls(
184 (self.call.device.RunShellCommand(
185 ['dumpsys', 'batterystats', '-c'], check_return=True),
186 _DUMPSYS_OUTPUT)):
187 data = self.battery.GetPackagePowerData('test_package2')
188 self.assertEqual(data, {'uid': '1001', 'data': [2.0]})
189
190 def testGetPackagePowerData_badPackage(self):
191 with self.assertCalls(
192 (self.call.device.RunShellCommand(
193 ['dumpsys', 'batterystats', '-c'], check_return=True),
194 _DUMPSYS_OUTPUT)):
195 data = self.battery.GetPackagePowerData('not_a_package')
196 self.assertEqual(data, None)
197
198
199 class BatteryUtilsChargeDevice(BatteryUtilsTest):
200
201 @mock.patch('time.sleep', mock.Mock())
202 def testChargeDeviceToLevel(self):
203 with self.assertCalls(
204 (self.call.battery.SetCharging(True)),
205 (self.call.battery.GetBatteryInfo(), {'level': '50'}),
206 (self.call.battery.GetBatteryInfo(), {'level': '100'})):
207 self.battery.ChargeDeviceToLevel(95)
208
209
210 class DeviceUtilsGetBatteryInfoTest(BatteryUtilsTest):
211
212 def testGetBatteryInfo_normal(self):
213 with self.assertCall(
214 self.call.device.RunShellCommand(
215 ['dumpsys', 'battery'], check_return=True),
216 [
217 'Current Battery Service state:',
218 ' AC powered: false',
219 ' USB powered: true',
220 ' level: 100',
221 ' temperature: 321',
222 ]):
223 self.assertEquals(
224 {
225 'AC powered': 'false',
226 'USB powered': 'true',
227 'level': '100',
228 'temperature': '321',
229 },
230 self.battery.GetBatteryInfo())
231
232 def testGetBatteryInfo_nothing(self):
233 with self.assertCall(
234 self.call.device.RunShellCommand(
235 ['dumpsys', 'battery'], check_return=True), []):
236 self.assertEquals({}, self.battery.GetBatteryInfo())
237
238
239 class DeviceUtilsGetChargingTest(BatteryUtilsTest):
240
241 def testGetCharging_usb(self):
242 with self.assertCall(
243 self.call.battery.GetBatteryInfo(), {'USB powered': 'true'}):
244 self.assertTrue(self.battery.GetCharging())
245
246 def testGetCharging_usbFalse(self):
247 with self.assertCall(
248 self.call.battery.GetBatteryInfo(), {'USB powered': 'false'}):
249 self.assertFalse(self.battery.GetCharging())
250
251 def testGetCharging_ac(self):
252 with self.assertCall(
253 self.call.battery.GetBatteryInfo(), {'AC powered': 'true'}):
254 self.assertTrue(self.battery.GetCharging())
255
256 def testGetCharging_wireless(self):
257 with self.assertCall(
258 self.call.battery.GetBatteryInfo(), {'Wireless powered': 'true'}):
259 self.assertTrue(self.battery.GetCharging())
260
261 def testGetCharging_unknown(self):
262 with self.assertCall(
263 self.call.battery.GetBatteryInfo(), {'level': '42'}):
264 self.assertFalse(self.battery.GetCharging())
265
266
267 class DeviceUtilsGetNetworkDataTest(BatteryUtilsTest):
268
269 def testGetNetworkData_noDataUsage(self):
270 with self.assertCalls(
271 (self.call.device.RunShellCommand(
272 ['dumpsys', 'batterystats', '-c'], check_return=True),
273 _DUMPSYS_OUTPUT),
274 (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'),
275 self.ShellError()),
276 (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'),
277 self.ShellError())):
278 self.assertEquals(self.battery.GetNetworkData('test_package1'), (0, 0))
279
280 def testGetNetworkData_badPackage(self):
281 with self.assertCall(
282 self.call.device.RunShellCommand(
283 ['dumpsys', 'batterystats', '-c'], check_return=True),
284 _DUMPSYS_OUTPUT):
285 self.assertEqual(self.battery.GetNetworkData('asdf'), None)
286
287 def testGetNetworkData_packageNotCached(self):
288 with self.assertCalls(
289 (self.call.device.RunShellCommand(
290 ['dumpsys', 'batterystats', '-c'], check_return=True),
291 _DUMPSYS_OUTPUT),
292 (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'), 1),
293 (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'), 2)):
294 self.assertEqual(self.battery.GetNetworkData('test_package1'), (1,2))
295
296 def testGetNetworkData_packageCached(self):
297 self.battery._cache['uids'] = {'test_package1': '1000'}
298 with self.assertCalls(
299 (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'), 1),
300 (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'), 2)):
301 self.assertEqual(self.battery.GetNetworkData('test_package1'), (1,2))
302
303 def testGetNetworkData_clearedCache(self):
304 with self.assertCalls(
305 (self.call.device.RunShellCommand(
306 ['dumpsys', 'batterystats', '-c'], check_return=True),
307 _DUMPSYS_OUTPUT),
308 (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'), 1),
309 (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'), 2)):
310 self.battery._cache.clear()
311 self.assertEqual(self.battery.GetNetworkData('test_package1'), (1,2))
312
313
314 if __name__ == '__main__':
315 logging.getLogger().setLevel(logging.DEBUG)
316 unittest.main(verbosity=2)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698