# 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.

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'
TIME = 'SHORT'
TEST_CATEGORY = 'Functional'
TEST_CLASS = 'bluetooth'
TEST_TYPE = 'server'
DEPENDENCIES = 'bluetooth'

DOC = """
This test case verifies that the Bluetooth adapter of the DUT can
behave as a Bluetooth low-energy device and register a single
advertisement with data and parameters correctly. This test case also
verifies that the single advertisement could be registered and
unregistered continuously.

This autotest include the following test cases:
     self.test_case_SI200_RA1_CD_UA1()
     self.test_case_SI200_RA1_CD_RS()
     self.test_case_RA1_CD_SI200_CD_UA1()
     self.test_case_RA1_CD_SI200_CD_RS()
     self.test_case_RA1_CD_SI200_CD_FSI10_UA1_RA1_CD_UA1()
     self.test_case_RA1_CD_SI200_CD_FSI20000_UA1_RA1_CD_UA1()

Specifically, the subtests included in this autotest verify the
following operations and parameters.
    - test_register_advertisement
      * A single advertisement is registered successfully.
      * The advertising min/max intervals are set correctly.
        . The intervals are set to specified values.
        . The intervals are set to default values after reset.
      * The manufacturer id is set correctly.
      * The service UUIDs are set correctly.
      * The service data is set correctly.
      * Advertising is enabled consequently.
    - test_set_advertising_intervals
      * The new advertising intervals are set correctly.
    - test_reset_advertising
      * The single advertisement instance is removed.
      * Advertising is disabled consequently.

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)

"""

args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test('bluetooth_AdapterLEAdvertising',
                 host=host,
                 advertisements=advertisements_data.ADVERTISEMENTS,
                 test_type='single_advertising')

parallel_simple(run, machines)