Use self.is_adb_detectable() to prevent build_info from None even it is not in bootloader. (#923)
diff --git a/mobly/controllers/android_device.py b/mobly/controllers/android_device.py index 20c5762..866f50b 100644 --- a/mobly/controllers/android_device.py +++ b/mobly/controllers/android_device.py
@@ -844,7 +844,7 @@ @property def is_rootable(self): - return not self.is_bootloader and self.build_info['debuggable'] == '1' + return self.is_adb_detectable() and self.build_info['debuggable'] == '1' @functools.cached_property def model(self):
diff --git a/tests/lib/mock_android_device.py b/tests/lib/mock_android_device.py index c383c18..923c8c8 100755 --- a/tests/lib/mock_android_device.py +++ b/tests/lib/mock_android_device.py
@@ -87,6 +87,7 @@ mock_properties=None, installed_packages=None, instrumented_packages=None, + adb_detectable=True, ): self.serial = serial self.fail_br = fail_br @@ -101,6 +102,7 @@ self.installed_packages = installed_packages if instrumented_packages is None: instrumented_packages = [] + self.adb_detectable = adb_detectable self.installed_packages = installed_packages self.instrumented_packages = instrumented_packages @@ -154,6 +156,12 @@ if expected not in args: raise Error('"Expected "%s", got "%s"' % (expected, args)) + def devices(self): + out = b'xxxx\tdevice\nyyyy\tdevice' + if self.adb_detectable: + out += f'\n{self.serial}\tdevice'.encode() + return out + def __getattr__(self, name): """All calls to the none-existent functions in adb proxy would simply return the adb command string.
diff --git a/tests/mobly/controllers/android_device_lib/services/logcat_test.py b/tests/mobly/controllers/android_device_lib/services/logcat_test.py index 3f10cad..ebf4919 100755 --- a/tests/mobly/controllers/android_device_lib/services/logcat_test.py +++ b/tests/mobly/controllers/android_device_lib/services/logcat_test.py
@@ -149,7 +149,7 @@ @mock.patch( 'mobly.controllers.android_device_lib.adb.AdbProxy', - return_value=mock_android_device.MockAdbProxy('1'), + return_value=mock_android_device.MockAdbProxy('1', adb_detectable=False), ) @mock.patch( 'mobly.controllers.android_device_lib.fastboot.FastbootProxy', @@ -457,6 +457,7 @@ def test__enable_logpersist_with_logpersist(self, MockFastboot, MockAdbProxy): mock_serial = '1' mock_adb_proxy = MockAdbProxy.return_value + mock_adb_proxy.devices.return_value = f'{mock_serial}\tdevice'.encode() mock_adb_proxy.getprops.return_value = { 'ro.build.id': 'AB42', 'ro.build.type': 'userdebug', @@ -489,6 +490,7 @@ ): mock_serial = '1' mock_adb_proxy = MockAdbProxy.return_value + mock_adb_proxy.devices.return_value = f'{mock_serial}\tdevice'.encode() mock_adb_proxy.getprops.return_value = { 'ro.build.id': 'AB42', 'ro.build.type': 'user', @@ -524,6 +526,7 @@ mock_serial = '1' mock_adb_proxy = MockAdbProxy.return_value + mock_adb_proxy.devices.return_value = f'{mock_serial}\tdevice'.encode() mock_adb_proxy.getprops.return_value = { 'ro.build.id': 'AB42', 'ro.build.type': 'userdebug', @@ -558,6 +561,7 @@ mock_serial = '1' mock_adb_proxy = MockAdbProxy.return_value + mock_adb_proxy.devices.return_value = f'{mock_serial}\tdevice'.encode() mock_adb_proxy.getprops.return_value = { 'ro.build.id': 'AB42', 'ro.build.type': 'userdebug', @@ -596,6 +600,7 @@ mock_serial = '1' mock_adb_proxy = MockAdbProxy.return_value + mock_adb_proxy.devices.return_value = f'{mock_serial}\tdevice'.encode() mock_adb_proxy.getprops.return_value = { 'ro.build.id': 'AB42', 'ro.build.type': 'userdebug', @@ -611,7 +616,10 @@ logcat_service._enable_logpersist() mock_adb_proxy.shell.assert_not_called() - @mock.patch('mobly.controllers.android_device_lib.adb.AdbProxy') + @mock.patch( + 'mobly.controllers.android_device_lib.adb.AdbProxy', + return_value=mock_android_device.MockAdbProxy('1'), + ) @mock.patch( 'mobly.controllers.android_device_lib.fastboot.FastbootProxy', return_value=mock_android_device.MockFastbootProxy('1'),
diff --git a/tests/mobly/controllers/android_device_test.py b/tests/mobly/controllers/android_device_test.py index 81c2965..68fcfe4 100755 --- a/tests/mobly/controllers/android_device_test.py +++ b/tests/mobly/controllers/android_device_test.py
@@ -717,7 +717,7 @@ @mock.patch( 'mobly.controllers.android_device_lib.adb.AdbProxy', - return_value=mock_android_device.MockAdbProxy('1'), + return_value=mock_android_device.MockAdbProxy('1', adb_detectable=False), ) @mock.patch( 'mobly.controllers.android_device_lib.fastboot.FastbootProxy',