Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0adb8740 authored by uael's avatar uael
Browse files

avatar: update to latest avatar skip logic

This is pre work to enable testing multiple test beds.

Test: avatar run
Bug: 273400544
Change-Id: Ic52378c9b867ded28eec15d8abe131ca1da035ad
parent 51ab52b8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -40,6 +40,6 @@
        <option name="mobly-par-file-name" value="avatar" />
        <option name="mobly-config-file-name" value="config.yml" />
        <option name="mobly-test-timeout" value="1800000" />
        <option name="test-bed" value="android.bumble" />
        <option name="test-bed" value="android.bumbles" />
    </test>
</configuration>
+26 −23
Original line number Diff line number Diff line
@@ -13,17 +13,17 @@
# limitations under the License.

import asyncio
import avatar
import logging
import time

from avatar import PandoraDevices, parameterized
from avatar.aio import asynchronous
from avatar.bumble_server.security import PairingDelegate
from avatar.pandora_client import BumblePandoraClient, PandoraClient
from avatar import BumblePandoraDevice, PandoraDevice, PandoraDevices
from bumble.gatt import GATT_ASHA_SERVICE
from mobly import base_test, test_runner
from bumble.smp import PairingDelegate
from mobly import base_test, signals, test_runner
from mobly.asserts import assert_equal  # type: ignore
from mobly.asserts import assert_in  # type: ignore
from mobly.asserts import skip  # type: ignore
from pandora._utils import Stream
from pandora.host_pb2 import PUBLIC, RANDOM, AdvertiseResponse, Connection, DataTypes, OwnAddressType, ScanningResponse
from pandora.security_pb2 import LE_LEVEL3, LESecurityLevel
@@ -37,22 +37,28 @@ COMPLETE_LOCAL_NAME: str = "Bumble"

class ASHATest(base_test.BaseTestClass):  # type: ignore[misc]
    devices: Optional[PandoraDevices] = None
    dut: PandoraClient
    ref: BumblePandoraClient

    # pandora devices.
    dut: PandoraDevice
    ref: PandoraDevice

    def setup_class(self) -> None:
        self.devices = PandoraDevices(self)
        dut, ref, *_ = self.devices
        assert isinstance(ref, BumblePandoraClient)
        self.dut, self.ref = dut, ref
        self.dut, self.ref, *_ = self.devices

    def teardown_class(self) -> None:
        if self.devices:
            self.devices.stop_all()

    @asynchronous
    @avatar.asynchronous
    async def setup_test(self) -> None:
        await asyncio.gather(self.dut.reset(), self.ref.reset())

        if isinstance(self.dut, BumblePandoraDevice):
            raise signals.TestSkip('DUT Bumble does not support Asha source')
        if not isinstance(self.ref, BumblePandoraDevice):
            raise signals.TestSkip('Test require Bumble as reference device(s)')

        # ASHA hearing aid's IO capability is NO_OUTPUT_NO_INPUT
        setattr(self.ref.device, "io_capability", PairingDelegate.NO_OUTPUT_NO_INPUT)

@@ -95,8 +101,7 @@ class ASHATest(base_test.BaseTestClass): # type: ignore[misc]
        # DUT connects to Ref
        dut_ref = self.dut.host.ConnectLE(own_address_type=dut_address_type, **ref.address_asdict()).connection
        ref_dut = (next(advertisement)).connection
        assert dut_ref
        assert ref_dut
        assert dut_ref, ref_dut

        advertisement.cancel()
        return dut_ref, ref_dut
