1#!/usr/bin/env python 2# Copyright 2017 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""" 7Unit tests for some APIs with conditional logic in adb_wrapper.py 8""" 9 10import unittest 11 12from devil import devil_env 13from devil.android import device_errors 14from devil.android.sdk import adb_wrapper 15 16with devil_env.SysPath(devil_env.PYMOCK_PATH): 17 import mock # pylint: disable=import-error 18 19 20class AdbWrapperTest(unittest.TestCase): 21 def setUp(self): 22 self.device_serial = 'ABC12345678' 23 self.adb = adb_wrapper.AdbWrapper(self.device_serial) 24 25 def _MockRunDeviceAdbCmd(self, return_value): 26 return mock.patch.object( 27 self.adb, 28 '_RunDeviceAdbCmd', 29 mock.Mock(side_effect=None, return_value=return_value)) 30 31 def testDisableVerityWhenDisabled(self): 32 with self._MockRunDeviceAdbCmd('Verity already disabled on /system'): 33 self.adb.DisableVerity() 34 35 def testDisableVerityWhenEnabled(self): 36 with self._MockRunDeviceAdbCmd( 37 'Verity disabled on /system\nNow reboot your device for settings to ' 38 'take effect'): 39 self.adb.DisableVerity() 40 41 def testEnableVerityWhenEnabled(self): 42 with self._MockRunDeviceAdbCmd('Verity already enabled on /system'): 43 self.adb.EnableVerity() 44 45 def testEnableVerityWhenDisabled(self): 46 with self._MockRunDeviceAdbCmd( 47 'Verity enabled on /system\nNow reboot your device for settings to ' 48 'take effect'): 49 self.adb.EnableVerity() 50 51 def testFailEnableVerity(self): 52 with self._MockRunDeviceAdbCmd('error: closed'): 53 self.assertRaises( 54 device_errors.AdbCommandFailedError, self.adb.EnableVerity) 55 56 def testFailDisableVerity(self): 57 with self._MockRunDeviceAdbCmd('error: closed'): 58 self.assertRaises( 59 device_errors.AdbCommandFailedError, self.adb.DisableVerity) 60 61 @mock.patch('devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout') 62 def testDeviceUnreachable(self, get_cmd_mock): 63 get_cmd_mock.return_value = ( 64 1, "error: device '%s' not found" % self.device_serial) 65 self.assertRaises( 66 device_errors.DeviceUnreachableError, self.adb.Shell, '/bin/true') 67 68 @mock.patch('devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout') 69 def testWaitingForDevice(self, get_cmd_mock): 70 get_cmd_mock.return_value = (1, '- waiting for device - ') 71 self.assertRaises( 72 device_errors.DeviceUnreachableError, self.adb.Shell, '/bin/true') 73