Index: build/android/pylib/device/device_utils_test.py |
diff --git a/build/android/pylib/device/device_utils_test.py b/build/android/pylib/device/device_utils_test.py |
index 0aff7ec9358d84707a554abc0dc3ae29d29003d1..4c00e4941a8275a29afb78de6d1cfa17e58e4253 100644 |
--- a/build/android/pylib/device/device_utils_test.py |
+++ b/build/android/pylib/device/device_utils_test.py |
@@ -9,10 +9,13 @@ Unit tests for the contents of device_utils.py (mostly DeviceUtils). |
# pylint: disable=W0212 |
# pylint: disable=W0613 |
+import random |
import unittest |
+ |
from pylib import android_commands |
from pylib import cmd_helper |
from pylib.device import adb_wrapper |
+from pylib.device import device_errors |
from pylib.device import device_utils |
@@ -21,9 +24,10 @@ class DeviceUtilsTest(unittest.TestCase): |
pass |
def testRestartServerNotRunning(self): |
- # TODO(jbudorick) If these fail, it's not DeviceUtils's fault. |
- self.assertEqual(0, cmd_helper.RunCmd(['pkill', 'adb'])) |
- self.assertNotEqual(0, cmd_helper.RunCmd(['pgrep', 'adb'])) |
+ self.assertEqual(0, cmd_helper.RunCmd(['pkill', 'adb']), |
+ msg='Unable to kill adb during setup.') |
+ self.assertNotEqual(0, cmd_helper.RunCmd(['pgrep', 'adb']), |
+ msg='Unexpectedly found adb during setup.') |
device_utils.RestartServer() |
self.assertEqual(0, cmd_helper.RunCmd(['pgrep', 'adb'])) |
@@ -63,7 +67,83 @@ class DeviceUtilsTest(unittest.TestCase): |
d = device_utils.DeviceUtils(None) |
self.assertIsNone(d.old_interface.GetDevice()) |
+ @staticmethod |
+ def _getTestAdbWrapper(): |
+ devices = adb_wrapper.AdbWrapper.GetDevices() |
+ if devices: |
+ return random.choice(devices) |
+ return None |
+ |
+ @staticmethod |
+ def _getUnusedSerial(): |
+ used_devices = [str(d) for d in adb_wrapper.AdbWrapper.GetDevices()] |
+ while True: |
+ serial = '' |
+ for _ in xrange(0, 16): |
+ serial += random.choice('0123456789abcdef') |
+ if serial not in used_devices: |
+ return serial |
+ |
+ def testIsOnline(self): |
+ d = device_utils.DeviceUtils(self._getTestAdbWrapper()) |
+ self.assertTrue(d is None or d.IsOnline()) |
+ d = device_utils.DeviceUtils(self._getUnusedSerial()) |
+ self.assertFalse(d.IsOnline()) |
+ |
+ def testHasRoot(self): |
+ a = self._getTestAdbWrapper() |
+ d = device_utils.DeviceUtils(a) |
+ secure_prop = a.Shell('getprop ro.secure').strip() |
+ if secure_prop == '1': |
+ build_type_prop = a.Shell('getprop ro.build.type').strip() |
+ if build_type_prop == 'userdebug': |
+ adb_root_prop = a.Shell('getprop service.adb.root').strip() |
+ if adb_root_prop is None or adb_root_prop == '0': |
+ self.assertFalse(d.HasRoot()) |
+ else: |
+ self.assertTrue(d.HasRoot()) |
+ else: |
+ self.assertFalse(d.HasRoot()) |
+ else: |
+ self.assertTrue(d.HasRoot()) |
+ |
+ def testEnableRoot(self): |
+ a = self._getTestAdbWrapper() |
+ d = device_utils.DeviceUtils(a) |
+ |
+ secure_prop = a.Shell('getprop ro.secure').strip() |
+ if secure_prop == '1': |
+ build_type_prop = a.Shell('getprop ro.build.type').strip() |
+ if build_type_prop == 'userdebug': |
+ # Turn off the adb root property |
+ adb_root_prop = a.Shell('getprop service.adb.root').strip() |
+ if adb_root_prop == '1': |
+ a.Shell('setprop service.adb.root 0') |
+ |
+ # Make sure that adbd is running without root by restarting it |
+ ps_out = a.Shell('ps') |
+ adbd_pids = [] |
+ for line in ps_out.splitlines(): |
+ if 'adbd' in line: |
+ pid = line.split()[1] |
+ adbd_pids.append(pid) |
+ for pid in adbd_pids: |
+ a.Shell('kill %s' % str(pid)) |
+ a.WaitForDevice() |
+ |
+ self.assertFalse(d.HasRoot()) |
+ d.EnableRoot() |
+ self.assertTrue(d.HasRoot()) |
+ else: |
+ self.assertFalse(d.HasRoot()) |
+ with self.assertRaises(device_errors.CommandFailedError): |
+ d.EnableRoot() |
+ else: |
+ self.assertTrue(d.HasRoot()) |
+ d.EnableRoot() |
+ self.assertTrue(d.HasRoot()) |
+ |
if __name__ == '__main__': |
- unittest.main() |
+ unittest.main(verbosity=2, buffer=True) |