@@ -164,7 +169,7 @@ class ASHATest(base_test.BaseTestClass): # type: ignore[misc]
            (scan_result.data.service_data_uuid16[ASHA_UUID]).hex(),
        )

    @parameterized(
    @avatar.parameterized(
        (RANDOM, PUBLIC),
        (RANDOM, RANDOM),
    )  # type: ignore[misc]
@@ -191,7 +196,7 @@ class ASHATest(base_test.BaseTestClass): # type: ignore[misc]

        assert_equal(secure.WhichOneof("result"), "success")

    @parameterized(
    @avatar.parameterized(
        (RANDOM, PUBLIC),
        (RANDOM, RANDOM),
    )  # type: ignore[misc]
@@ -204,9 +209,7 @@ class ASHATest(base_test.BaseTestClass): # type: ignore[misc]
        DUT removes bond with Ref.
        Verify that DUT and Ref are disconnected and unbonded.
        """
        from mobly.signals import TestSkip

        raise TestSkip("update rootcanal to retry")
        raise signals.TestSkip("TODO: update rootcanal to retry")

        advertisement = self.ref_advertise_asha(ref_address_type=ref_address_type)
        ref = self.dut_scan_for_asha(dut_address_type=ref_address_type)
@@ -237,7 +240,7 @@ class ASHATest(base_test.BaseTestClass): # type: ignore[misc]

        assert_equal(secure.WhichOneof("result"), "success")

    @parameterized(
    @avatar.parameterized(
        (RANDOM, RANDOM),
        (RANDOM, PUBLIC),
    )  # type: ignore[misc]
@@ -253,7 +256,7 @@ class ASHATest(base_test.BaseTestClass): # type: ignore[misc]
        assert dut_ref
        assert ref_dut

    @parameterized(
    @avatar.parameterized(
        (RANDOM, RANDOM),
        (RANDOM, PUBLIC),
    )  # type: ignore[misc]
@@ -272,7 +275,7 @@ class ASHATest(base_test.BaseTestClass): # type: ignore[misc]

        self.dut.host.Disconnect(connection=dut_ref)

    @parameterized(
    @avatar.parameterized(
        (RANDOM, RANDOM),
        (RANDOM, PUBLIC),
    )  # type: ignore[misc]
@@ -292,7 +295,7 @@ class ASHATest(base_test.BaseTestClass): # type: ignore[misc]
        assert ref_dut
        self.ref.host.Disconnect(connection=ref_dut)

    @parameterized(
    @avatar.parameterized(
        (RANDOM, RANDOM, 0),
        (RANDOM, RANDOM, 0.5),
        (RANDOM, RANDOM, 1),
@@ -322,7 +325,7 @@ class ASHATest(base_test.BaseTestClass): # type: ignore[misc]
        time.sleep(reconnection_gap)
        connect_and_disconnect()

    @parameterized(
    @avatar.parameterized(
        (RANDOM, RANDOM),
        (RANDOM, PUBLIC),
    )  # type: ignore[misc]
+4 −9
Original line number Diff line number Diff line
---

TestBeds:
- Name: android.bumble
- Name: android.bumbles
  Controllers:
    AndroidDevice: '*'
    BumbleDevice:
    - transport: 'tcp-client:127.0.0.1:6211'
      classic_enabled: true
- Name: bumble.bumble
    - transport: 'tcp-client:127.0.0.1:6211'
- Name: bumble.bumbles
  Controllers:
    BumbleDevice:
    - transport: 'tcp-client:127.0.0.1:7300'
      classic_enabled: true
      class_of_device: 2360324
      io_capability: display_output_only
    - transport: 'tcp-client:127.0.0.1:7300'
      classic_enabled: true
      class_of_device: 2360324
    AndroidDevice: '*'
    - transport: 'tcp-client:127.0.0.1:7300'
+12 −8
Original line number Diff line number Diff line
@@ -13,13 +13,14 @@
# limitations under the License.

import asyncio
import avatar
import logging

from avatar import BumbleDevice, PandoraDevice, PandoraDevices, asynchronous, bumble_server
from avatar import BumblePandoraDevice, PandoraDevice, PandoraDevices, bumble_server
from bumble.gatt import Characteristic, Service
from bumble.smp import PairingConfig
from bumble_experimental.gatt import GATTService
from mobly import base_test, test_runner
from mobly import base_test, signals, test_runner
from pandora.host_pb2 import RANDOM, Connection, DataTypes
from pandora.security_pb2 import LE_LEVEL3, PairingEventAnswer, SecureResponse
from pandora_experimental.gatt_grpc import GATT
@@ -33,7 +34,7 @@ class GattTest(base_test.BaseTestClass): # type: ignore[misc]

    # pandora devices.
    dut: PandoraDevice
    ref: BumbleDevice
    ref: PandoraDevice

    def setup_class(self) -> None:
        # Register experimental bumble servicers hook.
@@ -42,15 +43,13 @@ class GattTest(base_test.BaseTestClass): # type: ignore[misc]
        )

        self.devices = PandoraDevices(self)
        dut, ref = self.devices
        assert isinstance(ref, BumbleDevice)
        self.dut, self.ref = dut, ref
        self.dut, self.ref, *_ = self.devices

    def teardown_class(self) -> None:
        if self.devices:
            self.devices.stop_all()

    @asynchronous
    @avatar.asynchronous
    async def setup_test(self) -> None:
        await asyncio.gather(self.dut.reset(), self.ref.reset())

@@ -84,8 +83,13 @@ class GattTest(base_test.BaseTestClass): # type: ignore[misc]
        services = gatt.DiscoverServices(ref_dut)
        self.ref.log.info(f'REF services: {services}')

    @asynchronous
    @avatar.asynchronous
    async def test_read_characteristic_while_pairing(self) -> None:
        if isinstance(self.dut, BumblePandoraDevice):
            raise signals.TestSkip('TODO: b/273941061')
        if not isinstance(self.ref, BumblePandoraDevice):
            raise signals.TestSkip('Test require Bumble as reference device(s)')

        async def connect_dut_to_ref() -> Tuple[Connection, Connection]:
            ref_advertisement = self.ref.aio.host.Advertise(
                legacy=True,