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 0682ae2c164d2af943181cdde9829a6129c9178f..5b34673f59a9386cf8f8ba77bd0e0659eabcd082 100644 |
--- a/build/android/pylib/device/device_utils_test.py |
+++ b/build/android/pylib/device/device_utils_test.py |
@@ -11,6 +11,7 @@ Unit tests for the contents of device_utils.py (mostly DeviceUtils). |
# pylint: disable=W0613 |
import os |
+import signal |
import sys |
import unittest |
@@ -19,6 +20,7 @@ from pylib import constants |
from pylib.device import adb_wrapper |
from pylib.device import device_errors |
from pylib.device import device_utils |
+from pylib.device import intent |
sys.path.append(os.path.join( |
constants.DIR_SOURCE_ROOT, 'third_party', 'android_testrunner')) |
@@ -403,13 +405,13 @@ class DeviceUtilsOldImplTest(unittest.TestCase): |
("adb -s 0123456789abcdef shell 'ls /root'", 'Permission denied\r\n'), |
("adb -s 0123456789abcdef shell 'su -c setprop service.adb.root 0'", |
'')]): |
- self.device.RunShellCommand('setprop service.adb.root 0', root=True) |
+ self.device.RunShellCommand('setprop service.adb.root 0', as_root=True) |
def testRunShellCommand_withRoot(self): |
with self.assertOldImplCallsSequence([ |
("adb -s 0123456789abcdef shell 'ls /root'", 'hello\r\nworld\r\n'), |
("adb -s 0123456789abcdef shell 'setprop service.adb.root 0'", '')]): |
- self.device.RunShellCommand('setprop service.adb.root 0', root=True) |
+ self.device.RunShellCommand('setprop service.adb.root 0', as_root=True) |
def testRunShellCommand_checkReturn_success(self): |
with self.assertOldImplCalls( |
@@ -424,6 +426,263 @@ class DeviceUtilsOldImplTest(unittest.TestCase): |
with self.assertRaises(device_errors.CommandFailedError): |
self.device.RunShellCommand('echo $ANDROID_DATA', check_return=True) |
+ def testKillAll_noMatchingProcesses(self): |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n'): |
+ with self.assertRaises(device_errors.CommandFailedError): |
+ self.device.KillAll('test_process') |
+ |
+ def testKillAll_nonblocking(self): |
+ with self.assertOldImplCallsSequence([ |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
+ 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
+ 'this.is.a.test.process\r\n'), |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
+ 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
+ 'this.is.a.test.process\r\n'), |
+ ("adb -s 0123456789abcdef shell 'kill -9 1234'", '')]): |
+ self.device.KillAll('this.is.a.test.process', blocking=False) |
+ |
+ def testKillAll_blocking(self): |
+ with mock.patch('time.sleep'): |
+ with self.assertOldImplCallsSequence([ |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
+ 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
+ 'this.is.a.test.process\r\n'), |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
+ 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
+ 'this.is.a.test.process\r\n'), |
+ ("adb -s 0123456789abcdef shell 'kill -9 1234'", ''), |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
+ 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
+ 'this.is.a.test.process\r\n'), |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n')]): |
+ self.device.KillAll('this.is.a.test.process', blocking=True) |
+ |
+ def testKillAll_root(self): |
+ with self.assertOldImplCallsSequence([ |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
+ 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
+ 'this.is.a.test.process\r\n'), |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
+ 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
+ 'this.is.a.test.process\r\n'), |
+ ("adb -s 0123456789abcdef shell 'su -c kill -9 1234'", '')]): |
+ self.device.KillAll('this.is.a.test.process', as_root=True) |
+ |
+ def testKillAll_sigterm(self): |
+ with self.assertOldImplCallsSequence([ |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
+ 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
+ 'this.is.a.test.process\r\n'), |
+ ("adb -s 0123456789abcdef shell 'ps'", |
+ 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
+ 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
+ 'this.is.a.test.process\r\n'), |
+ ("adb -s 0123456789abcdef shell 'kill -15 1234'", '')]): |
+ self.device.KillAll('this.is.a.test.process', signum=signal.SIGTERM) |
+ |
+ def testStartActivity_actionOnly(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testStartActivity_success(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-n this.is.a.test.package/.Main'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testStartActivity_failure(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-n this.is.a.test.package/.Main'", |
+ 'Error: Failed to start test activity'): |
+ with self.assertRaises(device_errors.CommandFailedError): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testStartActivity_blocking(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-W " |
+ "-n this.is.a.test.package/.Main'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent, blocking=True) |
+ |
+ def testStartActivity_withCategory(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main', |
+ category='android.intent.category.HOME') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-c android.intent.category.HOME " |
+ "-n this.is.a.test.package/.Main'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testStartActivity_withMultipleCategories(self): |
+ # The new implementation will start the activity with all provided |
+ # categories. The old one only uses the first category. |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main', |
+ category=['android.intent.category.HOME', |
+ 'android.intent.category.BROWSABLE']) |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-c android.intent.category.HOME " |
+ "-n this.is.a.test.package/.Main'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testStartActivity_withData(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main', |
+ data='http://www.google.com/') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-n this.is.a.test.package/.Main " |
+ "-d \"http://www.google.com/\"'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testStartActivity_withStringExtra(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main', |
+ extras={'foo': 'test'}) |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-n this.is.a.test.package/.Main " |
+ "--es foo test'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testStartActivity_withBoolExtra(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main', |
+ extras={'foo': True}) |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-n this.is.a.test.package/.Main " |
+ "--ez foo True'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testStartActivity_withIntExtra(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main', |
+ extras={'foo': 123}) |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-n this.is.a.test.package/.Main " |
+ "--ei foo 123'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testStartActivity_withTraceFile(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-n this.is.a.test.package/.Main " |
+ "--start-profiler test_trace_file.out'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent, |
+ trace_file_name='test_trace_file.out') |
+ |
+ def testStartActivity_withForceStop(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-S " |
+ "-n this.is.a.test.package/.Main'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent, force_stop=True) |
+ |
+ def testStartActivity_withFlags(self): |
+ test_intent = intent.Intent(action='android.intent.action.VIEW', |
+ package='this.is.a.test.package', |
+ activity='.Main', |
+ flags='0x10000000') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am start " |
+ "-a android.intent.action.VIEW " |
+ "-n this.is.a.test.package/.Main " |
+ "-f 0x10000000'", |
+ 'Starting: Intent { act=android.intent.action.VIEW }'): |
+ self.device.StartActivity(test_intent) |
+ |
+ def testBroadcastIntent_noExtras(self): |
+ test_intent = intent.Intent(action='test.package.with.an.INTENT') |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am broadcast " |
+ "-a test.package.with.an.INTENT '", |
+ 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): |
+ self.device.BroadcastIntent(test_intent) |
+ |
+ def testBroadcastIntent_withExtra(self): |
+ test_intent = intent.Intent(action='test.package.with.an.INTENT', |
+ extras={'foo': 'bar'}) |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am broadcast " |
+ "-a test.package.with.an.INTENT " |
+ "-e foo \"bar\"'", |
+ 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): |
+ self.device.BroadcastIntent(test_intent) |
+ |
+ def testBroadcastIntent_withExtra_noValue(self): |
+ test_intent = intent.Intent(action='test.package.with.an.INTENT', |
+ extras={'foo': None}) |
+ with self.assertOldImplCalls( |
+ "adb -s 0123456789abcdef shell 'am broadcast " |
+ "-a test.package.with.an.INTENT " |
+ "-e foo'", |
+ 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): |
+ self.device.BroadcastIntent(test_intent) |
+ |
+ |
if __name__ == '__main__': |
unittest.main(verbosity=2) |