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

Commit c87c5246 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge changes from topic "avatar-skip-logic" am: 75ed0150

parents 60aba173 75ed0150
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]
+14 −9
Original line number Diff line number Diff line
#!/usr/bin/env bash
_BT_ROOT="${ANDROID_BUILD_TOP}/packages/modules/Bluetooth"
_TEST_ROOT="${_BT_ROOT}/android/pandora/test"
_TEST_FILES=("${_TEST_ROOT}/main.py" "${_TEST_ROOT}/"*_test.py)

_USAGE="avatar [OPTIONS] <COMMAND> ...
  OPTIONS:
    -h, --help           Show this message and exit.
@@ -24,6 +20,15 @@ _USAGE="avatar [OPTIONS] <COMMAND> ...
                         See 'avatar run --help-all'
    "

_BT_ROOT="${ANDROID_BUILD_TOP}/packages/modules/Bluetooth"
_TEST_ROOT="${_BT_ROOT}/android/pandora/test"
_PY_SOURCES=(
  "${ANDROID_BUILD_TOP}/external/pandora/avatar/"{avatar,examples}
  "${_BT_ROOT}/pandora/server/bumble_experimental"
  "${_TEST_ROOT}/"*_test.py
  "${_TEST_ROOT}/main.py"
)

_PANDORA_PYTHON_PATHS=(
  "${_BT_ROOT}/pandora/server/"
  "${ANDROID_BUILD_TOP}/external/pandora/avatar/"
@@ -39,23 +44,23 @@ case "$1" in
    pip install \
      'black==22.10.0' \
      'isort==5.12.0'
    black -S -l 119 "$@" "${_TEST_FILES[@]}"
    isort --profile black -l 119 --ds --lbt 1 --ca "$@" "${_TEST_FILES[@]}"
    black -S -l 119 "$@" "${_PY_SOURCES[@]}"
    isort --profile black -l 119 --ds --lbt 1 --ca "$@" "${_PY_SOURCES[@]}"
  ;;
  'lint') shift
    pip install \
      'grpcio==1.51.1' \
      'protobuf==4.21.0' \
      'pyright==1.1.298' \
      'mypy==1.0' \
      'mypy==1.1.1' \
      'types-protobuf==4.21.0.3'
    export PYTHONPATH="$(IFS=:; echo "${_PANDORA_PYTHON_PATHS[*]}"):${PYTHONPATH}"
    mypy \
      --pretty --show-column-numbers --strict --no-warn-unused-ignores --ignore-missing-imports \
      "$@" "${_TEST_FILES[@]}" || exit 1
      "$@" "${_PY_SOURCES[@]}" || exit 1
    pyright \
      -p "${_TEST_ROOT}" \
      "$@" "${_TEST_FILES[@]}"
      "$@" "${_PY_SOURCES[@]}"
  ;;
  'run') shift
    tradefed.sh \
+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'
+11 −0
Original line number Diff line number Diff line
@@ -2,6 +2,17 @@ function avatar {
  # avatar script.
  _AVATAR="${ANDROID_BUILD_TOP}/packages/modules/Bluetooth/android/pandora/test/avatar.sh"

  if ! command -v python3 &> /dev/null; then
    echo "python3: command not found" 1>&2
    echo "  on linux: 'sudo apt install python3 python3-pip'" 1>&2
    return 1
  fi
  if ! command -v pip &> /dev/null; then
    echo "pip: command not found" 1>&2
    echo "  on linux: 'sudo apt install python3 python3-pip'" 1>&2
    return 1
  fi

  # only compile when needed.
  if [[ "$1" == "run" ]]; then
    m avatar avatar.sh PandoraServer tradefed || return 1
Loading