390 lines
13 KiB
Python
390 lines
13 KiB
Python
|
|
#!/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 execute Bluetooth basic functionality test cases.
|
||
|
|
This test was designed to be run in a shield box.
|
||
|
|
"""
|
||
|
|
|
||
|
|
import time
|
||
|
|
|
||
|
|
from acts.test_decorators import test_tracker_info
|
||
|
|
from acts_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
|
||
|
|
from acts_contrib.test_utils.bt.bt_constants import bt_scan_mode_types
|
||
|
|
from acts_contrib.test_utils.bt.bt_test_utils import check_device_supported_profiles
|
||
|
|
from acts_contrib.test_utils.bt.bt_test_utils import reset_bluetooth
|
||
|
|
from acts_contrib.test_utils.bt.bt_test_utils import set_device_name
|
||
|
|
from acts_contrib.test_utils.bt.bt_test_utils import set_bt_scan_mode
|
||
|
|
from acts_contrib.test_utils.bt.bt_test_utils import setup_multiple_devices_for_bt_test
|
||
|
|
from acts_contrib.test_utils.bt.bt_test_utils import take_btsnoop_logs
|
||
|
|
|
||
|
|
|
||
|
|
class BtBasicFunctionalityTest(BluetoothBaseTest):
|
||
|
|
default_timeout = 10
|
||
|
|
scan_discovery_time = 5
|
||
|
|
|
||
|
|
def setup_class(self):
|
||
|
|
super().setup_class()
|
||
|
|
self.droid_ad = self.android_devices[0]
|
||
|
|
self.droid1_ad = self.android_devices[1]
|
||
|
|
|
||
|
|
return setup_multiple_devices_for_bt_test(self.android_devices)
|
||
|
|
|
||
|
|
def setup_test(self):
|
||
|
|
for a in self.android_devices:
|
||
|
|
a.ed.clear_all_events()
|
||
|
|
return True
|
||
|
|
|
||
|
|
def teardown_test(self):
|
||
|
|
return True
|
||
|
|
|
||
|
|
def on_fail(self, test_name, begin_time):
|
||
|
|
take_btsnoop_logs(self.android_devices, self, test_name)
|
||
|
|
reset_bluetooth(self.android_devices)
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='5a5dcf94-8114-405c-a048-b80d73e80ecc')
|
||
|
|
def test_bluetooth_reset(self):
|
||
|
|
"""Test resetting bluetooth.
|
||
|
|
|
||
|
|
Test the integrity of resetting bluetooth on Android.
|
||
|
|
|
||
|
|
Steps:
|
||
|
|
1. Toggle bluetooth off.
|
||
|
|
2. Toggle bluetooth on.
|
||
|
|
|
||
|
|
Expected Result:
|
||
|
|
Bluetooth should toggle on and off without failing.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Pass if True
|
||
|
|
Fail if False
|
||
|
|
|
||
|
|
TAGS: Classic
|
||
|
|
Priority: 1
|
||
|
|
"""
|
||
|
|
return reset_bluetooth([self.droid_ad])
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='fc205cb8-6878-4f97-b9c8-7ed532742a1b')
|
||
|
|
def test_make_device_discoverable(self):
|
||
|
|
"""Test device discoverablity.
|
||
|
|
|
||
|
|
Test that verifies devices is discoverable.
|
||
|
|
|
||
|
|
Steps:
|
||
|
|
1. Initialize two android devices
|
||
|
|
2. Make device1 discoverable
|
||
|
|
3. Check discoverable device1 scan mode
|
||
|
|
4. Make device2 start discovery
|
||
|
|
5. Use device2 get all discovered bluetooth devices list
|
||
|
|
6. Verify device1 is in the list
|
||
|
|
|
||
|
|
Expected Result:
|
||
|
|
Device1 is in the discovered devices list.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Pass if True
|
||
|
|
Fail if False
|
||
|
|
|
||
|
|
TAGS: Classic
|
||
|
|
Priority: 1
|
||
|
|
"""
|
||
|
|
self.droid_ad.droid.bluetoothMakeDiscoverable()
|
||
|
|
scan_mode = self.droid_ad.droid.bluetoothGetScanMode()
|
||
|
|
if (scan_mode == bt_scan_mode_types['connectable_discoverable']):
|
||
|
|
self.log.debug("Android device1 scan mode is "
|
||
|
|
"SCAN_MODE_CONNECTABLE_DISCOVERABLE")
|
||
|
|
else:
|
||
|
|
self.log.debug("Android device1 scan mode is not "
|
||
|
|
"SCAN_MODE_CONNECTABLE_DISCOVERABLE")
|
||
|
|
return False
|
||
|
|
if self.droid1_ad.droid.bluetoothStartDiscovery():
|
||
|
|
self.log.debug("Android device2 start discovery process success")
|
||
|
|
# Give Bluetooth time to discover advertising devices
|
||
|
|
time.sleep(self.scan_discovery_time)
|
||
|
|
droid_name = self.droid_ad.droid.bluetoothGetLocalName()
|
||
|
|
get_all_discovered_devices = self.droid1_ad.droid.bluetoothGetDiscoveredDevices(
|
||
|
|
)
|
||
|
|
find_flag = False
|
||
|
|
if get_all_discovered_devices:
|
||
|
|
self.log.debug(
|
||
|
|
"Android device2 get all the discovered devices "
|
||
|
|
"list {}".format(get_all_discovered_devices))
|
||
|
|
for i in get_all_discovered_devices:
|
||
|
|
if 'name' in i and i['name'] == droid_name:
|
||
|
|
self.log.debug("Android device1 is in the discovery "
|
||
|
|
"list of device2")
|
||
|
|
find_flag = True
|
||
|
|
break
|
||
|
|
else:
|
||
|
|
self.log.debug(
|
||
|
|
"Android device2 get all the discovered devices "
|
||
|
|
"list is empty")
|
||
|
|
return False
|
||
|
|
else:
|
||
|
|
self.log.debug("Android device2 start discovery process error")
|
||
|
|
return False
|
||
|
|
if not find_flag:
|
||
|
|
return False
|
||
|
|
return True
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='c4d77bde-04ed-4805-9185-9bc46dc8af4b')
|
||
|
|
def test_make_device_undiscoverable(self):
|
||
|
|
"""Test device un-discoverability.
|
||
|
|
|
||
|
|
Test that verifies device is un-discoverable.
|
||
|
|
|
||
|
|
Steps:
|
||
|
|
1. Initialize two android devices
|
||
|
|
2. Make device1 un-discoverable
|
||
|
|
3. Check un-discoverable device1 scan mode
|
||
|
|
4. Make device2 start discovery
|
||
|
|
5. Use device2 get all discovered bluetooth devices list
|
||
|
|
6. Verify device1 is not in the list
|
||
|
|
|
||
|
|
Expected Result:
|
||
|
|
Device1 should not be in the discovered devices list.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Pass if True
|
||
|
|
Fail if False
|
||
|
|
|
||
|
|
TAGS: Classic
|
||
|
|
Priority: 1
|
||
|
|
"""
|
||
|
|
self.droid_ad.droid.bluetoothMakeUndiscoverable()
|
||
|
|
set_bt_scan_mode(self.droid1_ad, bt_scan_mode_types['none'])
|
||
|
|
scan_mode = self.droid1_ad.droid.bluetoothGetScanMode()
|
||
|
|
if scan_mode == bt_scan_mode_types['none']:
|
||
|
|
self.log.debug("Android device1 scan mode is SCAN_MODE_NONE")
|
||
|
|
else:
|
||
|
|
self.log.debug("Android device1 scan mode is not SCAN_MODE_NONE")
|
||
|
|
return False
|
||
|
|
if self.droid1_ad.droid.bluetoothStartDiscovery():
|
||
|
|
self.log.debug("Android device2 start discovery process success")
|
||
|
|
# Give Bluetooth time to discover advertising devices
|
||
|
|
time.sleep(self.scan_discovery_time)
|
||
|
|
droid_name = self.droid_ad.droid.bluetoothGetLocalName()
|
||
|
|
get_all_discovered_devices = self.droid1_ad.droid.bluetoothGetDiscoveredDevices(
|
||
|
|
)
|
||
|
|
find_flag = False
|
||
|
|
if get_all_discovered_devices:
|
||
|
|
self.log.debug(
|
||
|
|
"Android device2 get all the discovered devices "
|
||
|
|
"list {}".format(get_all_discovered_devices))
|
||
|
|
for i in get_all_discovered_devices:
|
||
|
|
if 'name' in i and i['name'] == droid_name:
|
||
|
|
self.log.debug(
|
||
|
|
"Android device1 is in the discovery list of "
|
||
|
|
"device2")
|
||
|
|
find_flag = True
|
||
|
|
break
|
||
|
|
else:
|
||
|
|
self.log.debug("Android device2 found no devices.")
|
||
|
|
return True
|
||
|
|
else:
|
||
|
|
self.log.debug("Android device2 start discovery process error")
|
||
|
|
return False
|
||
|
|
if find_flag:
|
||
|
|
return False
|
||
|
|
return True
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='2bcb6288-64c3-437e-bc89-bcd416310135')
|
||
|
|
def test_set_device_name(self):
|
||
|
|
"""Test bluetooth device name.
|
||
|
|
|
||
|
|
Test that a single device can be set device name.
|
||
|
|
|
||
|
|
Steps:
|
||
|
|
1. Initialize one android devices
|
||
|
|
2. Set device name
|
||
|
|
3. Return true is set device name success
|
||
|
|
|
||
|
|
Expected Result:
|
||
|
|
Bluetooth device name is set correctly.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Pass if True
|
||
|
|
Fail if False
|
||
|
|
|
||
|
|
TAGS: Classic
|
||
|
|
Priority: 1
|
||
|
|
"""
|
||
|
|
name = "SetDeviceName"
|
||
|
|
return set_device_name(self.droid_ad.droid, name)
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='b38fb110-a707-47cf-b1c3-981266373786')
|
||
|
|
def test_scan_mode_off(self):
|
||
|
|
"""Test disabling bluetooth scanning.
|
||
|
|
|
||
|
|
Test that changes scan mode to off.
|
||
|
|
|
||
|
|
Steps:
|
||
|
|
1. Initialize android device.
|
||
|
|
2. Set scan mode STATE_OFF by disabling bluetooth.
|
||
|
|
3. Verify scan state.
|
||
|
|
|
||
|
|
Expected Result:
|
||
|
|
Verify scan state is off.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Pass if True
|
||
|
|
Fail if False
|
||
|
|
|
||
|
|
TAGS: Classic
|
||
|
|
Priority: 1
|
||
|
|
"""
|
||
|
|
self.log.debug("Test scan mode STATE_OFF.")
|
||
|
|
return set_bt_scan_mode(self.droid_ad, bt_scan_mode_types['state_off'])
|
||
|
|
|
||
|
|
#@BluetoothTest(UUID=27576aa8-d52f-45ad-986a-f44fb565167d)
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='702c3d58-94fd-47ee-9323-2421ce182ddb')
|
||
|
|
def test_scan_mode_none(self):
|
||
|
|
"""Test bluetooth scan mode none.
|
||
|
|
|
||
|
|
Test that changes scan mode to none.
|
||
|
|
|
||
|
|
Steps:
|
||
|
|
1. Initialize android device.
|
||
|
|
2. Set scan mode SCAN_MODE_NONE by disabling bluetooth.
|
||
|
|
3. Verify scan state.
|
||
|
|
|
||
|
|
Expected Result:
|
||
|
|
Verify that scan mode is set to none.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Pass if True
|
||
|
|
Fail if False
|
||
|
|
|
||
|
|
TAGS: Classic
|
||
|
|
Priority: 1
|
||
|
|
"""
|
||
|
|
self.log.debug("Test scan mode SCAN_MODE_NONE.")
|
||
|
|
return set_bt_scan_mode(self.droid_ad, bt_scan_mode_types['none'])
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='cb998a99-31a6-46b6-9de6-a9a17081a604')
|
||
|
|
def test_scan_mode_connectable(self):
|
||
|
|
"""Test bluetooth scan mode connectable.
|
||
|
|
|
||
|
|
Test that changes scan mode to connectable.
|
||
|
|
|
||
|
|
Steps:
|
||
|
|
1. Initialize android device.
|
||
|
|
2. Set scan mode SCAN_MODE_CONNECTABLE.
|
||
|
|
3. Verify scan state.
|
||
|
|
|
||
|
|
Expected Result:
|
||
|
|
Verify that scan mode is set to connectable.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Pass if True
|
||
|
|
Fail if False
|
||
|
|
|
||
|
|
TAGS: Classic
|
||
|
|
Priority: 2
|
||
|
|
"""
|
||
|
|
self.log.debug("Test scan mode SCAN_MODE_CONNECTABLE.")
|
||
|
|
return set_bt_scan_mode(self.droid_ad,
|
||
|
|
bt_scan_mode_types['connectable'])
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='59bec55c-c64e-43e4-9a9a-e44408a801d7')
|
||
|
|
def test_scan_mode_connectable_discoverable(self):
|
||
|
|
"""Test bluetooth scan mode connectable.
|
||
|
|
|
||
|
|
Test that changes scan mode to connectable.
|
||
|
|
|
||
|
|
Steps:
|
||
|
|
1. Initialize android device.
|
||
|
|
2. Set scan mode SCAN_MODE_DISCOVERABLE.
|
||
|
|
3. Verify scan state.
|
||
|
|
|
||
|
|
Expected Result:
|
||
|
|
Verify that scan mode is set to discoverable.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Pass if True
|
||
|
|
Fail if False
|
||
|
|
|
||
|
|
TAGS: Classic
|
||
|
|
Priority: 2
|
||
|
|
"""
|
||
|
|
self.log.debug("Test scan mode SCAN_MODE_CONNECTABLE_DISCOVERABLE.")
|
||
|
|
return set_bt_scan_mode(self.droid_ad,
|
||
|
|
bt_scan_mode_types['connectable_discoverable'])
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='cd20a09d-a68d-4f55-b016-ba283b0460df')
|
||
|
|
def test_if_support_hid_profile(self):
|
||
|
|
""" Test that a single device can support HID profile.
|
||
|
|
Steps
|
||
|
|
1. Initialize one android devices
|
||
|
|
2. Check devices support profiles and return a dictionary
|
||
|
|
3. Check the value of key 'hid'
|
||
|
|
|
||
|
|
Expected Result:
|
||
|
|
Device1 is in the discovered devices list.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
Pass if True
|
||
|
|
Fail if False
|
||
|
|
|
||
|
|
TAGS: Classic
|
||
|
|
Priority: 1
|
||
|
|
"""
|
||
|
|
profiles = check_device_supported_profiles(self.droid_ad.droid)
|
||
|
|
if not profiles['hid']:
|
||
|
|
self.log.debug("Android device do not support HID profile.")
|
||
|
|
return False
|
||
|
|
return True
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='a110d330-7090-4784-a33b-33089dc5f67f')
|
||
|
|
def test_if_support_hsp_profile(self):
|
||
|
|
""" Test that a single device can support HSP profile.
|
||
|
|
Steps
|
||
|
|
1. Initialize one android devices
|
||
|
|
2. Check devices support profiles and return a dictionary
|
||
|
|
3. Check the value of key 'hsp'
|
||
|
|
:return: test_result: bool
|
||
|
|
"""
|
||
|
|
profiles = check_device_supported_profiles(self.droid_ad.droid)
|
||
|
|
if not profiles['hsp']:
|
||
|
|
self.log.debug("Android device do not support HSP profile.")
|
||
|
|
return False
|
||
|
|
return True
|
||
|
|
|
||
|
|
@BluetoothBaseTest.bt_test_wrap
|
||
|
|
@test_tracker_info(uuid='9ccefdd9-62a9-4aed-b4d9-7b0a55c338b2')
|
||
|
|
def test_if_support_a2dp_profile(self):
|
||
|
|
""" Test that a single device can support A2DP profile.
|
||
|
|
Steps
|
||
|
|
1. Initialize one android devices
|
||
|
|
2. Check devices support profiles and return a dictionary
|
||
|
|
3. Check the value of key 'a2dp'
|
||
|
|
:return: test_result: bool
|
||
|
|
"""
|
||
|
|
profiles = check_device_supported_profiles(self.droid_ad.droid)
|
||
|
|
if not profiles['a2dp']:
|
||
|
|
self.log.debug("Android device do not support A2DP profile.")
|
||
|
|
return False
|
||
|
|
return True
|