1 #/usr/bin/env python3.4 2 # 3 # Copyright (C) 2016 The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); you may not 6 # use this file except in compliance with the License. You may obtain a copy of 7 # the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 13 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 14 # License for the specific language governing permissions and limitations under 15 # the License. 16 """ 17 Test script to test if Bluetooth will reboot successfully 18 if it is killed. 19 """ 20 21 import re 22 import time 23 from acts.test_decorators import test_tracker_info 24 from acts.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest 25 26 27 class BtKillProcessTest(BluetoothBaseTest): 28 def __init__(self, controllers): 29 BluetoothBaseTest.__init__(self, controllers) 30 self.dut = self.android_devices[0] 31 32 def _get_bt_pid(self): 33 process_grep_string = "com.android.bluetooth" 34 awk = "awk '{print $2}'" 35 pid = self.dut.adb.shell("ps | grep com.android.bluetooth") 36 if not pid: 37 return None 38 return (re.findall("\d+\W", pid)[0]) 39 40 def _is_bt_process_running(self): 41 if self._get_bt_pid(): 42 return True 43 else: 44 return False 45 46 @BluetoothBaseTest.bt_test_wrap 47 @test_tracker_info(uuid='c51186e9-4ba8-406c-b609-ea552868e4c9') 48 def test_kill_process(self): 49 """Test that a killed Bluetooth process restarts 50 51 If the Bluetooth process is killed out of band with kill -9 52 the process should be automatically restarted by Android. 53 54 Steps: 55 1. Verify Bluetooth process is running 56 2. Kill the Bluetooth process with kill -9 57 3. Verify the process is restarted 58 59 Expected Result: 60 Bluetooth should be restarted automagically by the system. 61 62 Returns: 63 Pass if True 64 Fail if False 65 66 TAGS: Bluetooth 67 Priority: 3 68 """ 69 pid = self._get_bt_pid() 70 if not pid: 71 self.log.error("Failed to find Bluetooth process...") 72 return False 73 self.dut.adb.shell("kill -9 {}".format(pid)) 74 #Give up to 5 seconds for the process to restart 75 search_tries = 5 76 while search_tries > 0: 77 if self._is_bt_process_running(): 78 self.log.info( 79 "Bluetooth process is successfully running again") 80 return True 81 search_tries -= 1 82 #Try looking for the process after waiting an additional second 83 time.sleep(1) 84 85 self.log.error("Bluetooth process did not restart") 86 return False 87