#!/usr/bin/env python3 # # Copyright (C) 2016 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. """ Test script to test if Bluetooth will reboot successfully if it is killed. """ import re import time from acts.test_decorators import test_tracker_info from acts.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest class BtKillProcessTest(BluetoothBaseTest): def __init__(self, controllers): BluetoothBaseTest.__init__(self, controllers) self.dut = self.android_devices[0] def _get_bt_pid(self): process_grep_string = "com.android.bluetooth" awk = "awk '{print $2}'" pid = self.dut.adb.shell("ps | grep com.android.bluetooth") if not pid: return None return (re.findall("\d+\W", pid)[0]) def _is_bt_process_running(self): if self._get_bt_pid(): return True else: return False @BluetoothBaseTest.bt_test_wrap @test_tracker_info(uuid='c51186e9-4ba8-406c-b609-ea552868e4c9') def test_kill_process(self): """Test that a killed Bluetooth process restarts If the Bluetooth process is killed out of band with kill -9 the process should be automatically restarted by Android. Steps: 1. Verify Bluetooth process is running 2. Kill the Bluetooth process with kill -9 3. Verify the process is restarted Expected Result: Bluetooth should be restarted automagically by the system. Returns: Pass if True Fail if False TAGS: Bluetooth Priority: 3 """ pid = self._get_bt_pid() if not pid: self.log.error("Failed to find Bluetooth process...") return False self.dut.adb.shell("kill -9 {}".format(pid)) #Give up to 5 seconds for the process to restart search_tries = 5 while search_tries > 0: if self._is_bt_process_running(): self.log.info( "Bluetooth process is successfully running again") return True search_tries -= 1 #Try looking for the process after waiting an additional second time.sleep(1) self.log.error("Bluetooth process did not restart") return False