xref: /aosp_15_r20/tools/netsim/testing/mobly/ble_gatt_test.py (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1*cf78ab8cSAndroid Build Coastguard Worker"""BLE GATT connection test."""
2*cf78ab8cSAndroid Build Coastguard Worker
3*cf78ab8cSAndroid Build Coastguard Workerimport ble_utils
4*cf78ab8cSAndroid Build Coastguard Workerfrom mobly import base_test
5*cf78ab8cSAndroid Build Coastguard Workerfrom mobly import test_runner
6*cf78ab8cSAndroid Build Coastguard Workerfrom mobly.controllers import android_device
7*cf78ab8cSAndroid Build Coastguard Worker
8*cf78ab8cSAndroid Build Coastguard Worker
9*cf78ab8cSAndroid Build Coastguard Workerclass BleBasicTest(base_test.BaseTestClass):
10*cf78ab8cSAndroid Build Coastguard Worker  """Tests the basic E2E connection flow for BLE."""
11*cf78ab8cSAndroid Build Coastguard Worker
12*cf78ab8cSAndroid Build Coastguard Worker  def setup_class(self):
13*cf78ab8cSAndroid Build Coastguard Worker    self.ads = self.register_controller(android_device, min_number=2)
14*cf78ab8cSAndroid Build Coastguard Worker    for device in self.ads:
15*cf78ab8cSAndroid Build Coastguard Worker      device.load_snippet('mbs', android_device.MBS_PACKAGE)
16*cf78ab8cSAndroid Build Coastguard Worker      device.mbs.btEnable()
17*cf78ab8cSAndroid Build Coastguard Worker    self.initiator, self.receiver = self.ads[:2]
18*cf78ab8cSAndroid Build Coastguard Worker    # The initiator device scans BLE devices and behaves as a GATT client.
19*cf78ab8cSAndroid Build Coastguard Worker    self.initiator.debug_tag = 'initiator'
20*cf78ab8cSAndroid Build Coastguard Worker    # The receiver device advertises and behaves as a GATT server.
21*cf78ab8cSAndroid Build Coastguard Worker    self.receiver.debug_tag = 'receiver'
22*cf78ab8cSAndroid Build Coastguard Worker
23*cf78ab8cSAndroid Build Coastguard Worker  def test_ble_gatt_read_write(self):
24*cf78ab8cSAndroid Build Coastguard Worker    """Test for making a GATT connection and reading and writing messages.
25*cf78ab8cSAndroid Build Coastguard Worker
26*cf78ab8cSAndroid Build Coastguard Worker    Steps:
27*cf78ab8cSAndroid Build Coastguard Worker      1. Starts BLE scan and advertising, and complete the discovery process.
28*cf78ab8cSAndroid Build Coastguard Worker      2. Initiator connects to receiver.
29*cf78ab8cSAndroid Build Coastguard Worker      3. Initiator discovers the BLE service receiver provided.
30*cf78ab8cSAndroid Build Coastguard Worker      4. Initiator reads a message from receiver.
31*cf78ab8cSAndroid Build Coastguard Worker      5. Initiator sends a message to receiver.
32*cf78ab8cSAndroid Build Coastguard Worker      6. Initiator disconnects from receiver.
33*cf78ab8cSAndroid Build Coastguard Worker      7. BLE scan and advertising stopped.
34*cf78ab8cSAndroid Build Coastguard Worker
35*cf78ab8cSAndroid Build Coastguard Worker    Verifies:
36*cf78ab8cSAndroid Build Coastguard Worker      In each step, initiator and receiver get corresponding callbacks.
37*cf78ab8cSAndroid Build Coastguard Worker    """
38*cf78ab8cSAndroid Build Coastguard Worker    ble_utils.Discover(self.initiator, self.receiver)
39*cf78ab8cSAndroid Build Coastguard Worker    ble_utils.Connect(self.initiator, self.receiver)
40*cf78ab8cSAndroid Build Coastguard Worker    ble_utils.DiscoverServices(self.initiator)
41*cf78ab8cSAndroid Build Coastguard Worker    ble_utils.ReadCharacteristic(self.initiator)
42*cf78ab8cSAndroid Build Coastguard Worker    ble_utils.WriteCharacteristic(self.initiator, self.receiver)
43*cf78ab8cSAndroid Build Coastguard Worker    ble_utils.Disconnect(self.initiator, self.receiver)
44*cf78ab8cSAndroid Build Coastguard Worker    ble_utils.StopDiscover(self.initiator, self.receiver)
45*cf78ab8cSAndroid Build Coastguard Worker
46*cf78ab8cSAndroid Build Coastguard Worker
47*cf78ab8cSAndroid Build Coastguard Workerif __name__ == '__main__':
48*cf78ab8cSAndroid Build Coastguard Worker  test_runner.main()
49