Files
esp-idf/examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py
2024-12-27 16:29:05 +08:00

226 lines
11 KiB
Python

# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: CC0-1.0
import os.path
from typing import Tuple
import pytest
from pytest_embedded_idf.dut import IdfDut
# Case 1: ble50 security client and ble50 security server test
# EXAMPLE_CI_ID=6
@pytest.mark.esp32c3
@pytest.mark.esp32c6
@pytest.mark.esp32c5
@pytest.mark.esp32h2
@pytest.mark.esp32s3
@pytest.mark.esp32c61
@pytest.mark.wifi_two_dut
@pytest.mark.parametrize(
'count, app_path, config, erase_nvs', [
(2,
f'{os.path.join(os.path.dirname(__file__), "ble50_security_server")}|{os.path.join(os.path.dirname(__file__), "ble50_security_client")}',
'name', 'y'),
],
indirect=True,
)
def test_ble50_security_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None:
server = dut[0]
client = dut[1]
client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8')
server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8')
server.expect_exact('Extended advertising params set, status 0', timeout=30)
server.expect_exact('Extended advertising data set, status 0', timeout=30)
server.expect_exact('Extended advertising start, status 0', timeout=30)
client.expect_exact('Extended scanning start successfully', timeout=30)
client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30)
server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30)
server.expect_exact('Pairing successfully', timeout=30)
client.expect_exact('Pairing successfully', timeout=30)
server.expect_exact('Bonded devices number 1', timeout=30)
server.expect_exact('Characteristic write', timeout=30)
client.expect_exact('Service discover complete', timeout=30)
client.expect_exact('Service search complete', timeout=30)
client.expect_exact('MTU exchange, status 0', timeout=30)
client.expect_exact('Descriptor write successfully', timeout=30)
# Case 2: ble50 security client and ble50 security server test for ESP32C2 26mhz xtal
# EXAMPLE_CI_ID=6
@pytest.mark.esp32c2
@pytest.mark.wifi_two_dut
@pytest.mark.xtal_26mhz
@pytest.mark.parametrize(
'count, target, baud, app_path, config, erase_nvs', [
(2, 'esp32c2|esp32c2', '74880',
f'{os.path.join(os.path.dirname(__file__), "ble50_security_server")}|{os.path.join(os.path.dirname(__file__), "ble50_security_client")}',
'esp32c2_xtal26m', 'y'),
],
indirect=True,
)
def test_c2_26mhz_xtal_ble50_security_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None:
server = dut[0]
client = dut[1]
client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8')
server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8')
server.expect_exact('Extended advertising params set, status 0', timeout=30)
server.expect_exact('Extended advertising data set, status 0', timeout=30)
server.expect_exact('Extended advertising start, status 0', timeout=30)
client.expect_exact('Extended scanning start successfully', timeout=30)
client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30)
server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30)
server.expect_exact('Pairing successfully', timeout=30)
client.expect_exact('Pairing successfully', timeout=30)
server.expect_exact('Bonded devices number 1', timeout=30)
server.expect_exact('Characteristic write', timeout=30)
client.expect_exact('Service discover complete', timeout=30)
client.expect_exact('Service search complete', timeout=30)
client.expect_exact('MTU exchange, status 0', timeout=30)
client.expect_exact('Descriptor write successfully', timeout=30)
# Case 3: period_adv and period_sync test
# EXAMPLE_CI_ID=8
@pytest.mark.esp32c3
@pytest.mark.esp32c6
@pytest.mark.esp32c5
@pytest.mark.esp32h2
@pytest.mark.esp32s3
@pytest.mark.esp32c61
@pytest.mark.wifi_two_dut
@pytest.mark.parametrize(
'count, app_path, config, erase_nvs', [
(2,
f'{os.path.join(os.path.dirname(__file__), "periodic_adv")}|{os.path.join(os.path.dirname(__file__), "periodic_sync")}',
'name', 'y'),
],
indirect=True,
)
def test_period_adv_sync_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None:
adv_dut = dut[0]
sync_dut = dut[1]
adv_dut.expect_exact('Extended advertising params set, status 0', timeout=30)
adv_dut.expect_exact('Extended advertising random address set, status 0', timeout=30)
adv_dut.expect_exact('Extended advertising data set, status 0', timeout=30)
adv_dut.expect_exact('Extended advertising start, status 0', timeout=30)
adv_dut.expect_exact('Periodic advertising params set, status 0', timeout=30)
adv_dut.expect_exact('Periodic advertising data set, status 0', timeout=30)
adv_dut.expect_exact('Periodic advertising start, status 0', timeout=30)
sync_dut.expect_exact('Extended scanning params set, status 0', timeout=30)
sync_dut.expect_exact('Extended scanning start, status 0', timeout=30)
sync_dut.expect_exact(f'Create sync with the peer device BE', timeout=30)
sync_dut.expect_exact('Periodic advertising sync establish, status 0', timeout=30)
sync_dut.expect_exact('Periodic adv report, sync handle ', timeout=30)
# Case 4: period_adv and period_sync test for ESP32C2 26mhz xtal
# EXAMPLE_CI_ID=8
@pytest.mark.esp32c2
@pytest.mark.wifi_two_dut
@pytest.mark.xtal_26mhz
@pytest.mark.parametrize(
'count, target, baud, app_path, config, erase_nvs', [
(2, 'esp32c2|esp32c2', '74880',
f'{os.path.join(os.path.dirname(__file__), "periodic_adv")}|{os.path.join(os.path.dirname(__file__), "periodic_sync")}',
'esp32c2_xtal26m', 'y'),
],
indirect=True,
)
def test_c2_26mhz_xtal_period_adv_sync_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None:
adv_dut = dut[0]
sync_dut = dut[1]
adv_dut.expect_exact('Extended advertising params set, status 0', timeout=30)
adv_dut.expect_exact('Extended advertising random address set, status 0', timeout=30)
adv_dut.expect_exact('Extended advertising data set, status 0', timeout=30)
adv_dut.expect_exact('Extended advertising start, status 0', timeout=30)
adv_dut.expect_exact('Periodic advertising params set, status 0', timeout=30)
adv_dut.expect_exact('Periodic advertising data set, status 0', timeout=30)
adv_dut.expect_exact('Periodic advertising start, status 0', timeout=30)
sync_dut.expect_exact('Extended scanning params set, status 0', timeout=30)
sync_dut.expect_exact('Extended scanning start, status 0', timeout=30)
sync_dut.expect_exact(f'Create sync with the peer device BE', timeout=30)
sync_dut.expect_exact('Periodic advertising sync establish, status 0', timeout=30)
sync_dut.expect_exact('Periodic adv report, sync handle ', timeout=30)
# Case 5: ble50 security client and ble50 security server config test
# EXAMPLE_CI_ID=7
@pytest.mark.esp32c3
@pytest.mark.esp32c6
@pytest.mark.esp32c5
@pytest.mark.esp32h2
@pytest.mark.esp32s3
@pytest.mark.esp32c61
@pytest.mark.wifi_two_dut
@pytest.mark.parametrize(
'count, app_path, config, erase_nvs', [
(2,
f'{os.path.join(os.path.dirname(__file__), "ble50_security_server")}|{os.path.join(os.path.dirname(__file__), "ble50_security_client")}',
'cfg_test', 'y'),
],
indirect=True,
)
def test_ble50_security_config_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None:
server = dut[0]
client = dut[1]
client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8')
server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8')
server.expect_exact('Extended advertising params set, status 0', timeout=30)
server.expect_exact('Extended advertising data set, status 0', timeout=30)
server.expect_exact('Extended advertising start, status 0', timeout=30)
client.expect_exact('Extended scanning start successfully', timeout=30)
client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30)
server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30)
server.expect_exact('Pairing successfully', timeout=30)
client.expect_exact('Pairing successfully', timeout=30)
server.expect_exact('Bonded devices number 1', timeout=30)
server.expect_exact('Characteristic write', timeout=30)
client.expect_exact('Service discover complete', timeout=30)
client.expect_exact('Service search complete', timeout=30)
client.expect_exact('MTU exchange, status 0', timeout=30)
client.expect_exact('Descriptor write successfully', timeout=30)
client.serial.erase_flash()
server.serial.erase_flash()
# Case 6: ble50 security client and ble50 security server config test for ESP32C2 26mhz xtal
# EXAMPLE_CI_ID=7
@pytest.mark.esp32c2
@pytest.mark.wifi_two_dut
@pytest.mark.xtal_26mhz
@pytest.mark.parametrize(
'count, target, baud, app_path, config, erase_nvs', [
(2, 'esp32c2|esp32c2', '74880',
f'{os.path.join(os.path.dirname(__file__), "ble50_security_server")}|{os.path.join(os.path.dirname(__file__), "ble50_security_client")}',
'esp32c2_cfg_test', 'y'),
],
indirect=True,
)
def test_c2_26mhz_xtal_ble50_security_config_func(app_path: str, dut: Tuple[IdfDut, IdfDut]) -> None:
server = dut[0]
client = dut[1]
client_addr = client.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8')
server_addr = server.expect(r'Bluetooth MAC: (([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2})', timeout=30).group(1).decode('utf8')
server.expect_exact('Extended advertising params set, status 0', timeout=30)
server.expect_exact('Extended advertising data set, status 0', timeout=30)
server.expect_exact('Extended advertising start, status 0', timeout=30)
client.expect_exact('Extended scanning start successfully', timeout=30)
client.expect_exact(f'Connected, conn_id 0, remote {server_addr}', timeout=30)
server.expect_exact(f'Connected, conn_id 0, remote {client_addr}', timeout=30)
server.expect_exact('Pairing successfully', timeout=30)
client.expect_exact('Pairing successfully', timeout=30)
server.expect_exact('Bonded devices number 1', timeout=30)
server.expect_exact('Characteristic write', timeout=30)
client.expect_exact('Service discover complete', timeout=30)
client.expect_exact('Service search complete', timeout=30)
client.expect_exact('MTU exchange, status 0', timeout=30)
client.expect_exact('Descriptor write successfully', timeout=30)
client.serial.erase_flash()
server.serial.erase_flash()