bluetooth_AdapterLEAdvertising: add 16 test cases for multi-advertising
This patch implements a number of test cases to verify bluetooth
low-energy advertising as a peripheral where each test case
comprises a distinct combination and permutation of tests.
Specifically, this autotest includes the following test cases:
self.run_multiple_advertising_test_cases()
self.test_case_SI200_RA3_CD_UA3()
self.test_case_SI200_RA3_CD_RA1_CD_UA1_CD_UA3()
self.test_case_SI200_RA3_CD_RS()
self.test_case_SI200_RA3_CD_UA1_CD_RS()
self.test_case_SI200_RA3_CD_PC_CD_UA3()
self.test_case_SI200_RA3_CD_SR_CD_UA3()
self.test_case_SI200_RA3_CD_UA1_CD_RA2_CD_UA4()
self.test_case_SI200_RA5_CD_FRA1_CD_UA5()
self.test_case_RA3_CD_SI200_CD_UA3()
self.test_case_RA3_CD_SI200_CD_RS()
self.test_case_RA3_CD_SI200_CD_UA1_CD_RS()
self.test_case_RA3_CD_SI200_CD_SI2000_CD_UA3()
self.test_case_RA5_CD_SI200_CD_FRA1_CD_UA5()
self.test_case_RA3_CD_SI200_CD_FSI10_CD_FSI20000_CD_UA3()
self.test_case_RA3_CD_SI200_CD_PC_CD_UA3()
self.test_case_RA3_CD_SI200_CD_SR_CD_UA3()
Mnemonics of the test cases:
CD: check advertising duration and intervals
RA: register advertisements
UA: unregister advertisements
SI: set advertising intervals
RS: reset advertising
FRA: fail to register extra advertisements when max ones have
been registered.
FSI: fail to set advertising intervals beyond legitimate range
of [20 ms, 10,240 ms].
PC: power cycle the bluetooth adapter (controller).
SR: suspend and resume the DUT (chromebook)
BUG=chromium:602461
TEST=Conduct the autotest as follows:
Test advertising with multiple advertisement instances simultaneously.
(cr) $ test_that --board=$BOARD $DUT_IP bluetooth_AdapterLEAdvertising.multiple
Change-Id: I49c606f624561b6d017cadf5911298285df7834f
Reviewed-on: https://chromium-review.googlesource.com/412911
Commit-Ready: Shyh-In Hwang <josephsih@chromium.org>
Tested-by: Shyh-In Hwang <josephsih@chromium.org>
Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org>
diff --git a/server/cros/bluetooth/advertisements_data.py b/server/cros/bluetooth/advertisements_data.py
new file mode 100644
index 0000000..916df82
--- /dev/null
+++ b/server/cros/bluetooth/advertisements_data.py
@@ -0,0 +1,69 @@
+# Copyright 2016 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""A list of advertisements data for testing purpose."""
+
+
+ADVERTISEMENT1 = {
+ 'Path': '/org/bluez/test/advertisement1',
+ 'Type': 'peripheral',
+ 'ManufacturerData': {'0xff01': [0x1a, 0x1b, 0x1c, 0x1d, 0x1e]},
+ 'ServiceUUIDs': ['180D', '180F'],
+ 'SolicitUUIDs': [],
+ 'ServiceData': {'9991': [0x11, 0x12, 0x13, 0x14, 0x15]},
+ 'IncludeTxPower': True}
+
+
+ADVERTISEMENT2 = {
+ 'Path': '/org/bluez/test/advertisement2',
+ 'Type': 'peripheral',
+ 'ManufacturerData': {'0xff02': [0x2a, 0x2b, 0x2c, 0x2d, 0x2e]},
+ 'ServiceUUIDs': ['1821'],
+ 'SolicitUUIDs': [],
+ 'ServiceData': {'9992': [0x21, 0x22, 0x23, 0x24, 0x25]},
+ 'IncludeTxPower': True}
+
+
+ADVERTISEMENT3 = {
+ 'Path': '/org/bluez/test/advertisement3',
+ 'Type': 'peripheral',
+ 'ManufacturerData': {'0xff03': [0x3a, 0x3b, 0x3c, 0x3d, 0x3e]},
+ 'ServiceUUIDs': ['1819', '180E'],
+ 'SolicitUUIDs': [],
+ 'ServiceData': {'9993': [0x31, 0x32, 0x33, 0x34, 0x35]},
+ 'IncludeTxPower': True}
+
+
+ADVERTISEMENT4 = {
+ 'Path': '/org/bluez/test/advertisement4',
+ 'Type': 'peripheral',
+ 'ManufacturerData': {'0xff04': [0x4a, 0x4b, 0x4c, 0x4d, 0x4e]},
+ 'ServiceUUIDs': ['1808', '1810'],
+ 'SolicitUUIDs': [],
+ 'ServiceData': {'9994': [0x41, 0x42, 0x43, 0x44, 0x45]},
+ 'IncludeTxPower': True}
+
+
+ADVERTISEMENT5 = {
+ 'Path': '/org/bluez/test/advertisement5',
+ 'Type': 'peripheral',
+ 'ManufacturerData': {'0xff05': [0x5a, 0x5b, 0x5c, 0x5d, 0x5e]},
+ 'ServiceUUIDs': ['1818', '181B'],
+ 'SolicitUUIDs': [],
+ 'ServiceData': {'9995': [0x51, 0x52, 0x53, 0x54, 0x55]},
+ 'IncludeTxPower': True}
+
+
+ADVERTISEMENT6 = {
+ 'Path': '/org/bluez/test/advertisement6',
+ 'Type': 'peripheral',
+ 'ManufacturerData': {'0xff06': [0x6a, 0x6b, 0x6c, 0x6d, 0x6e]},
+ 'ServiceUUIDs': ['1820'],
+ 'SolicitUUIDs': [],
+ 'ServiceData': {'9996': [0x61, 0x62, 0x63, 0x64, 0x65]},
+ 'IncludeTxPower': True}
+
+
+ADVERTISEMENTS = [ADVERTISEMENT1, ADVERTISEMENT2, ADVERTISEMENT3,
+ ADVERTISEMENT4, ADVERTISEMENT5, ADVERTISEMENT6]
diff --git a/server/cros/bluetooth/bluetooth_adpater_tests.py b/server/cros/bluetooth/bluetooth_adpater_tests.py
index e058838..7a5e369 100644
--- a/server/cros/bluetooth/bluetooth_adpater_tests.py
+++ b/server/cros/bluetooth/bluetooth_adpater_tests.py
@@ -330,6 +330,26 @@
return decorator
+def test_case_log(method):
+ """A decorator for test case methods.
+
+ The main purpose of this decorator is to display the test case name
+ in the test log which looks like
+
+ <... test_case_RA3_CD_SI200_CD_PC_CD_UA3 ...>
+
+ @param method: the test case method to decorate.
+
+ @returns: a wrapper function of the decorated method.
+
+ """
+ @functools.wraps(method)
+ def wrapper(instance, *args, **kwargs):
+ logging.info('\n<... %s ...>', method.__name__)
+ method(instance, *args, **kwargs)
+ return wrapper
+
+
class BluetoothAdapterTests(test.test):
"""Server side bluetooth adapter tests.
diff --git a/server/site_tests/bluetooth_AdapterLEAdvertising/bluetooth_AdapterLEAdvertising.py b/server/site_tests/bluetooth_AdapterLEAdvertising/bluetooth_AdapterLEAdvertising.py
index c11f801..a607b41 100644
--- a/server/site_tests/bluetooth_AdapterLEAdvertising/bluetooth_AdapterLEAdvertising.py
+++ b/server/site_tests/bluetooth_AdapterLEAdvertising/bluetooth_AdapterLEAdvertising.py
@@ -2,71 +2,757 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-"""Server side bluetooth tests on adapter advertising."""
+"""Server side bluetooth tests on adapter ble advertising.
+
+The Mnemonics describing the test cases:
+ CD: check advertising duration and intervals
+ RA: register advertisements
+ UA: unregister advertisements
+ SI: set advertising intervals
+ RS: reset advertising
+ FRA: fail to register extra advertisements when max ones
+ have been registered.
+ FSI: fail to set advertising intervals beyond legitimate range
+ of [20 ms, 10,240 ms].
+ PC: power cycle the bluetooth adapter (controller).
+ SR: suspend and resume the DUT (chromebook)
+
+A test represents a component of a test case which comprises a
+sequence of tests. A test case usually requires a tester (user)
+to perform a sequence of actions and make a sequence of
+observations if the test case is performed manually.
+
+A test consists of an optional action such as "register n
+advertisements" and a number of test criteria such as "verifying
+if min advertising interval is set to an expected value" or
+"verifying if advertising is disabled".
+
+"""
+
+import copy
+import logging
+import time
from autotest_lib.client.common_lib import error
from autotest_lib.server.cros.bluetooth import bluetooth_adpater_tests
from autotest_lib.server.cros.multimedia import bluetooth_le_facade_adapter
+test_case_log = bluetooth_adpater_tests.test_case_log
+
+
class bluetooth_AdapterLEAdvertising(
bluetooth_adpater_tests.BluetoothAdapterTests):
"""Server side bluetooth adapter advertising Test.
- This class tries to test the adapter could advertise with correct
- parameters.
+ This class comprises a number of test cases to verify
+ bluetooth low-energy advertising.
- In particular, the following subtests are performed. Look at the
- docstrings of the subtests for more details.
- - test_register_advertisement
- - test_set_advertising_intervals
- - test_reset_advertising
-
- Refer to BluetoothAdapterTests for the implementation of the subtests
+ Refer to BluetoothAdapterTests for the implementation of the tests
performed in this autotest test.
- If the advertisement data in a control file is registered multiple
- times, the advertising data issued by HCI commands may be omitted
- by kernel and results in test failure. In this case, reboot the DUT
- to avoid the test failure.
+ Refer to the design doc for more details:
+ "Test Cases for Bluetooth Low-Energy Advertising".
"""
- def test_registration_and_reset(self, advertisements, min_adv_interval_ms,
- max_adv_interval_ms):
- """Test advertisements operations with new intervals.
- @param advertisements: a list of advertisement instances.
- @param min_adv_interval_ms: min_adv_interval in milli-second.
- @param max_adv_interval_ms: max_adv_interval in milli-second.
+ SUSPEND_TIME = 10
+
+ @staticmethod
+ def get_instance_ids(advertisements):
+ """Get the list of instace IDs starting at 1.
+
+ @param advertisements: a list of advertisements.
"""
- # Create a list of advertisement instance IDs starting at 1.
- instance_ids = range(1, len(advertisements) + 1)
+ return range(1, len(advertisements) + 1)
- # Test if the specified advertisements could be registered correctly.
+
+ def suspend_resume(self, suspend_time=SUSPEND_TIME):
+ """Suspend the DUT for a while and then resume.
+
+ @param suspend_time: the suspend time in seconds.
+
+ """
+ logging.info('The DUT suspends for %d seconds...', suspend_time)
+ self.host.suspend(suspend_time=suspend_time)
+ logging.info('The DUT is waken up.')
+
+
+ def register_advertisements(self, advertisements, min_adv_interval_ms,
+ max_adv_interval_ms, instance_ids=None):
+ """Register multiple advertisements continuously.
+
+ @param advertisements: a list of advertisement instances.
+ @param min_adv_interval_ms: min_adv_interval in milliseconds.
+ @param max_adv_interval_ms: max_adv_interval in milliseconds.
+ @param instance_ids: the list of instance IDs to register.
+
+ """
+ if instance_ids is None:
+ instance_ids = self.get_instance_ids(advertisements)
+
for instance_id, advertisement in zip(instance_ids, advertisements):
self.test_register_advertisement(advertisement,
instance_id,
min_adv_interval_ms,
max_adv_interval_ms)
- # Test if advertising is reset correctly.
- self.test_reset_advertising(instance_ids)
+
+ def unregister_advertisements(self, advertisements, min_adv_interval_ms,
+ max_adv_interval_ms, instance_ids=None):
+ """Register multiple advertisements.
+
+ @param advertisements: a list of advertisement instances.
+ @param min_adv_interval_ms: min_adv_interval in milliseconds.
+ @param max_adv_interval_ms: max_adv_interval in milliseconds.
+ @param instance_ids: the list of instance IDs to unregister.
+
+ """
+ if instance_ids is None:
+ instance_ids = self.get_instance_ids(advertisements)
+
+ count = 0
+ number_advs = len(advertisements)
+ for instance_id, advertisement in zip(instance_ids, advertisements):
+ # Advertising is only disabled at the removal of the
+ # last advertisement.
+ count += 1
+ advertising_disabled = count == number_advs
+ self.test_unregister_advertisement(advertisement,
+ instance_id,
+ min_adv_interval_ms,
+ max_adv_interval_ms,
+ advertising_disabled)
- def run_once(self, host, advertisements, multi_advertising,
- min_adv_interval_ms, max_adv_interval_ms):
+ # ---------------------------------------------------------------
+ # Definitions of all test cases
+ # ---------------------------------------------------------------
+
+
+ @test_case_log
+ def test_case_SI200_RA3_CD_UA3(self):
+ """Test Case: SI(200) - RA(3) - CD - UA(3)"""
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.three_advertisements
+
+ self.test_reset_advertising()
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.register_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ len(advertisements))
+
+ self.unregister_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+
+ @test_case_log
+ def test_case_SI200_RA3_CD_RA1_CD_UA1_CD_UA3(self):
+ """Test Case: SI(200) - RA(3) - CD - RA(1) - CD - UA(1) - CD - UA(3)"""
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ # Make a copy of advertisements since we are going to modify it.
+ advertisements = copy.copy(self.three_advertisements)
+ number_advs = len(advertisements)
+ one_more_advertisement = [self.sixth_advertisement]
+
+ self.test_reset_advertising()
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.register_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Register one more advertisement.
+ # The instance ID to register is len(advertisements) + 1 = 4
+ self.register_advertisements(one_more_advertisement,
+ new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ instance_ids=[number_advs + 1])
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs + 1)
+
+ # Unregister the 3rd advertisement.
+ # After removing the advertisement, the remaining instance IDs
+ # would be [1, 2, 4]
+ instance_id = 3
+ self.test_unregister_advertisement(advertisements.pop(instance_id - 1),
+ instance_id,
+ new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ advertising_disabled=False)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Unregister all existing advertisements which are [1, 2, 4]
+ # since adv 3 was removed in the previous step.
+ self.unregister_advertisements(advertisements + one_more_advertisement,
+ new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ instance_ids=[1, 2, 4])
+
+
+ @test_case_log
+ def test_case_SI200_RA3_CD_RS(self):
+ """Test Case: SI(200) - RA(3) - CD - RS"""
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.three_advertisements
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.register_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ self.test_reset_advertising(self.get_instance_ids(advertisements))
+
+
+ @test_case_log
+ def test_case_SI200_RA3_CD_UA1_CD_RS(self):
+ """Test Case: SI(200) - RA(3) - CD - UA(1) - CD - RS"""
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ # Make a copy of advertisements since we are going to modify it.
+ advertisements = copy.copy(self.three_advertisements)
+
+ self.test_reset_advertising()
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.register_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ len(advertisements))
+
+ # Unregister the 1st advertisement.
+ # After removing the advertisement, the remaining instance IDs
+ # would be [2, 3]
+ instance_id = 1
+ self.test_unregister_advertisement(advertisements.pop(instance_id - 1),
+ instance_id,
+ new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ advertising_disabled=False)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ len(advertisements) - 1)
+
+ self.test_reset_advertising([2, 3])
+
+
+ @test_case_log
+ def test_case_SI200_RA3_CD_UA1_CD_RA2_CD_UA4(self):
+ """Test Case: SI(200) - RA(3) - CD - UA(1) - CD - RA(2) - CD - UA(4)"""
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ # Make a copy of three_advertisements since we are going to modify it.
+ advertisements1 = copy.copy(self.three_advertisements)
+ advertisements2 = self.two_advertisements
+ number_advs1 = len(advertisements1)
+ number_advs2 = len(advertisements2)
+
+ self.test_reset_advertising()
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.register_advertisements(advertisements1, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs1)
+
+ # Unregister the 2nd advertisement.
+ # After removing the 2nd advertisement, the remaining instance IDs
+ # would be [1, 3]
+ instance_id = 2
+ self.test_unregister_advertisement(advertisements1.pop(instance_id - 1),
+ instance_id,
+ new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ advertising_disabled=False)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs1 - 1)
+
+ # Register two more advertisements.
+ # The instance IDs to register would be [2, 4]
+ self.register_advertisements(advertisements2, new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ instance_ids=[2, 4])
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs1 + number_advs2 - 1)
+
+ # Unregister all advertisements.
+ # The instance_ids of advertisements1 is [1, 3].
+ # The instance_ids of advertisements2 is [2, 4].
+ self.unregister_advertisements(advertisements1 + advertisements2,
+ new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ instance_ids=[1, 3, 2, 4])
+
+
+ @test_case_log
+ def test_case_SI200_RA5_CD_FRA1_CD_UA5(self):
+ """Test Case: SI(200) - RA(5) - CD - FRA(1) - CD - UA(5)"""
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.five_advertisements
+ extra_advertisement = self.sixth_advertisement
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.register_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ self.test_fail_to_register_advertisement(extra_advertisement,
+ new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ self.unregister_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+
+ @test_case_log
+ def test_case_SI200_RA3_CD_PC_CD_UA3(self):
+ """Test Case: SI(200) - RA(3) - CD - PC - CD - UA(3)"""
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.three_advertisements
+
+ self.test_reset_advertising()
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.register_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ len(advertisements))
+
+ # Turn off and then turn on the adapter.
+ self.test_power_off_adapter()
+ time.sleep(1)
+ self.test_power_on_adapter()
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ len(advertisements))
+
+ self.unregister_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+
+ @test_case_log
+ def test_case_SI200_RA3_CD_SR_CD_UA3(self):
+ """Test Case: SI(200) - RA(3) - CD - SR - CD - UA(3)"""
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.three_advertisements
+
+ self.test_reset_advertising()
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.register_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ len(advertisements))
+
+ # Suspend for a while and resume.
+ self.suspend_resume()
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ len(advertisements))
+
+ self.unregister_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+
+ @test_case_log
+ def test_case_RA3_CD_SI200_CD_UA3(self):
+ """Test Case: RA(3) - CD - SI(200) - CD - UA(3)"""
+ orig_min_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ orig_max_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.three_advertisements
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.register_advertisements(advertisements, orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms,
+ number_advs)
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ self.unregister_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+
+ @test_case_log
+ def test_case_RA3_CD_SI200_CD_RS(self):
+ """Test Case: RA(3) - CD - SI(200) - CD - RS"""
+ orig_min_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ orig_max_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.three_advertisements
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.register_advertisements(advertisements, orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms,
+ number_advs)
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ self.test_reset_advertising(self.get_instance_ids(advertisements))
+
+
+
+ @test_case_log
+ def test_case_RA3_CD_SI200_CD_UA1_CD_RS(self):
+ """Test Case: RA(3) - CD - SI(200) - CD - UA(1) - CD - RS"""
+ orig_min_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ orig_max_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.three_advertisements
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.register_advertisements(advertisements, orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms,
+ number_advs)
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Unregister the 2nd advertisement.
+ instance_id = 2
+ self.test_unregister_advertisement(advertisements[instance_id - 1],
+ instance_id,
+ new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ advertising_disabled=False)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs - 1)
+
+ # Test if advertising is reset correctly.Only instances [1, 3] are left.
+ self.test_reset_advertising([1, 3])
+
+
+ @test_case_log
+ def test_case_RA3_CD_SI200_CD_SI2000_CD_UA3(self):
+ """Test Case: RA(3) - CD - SI(200) - CD - SI(2000) - CD - UA(3)"""
+ orig_min_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ orig_max_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ new_small_min_adv_interval_ms = 200
+ new_small_max_adv_interval_ms = 200
+ new_large_min_adv_interval_ms = 2000
+ new_large_max_adv_interval_ms = 2000
+ advertisements = self.three_advertisements
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.register_advertisements(advertisements, orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms,
+ number_advs)
+
+ self.test_set_advertising_intervals(new_small_min_adv_interval_ms,
+ new_small_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_small_min_adv_interval_ms,
+ new_small_max_adv_interval_ms,
+ number_advs)
+
+ self.test_set_advertising_intervals(new_large_min_adv_interval_ms,
+ new_large_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_large_min_adv_interval_ms,
+ new_large_max_adv_interval_ms,
+ number_advs)
+
+ self.unregister_advertisements(advertisements,
+ new_large_min_adv_interval_ms,
+ new_large_max_adv_interval_ms)
+
+
+ @test_case_log
+ def test_case_RA5_CD_SI200_CD_FRA1_CD_UA5(self):
+ """Test Case: RA(5) - CD - SI(200) - CD - FRA(1) - CD - UA(5)"""
+ orig_min_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ orig_max_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.five_advertisements
+ extra_advertisement = self.sixth_advertisement
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.register_advertisements(advertisements, orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms,
+ number_advs)
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ self.test_fail_to_register_advertisement(extra_advertisement,
+ new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ self.unregister_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+
+ @test_case_log
+ def test_case_RA3_CD_SI200_CD_FSI10_CD_FSI20000_CD_UA3(self):
+ """Test Case: RA(3) - CD - SI(200) - CD - FSI(10) - CD - FSI(20000) - CD
+ - UA(3)
+ """
+ orig_min_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ orig_max_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ invalid_small_min_adv_interval_ms = 10
+ invalid_small_max_adv_interval_ms = 10
+ invalid_large_min_adv_interval_ms = 20000
+ invalid_large_max_adv_interval_ms = 20000
+ advertisements = self.three_advertisements
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.register_advertisements(advertisements, orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms,
+ number_advs)
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Fails to set intervals that are too small. Intervals remain the same.
+ self.test_fail_to_set_advertising_intervals(
+ invalid_small_min_adv_interval_ms,
+ invalid_small_max_adv_interval_ms,
+ new_min_adv_interval_ms, new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Fails to set intervals that are too large. Intervals remain the same.
+ self.test_fail_to_set_advertising_intervals(
+ invalid_large_min_adv_interval_ms,
+ invalid_large_max_adv_interval_ms,
+ new_min_adv_interval_ms, new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Unregister all advertisements.
+ self.unregister_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+
+ @test_case_log
+ def test_case_RA3_CD_SI200_CD_PC_CD_UA3(self):
+ """Test Case: RA(3) - CD - SI(200) - CD - PC - CD - UA(3)"""
+ orig_min_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ orig_max_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.three_advertisements
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.register_advertisements(advertisements, orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms,
+ number_advs)
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Turn off and then turn on the adapter.
+ self.test_power_off_adapter()
+ time.sleep(1)
+ self.test_power_on_adapter()
+
+ # Check if the advertising durations remain the same after resume.
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Unregister all advertisements.
+ self.unregister_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+
+ @test_case_log
+ def test_case_RA3_CD_SI200_CD_SR_CD_UA3(self):
+ """Test Case: RA(3) - CD - SI(200) - CD - SR - CD - UA(3)"""
+ orig_min_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ orig_max_adv_interval_ms = self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS
+ new_min_adv_interval_ms = 200
+ new_max_adv_interval_ms = 200
+ advertisements = self.three_advertisements
+ number_advs = len(advertisements)
+
+ self.test_reset_advertising()
+
+ self.register_advertisements(advertisements, orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(orig_min_adv_interval_ms,
+ orig_max_adv_interval_ms,
+ number_advs)
+
+ self.test_set_advertising_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Suspend for a while and resume.
+ self.suspend_resume()
+
+ # Check if the advertising durations remain the same after resume.
+ self.test_check_duration_and_intervals(new_min_adv_interval_ms,
+ new_max_adv_interval_ms,
+ number_advs)
+
+ # Unregister all advertisements.
+ self.unregister_advertisements(advertisements, new_min_adv_interval_ms,
+ new_max_adv_interval_ms)
+
+
+ def run_once(self, host, advertisements, multi_advertising):
"""Running Bluetooth adapter LE advertising autotest.
@param host: device under test host.
@param advertisements: a list of advertisement instances.
@param multi_advertising: indicating if this is multi-advertising.
- @param min_adv_interval_ms: min_adv_interval in milli-second.
- @param max_adv_interval_ms: max_adv_interval in milli-second.
"""
self.host = host
self.advertisements = advertisements
+ self.five_advertisements = advertisements[0:5]
+ self.three_advertisements = advertisements[0:3]
+ self.two_advertisements = advertisements[3:5]
+ self.sixth_advertisement = advertisements[5]
+
ble_adapter = bluetooth_le_facade_adapter.BluetoothLEFacadeRemoteAdapter
self.bluetooth_le_facade = ble_adapter(self.host)
self.bluetooth_facade = self.bluetooth_le_facade
@@ -74,41 +760,34 @@
# Reset the adapter to forget previous stored data and turn it on.
self.test_reset_on_adapter()
- # Test if new advertising intervals could be set correctly.
- self.test_set_advertising_intervals(min_adv_interval_ms,
- max_adv_interval_ms)
-
if multi_advertising:
- # For multiple advertisements, test all instances with the specified
- # advertising intervals.
- self.test_registration_and_reset(
- advertisements,
- min_adv_interval_ms,
- max_adv_interval_ms)
-
- # Test all instances with default advertising intervals.
- self.test_registration_and_reset(
- advertisements,
- self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS,
- self.DAFAULT_MAX_ADVERTISEMENT_INTERVAL_MS)
+ # Run all test cases for multiple advertisements.
+ self.test_case_SI200_RA3_CD_UA3()
+ self.test_case_SI200_RA3_CD_RA1_CD_UA1_CD_UA3()
+ self.test_case_SI200_RA3_CD_RS()
+ self.test_case_SI200_RA3_CD_UA1_CD_RS()
+ self.test_case_SI200_RA3_CD_PC_CD_UA3()
+ self.test_case_SI200_RA3_CD_SR_CD_UA3()
+ self.test_case_SI200_RA3_CD_UA1_CD_RA2_CD_UA4()
+ self.test_case_SI200_RA5_CD_FRA1_CD_UA5()
+ self.test_case_RA3_CD_SI200_CD_UA3()
+ self.test_case_RA3_CD_SI200_CD_RS()
+ self.test_case_RA3_CD_SI200_CD_UA1_CD_RS()
+ self.test_case_RA3_CD_SI200_CD_SI2000_CD_UA3()
+ self.test_case_RA5_CD_SI200_CD_FRA1_CD_UA5()
+ self.test_case_RA3_CD_SI200_CD_FSI10_CD_FSI20000_CD_UA3()
+ self.test_case_RA3_CD_SI200_CD_PC_CD_UA3()
+ self.test_case_RA3_CD_SI200_CD_SR_CD_UA3()
else:
- # For single advertisement, test the 1st advertisement with the
- # specified advertising intervals.
- self.test_registration_and_reset(
- advertisements[0:1],
- min_adv_interval_ms,
- max_adv_interval_ms)
+ # Run all test cases for single advertisement.
+ # TODO(josephsih): add test cases for single-advertising.
- # Test the 2nd advertisement with default advertising intervals.
# Note: it is required to change the advertisement instance
# so that the advertisement data could be monitored by btmon.
# Otherwise, the advertisement data would be just cached and
# reused such that the data would not be visible in btmon.
- self.test_registration_and_reset(
- advertisements[1:2],
- self.DAFAULT_MIN_ADVERTISEMENT_INTERVAL_MS,
- self.DAFAULT_MAX_ADVERTISEMENT_INTERVAL_MS)
+ pass
if self.fails:
raise error.TestFail(self.fails)
diff --git a/server/site_tests/bluetooth_AdapterLEAdvertising/control.multiple b/server/site_tests/bluetooth_AdapterLEAdvertising/control.multiple
index 8a019bd..344153d 100644
--- a/server/site_tests/bluetooth_AdapterLEAdvertising/control.multiple
+++ b/server/site_tests/bluetooth_AdapterLEAdvertising/control.multiple
@@ -3,13 +3,15 @@
# found in the LICENSE file.
from autotest_lib.server import utils
+from autotest_lib.server.cros.bluetooth import advertisements_data
+
AUTHOR = 'chromeos-chameleon'
NAME = 'bluetooth_AdapterLEAdvertising.multiple'
PURPOSE = 'Test bluetooth adapter advertising.'
CRITERIA = 'Adapter should advertise with correct parameters.'
ATTRIBUTES = 'suite:bluetooth, suite:bluetooth_sanity'
-TIME = 'SHORT'
+TIME = 'SHORT' # It takes about 15 minutes on a Samus.
TEST_CATEGORY = 'Functional'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'server'
@@ -22,9 +24,41 @@
verifies that advertisements could be registered and unregistered
continuously.
-Specifically, the subtests included in this autotest verify the
-following operations and parameters.
- - test_register_advertisement
+Specifically, this autotest include the following test cases:
+ self.test_case_SI200_RA3_CD_UA3()
+ self.test_case_SI200_RA3_CD_RA1_CD_UA1_CD_UA3()
+ self.test_case_SI200_RA3_CD_RS()
+ self.test_case_SI200_RA3_CD_UA1_CD_RS()
+ self.test_case_SI200_RA3_CD_PC_CD_UA3()
+ self.test_case_SI200_RA3_CD_SR_CD_UA3()
+ self.test_case_SI200_RA3_CD_UA1_CD_RA2_CD_UA4()
+ self.test_case_SI200_RA5_CD_FRA1_CD_UA5()
+ self.test_case_RA3_CD_SI200_CD_UA3()
+ self.test_case_RA3_CD_SI200_CD_RS()
+ self.test_case_RA3_CD_SI200_CD_UA1_CD_RS()
+ self.test_case_RA3_CD_SI200_CD_SI2000_CD_UA3()
+ self.test_case_RA5_CD_SI200_CD_FRA1_CD_UA5()
+ self.test_case_RA3_CD_SI200_CD_FSI10_CD_FSI20000_CD_UA3()
+ self.test_case_RA3_CD_SI200_CD_PC_CD_UA3()
+ self.test_case_RA3_CD_SI200_CD_SR_CD_UA3()
+
+
+Mnemonics of the test cases:
+ CD: check advertising duration and intervals
+ RA: register advertisements
+ UA: unregister advertisements
+ SI: set advertising intervals
+ RS: reset advertising
+ FRA: fail to register extra advertisements when max ones have
+ been registered.
+ FSI: fail to set advertising intervals beyond legitimate range
+ of [20 ms, 10,240 ms].
+ PC: power cycle the bluetooth adapter (controller).
+ SR: suspend and resume the DUT (chromebook)
+
+
+Every test case consists of a sequence of tests:
+ test_register_advertisement
* All advertisements are registered successfully.
* The advertising min/max intervals are set correctly.
. The intervals are set to specified values.
@@ -33,55 +67,35 @@
* The service UUIDs are set correctly.
* The service data is set correctly.
* Advertising is enabled consequently.
- - test_set_advertising_intervals
+ test_set_advertising_intervals
* The new advertising intervals are set correctly.
- - test_reset_advertising
+ test_reset_advertising
* All advertisement instances are removed.
* Advertising is disabled consequently.
+ test_check_duration_and_intervals
+ * The duration is correct.
+ * The new advertising intervals are set correctly.
+ test_fail_to_register_advertisement
+ * Max advertisements reached error.
+ * Extra advertisement is not added.
+ * The advertising min/max intervals remain the same.
+ * Advertising remains enabled.
+ test_unregister_advertisement
+ * The advertisement is removed.
+ * Advertising is disabled when the last one is removed.
+ test_fail_to_set_advertising_intervals
+ * It incurs invalid interval error.
+ * The advertising min/max intervals remain the same.
"""
-ADVERTISEMENT1 = {
- 'Path': '/org/bluez/test/advertisement1',
- 'Type': 'peripheral',
- 'ManufacturerData': {'0xff01': [0x1a, 0x1b, 0x1c, 0x1d, 0x1e]},
- 'ServiceUUIDs': ['180D', '180F'],
- 'SolicitUUIDs': [],
- 'ServiceData': {'9991': [0x11, 0x12, 0x13, 0x14, 0x15]},
- 'IncludeTxPower': True}
-
-ADVERTISEMENT2 = {
- 'Path': '/org/bluez/test/advertisement2',
- 'Type': 'peripheral',
- 'ManufacturerData': {'0xff02': [0x2a, 0x2b, 0x2c, 0x2d, 0x2e]},
- 'ServiceUUIDs': ['1821'],
- 'SolicitUUIDs': [],
- 'ServiceData': {'9992': [0x21, 0x22, 0x23, 0x24, 0x25]},
- 'IncludeTxPower': True}
-
-ADVERTISEMENT3 = {
- 'Path': '/org/bluez/test/advertisement3',
- 'Type': 'peripheral',
- 'ManufacturerData': {'0xff03': [0x3a, 0x3b, 0x3c, 0x3d, 0x3e]},
- 'ServiceUUIDs': ['1819', '180E'],
- 'SolicitUUIDs': [],
- 'ServiceData': {'9993': [0x31, 0x32, 0x33, 0x34, 0x35]},
- 'IncludeTxPower': True}
-
-ADVERTISEMENTS = [ADVERTISEMENT1, ADVERTISEMENT2, ADVERTISEMENT3]
-
-
-MIN_ADV_INTERVAL_MS = 200
-MAX_ADV_INTERVAL_MS = 200
-
-
args_dict = utils.args_to_dict(args)
def run(machine):
host = hosts.create_host(machine)
- job.run_test('bluetooth_AdapterLEAdvertising', host=host,
- advertisements=ADVERTISEMENTS, multi_advertising=True,
- min_adv_interval_ms=MIN_ADV_INTERVAL_MS,
- max_adv_interval_ms=MAX_ADV_INTERVAL_MS)
+ job.run_test('bluetooth_AdapterLEAdvertising',
+ host=host,
+ advertisements=advertisements_data.ADVERTISEMENTS,
+ multi_advertising=True)
parallel_simple(run, machines)
diff --git a/server/site_tests/bluetooth_AdapterLEAdvertising/control.single b/server/site_tests/bluetooth_AdapterLEAdvertising/control.single
index 224ff9f..9ff2e54 100644
--- a/server/site_tests/bluetooth_AdapterLEAdvertising/control.single
+++ b/server/site_tests/bluetooth_AdapterLEAdvertising/control.single
@@ -3,12 +3,14 @@
# found in the LICENSE file.
from autotest_lib.server import utils
+from autotest_lib.server.cros.bluetooth import advertisements_data
+
AUTHOR = 'chromeos-chameleon'
NAME = 'bluetooth_AdapterLEAdvertising.single'
PURPOSE = 'Test bluetooth adapter advertising.'
CRITERIA = 'Adapter should advertise with correct parameters.'
-ATTRIBUTES = 'suite:bluetooth, suite:bluetooth_sanity'
+ATTRIBUTES = 'suite:bluetooth'
TIME = 'SHORT'
TEST_CATEGORY = 'Functional'
TEST_CLASS = 'bluetooth'
@@ -41,27 +43,6 @@
"""
-ADVERTISEMENT1 = {
- 'Path': '/org/bluez/test/advertisement1',
- 'Type': 'peripheral',
- 'ManufacturerData': {'0xff01': [0x1a, 0x1b, 0x1c, 0x1d, 0x1e]},
- 'ServiceUUIDs': ['180D', '180F'],
- 'SolicitUUIDs': [],
- 'ServiceData': {'9991': [0x11, 0x12, 0x13, 0x14, 0x15]},
- 'IncludeTxPower': True}
-
-ADVERTISEMENT2 = {
- 'Path': '/org/bluez/test/advertisement2',
- 'Type': 'peripheral',
- 'ManufacturerData': {'0xff02': [0x2a, 0x2b, 0x2c, 0x2d, 0x2e]},
- 'ServiceUUIDs': ['1821'],
- 'SolicitUUIDs': [],
- 'ServiceData': {'9992': [0x21, 0x22, 0x23, 0x24, 0x25]},
- 'IncludeTxPower': True}
-
-ADVERTISEMENTS = [ADVERTISEMENT1, ADVERTISEMENT2]
-
-
MIN_ADV_INTERVAL_MS = 300
MAX_ADV_INTERVAL_MS = 400
@@ -71,7 +52,8 @@
def run(machine):
host = hosts.create_host(machine)
job.run_test('bluetooth_AdapterLEAdvertising', host=host,
- advertisements=ADVERTISEMENTS, multi_advertising=False,
+ advertisements=advertisements_data.ADVERTISEMENTS,
+ multi_advertising=False,
min_adv_interval_ms=MIN_ADV_INTERVAL_MS,
max_adv_interval_ms=MAX_ADV_INTERVAL_MS)