Home | History | Annotate | Download | only in bt
      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