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

Commit f401ec5a authored by Hansong Zhang's avatar Hansong Zhang
Browse files

Cert: Run on device

Add a sample device_config.json to allow cert testing on device.

1. Fill in Android device serial number in device_config.json.
2. Build device target for libbluetooth_gd, libgrpc++_unsecure,
stack_with_facade, and bluetooth_cert_stack. Push them to the device
under /system/lib64 and /system/bin correspondingly.
3. Set up Android tcp forward and reverse
   - For DUT:
     adb -s <DUT> forward tcp:8899 tcp:8899
     adb -s <DUT> forward tcp:8897 tcp:8897
     adb -s <DUT> reverse tcp:8895 tcp:8895 <- host is the server
   - For CERT:
     adb -s <DUT> forward tcp:8898 tcp:8898
     adb -s <DUT> forward tcp:8896 tcp:8896
     adb -s <DUT> reverse tcp:8894 tcp:8884 <- Host is the server
4. Run cert/run_device_cert.sh

Bug: 138260216
Test: cert/run_device_cert.sh
Change-Id: Ic2921a31910e370d86c4aa4143e92b5b15d8a1e8
parent 5571fc2d
Loading
Loading
Loading
Loading
+52 −0
Original line number Diff line number Diff line
{   "_description": "Bluetooth cert testing",
    "testbed":
    [
        {
            "_description": "Two Android devices cert testbed",
            "name": "AndroidDeviceCert",
            "GdDevice":
            [
                {
                    "grpc_port": "8899",
                    "grpc_root_server_port": "8897",
                    "signal_port": "8895",
                    "label": "stack_under_test",
                    "serial_number": "DUT",
                    "cmd":
                    [
                        "adb",
                        "-s",
                        "$(serial_number)",
                        "shell",
                        "/system/bin/stack_with_facade",
                        "--grpc-port=$(grpc_port)",
                        "--root-server-port=$(grpc_root_server_port)",
                        "--signal-port=$(signal_port)"
                    ]
                }
            ],
            "GdCertDevice":
            [
                {
                    "grpc_port": "8898",
                    "grpc_root_server_port": "8896",
                    "signal_port": "8894",
                    "label": "cert_stack",
                    "serial_number": "CERT",
                    "cmd":
                    [
                        "adb",
                        "-s",
                        "$(serial_number)",
                        "shell",
                        "/system/bin/bluetooth_cert_stack",
                        "--grpc-port=$(grpc_port)",
                        "--root-server-port=$(grpc_root_server_port)",
                        "--signal-port=$(signal_port)"
                    ]
                }
            ]
        }
    ],
    "logpath": "/tmp/logs"
}
+31 −27
Original line number Diff line number Diff line
@@ -37,7 +37,12 @@ class GdBaseTestClass(BaseTestClass):
        log_path_base = configs.get('log_path', '/tmp/logs')
        rootcanal_logpath = os.path.join(log_path_base, 'rootcanal_logs.txt')
        self.rootcanal_logs = open(rootcanal_logpath, 'w')
        gd_devices = self.testbed_configs.get("GdDevice")
        gd_cert_devices = self.testbed_configs.get("GdCertDevice")

        self.rootcanal_running = False
        if 'rootcanal' in configs["testbed_configs"]:
            self.rootcanal_running = True
            rootcanal_config = configs["testbed_configs"]['rootcanal']
            rootcanal_hci_port = str(rootcanal_config.get("hci_port", "6402"))
            self.rootcanal_process = subprocess.Popen(
@@ -52,11 +57,8 @@ class GdBaseTestClass(BaseTestClass):
                stdout=self.rootcanal_logs,
                stderr=self.rootcanal_logs
            )

        gd_devices = self.testbed_configs.get("GdDevice")
            for gd_device in gd_devices:
                gd_device["rootcanal_port"] = rootcanal_hci_port
        gd_cert_devices = self.testbed_configs.get("GdCertDevice")
            for gd_cert_device in gd_cert_devices:
                gd_cert_device["rootcanal_port"] = rootcanal_hci_port

@@ -69,10 +71,12 @@ class GdBaseTestClass(BaseTestClass):

    def teardown_class(self):
        self.unregister_controllers()
        if self.rootcanal_running:
            self.rootcanal_process.send_signal(signal.SIGINT)
            rootcanal_return_code = self.rootcanal_process.wait()
            self.rootcanal_logs.close()
        if rootcanal_return_code != 0 and rootcanal_return_code != -signal.SIGINT:
            if rootcanal_return_code != 0 and\
                rootcanal_return_code != -signal.SIGINT:
                logging.error("rootcanal stopped with code: %d" %
                              rootcanal_return_code)
                return False
+11 −2
Original line number Diff line number Diff line
@@ -32,11 +32,18 @@ ANDROID_HOST_OUT = os.environ.get('ANDROID_HOST_OUT')
WAIT_CHANNEL_READY_TIMEOUT = 10

def replace_vars(string, config):
    serial_number = config.get("serial_number")
    if serial_number is None:
        serial_number = ""
    rootcanal_port = config.get("rootcanal_port")
    if rootcanal_port is None:
        rootcanal_port = ""
    return string.replace("$ANDROID_HOST_OUT", ANDROID_HOST_OUT) \
                 .replace("$(grpc_port)", config.get("grpc_port")) \
                 .replace("$(grpc_root_server_port)", config.get("grpc_root_server_port")) \
                 .replace("$(rootcanal_port)", config.get("rootcanal_port")) \
                 .replace("$(signal_port)", config.get("signal_port"))
                 .replace("$(rootcanal_port)", rootcanal_port) \
                 .replace("$(signal_port)", config.get("signal_port")) \
                 .replace("$(serial_number)", serial_number)

class GdDeviceBase:
    def __init__(self, grpc_port, grpc_root_server_port, signal_port, cmd,
@@ -58,6 +65,8 @@ class GdDeviceBase:
        cmd.append("--btsnoop=" + btsnoop_path)

        tester_signal_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        tester_signal_socket.setsockopt(
            socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        socket_address = ('localhost', int(signal_port))
        tester_signal_socket.bind(socket_address)
        tester_signal_socket.listen(1)
+3 −0
Original line number Diff line number Diff line
#! /bin/bash

act.py -c $ANDROID_BUILD_TOP/packages/modules/Bluetooth/system/gd/cert/android_devices_config.json -tf $ANDROID_BUILD_TOP/packages/modules/Bluetooth/system/gd/cert/cert_testcases -tp $ANDROID_BUILD_TOP/packages/modules/Bluetooth/system/gd