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

Commit 91b45f60 authored by Hansong Zhang's avatar Hansong Zhang
Browse files

Cert signal server: Use TCP instead of UNIX socket

Since we want to run the stacks on the phone, we need to use TCP socket
and set up TCP forwarding to run the test.

Test: cert/run_cert.sh
Change-Id: I3fd6c17318d372ab0be4065df4aea2a5bb469ab3
parent 314fe5ea
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -16,9 +16,9 @@

#include "stack_manager.h"

#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <unistd.h>
#include <csignal>
#include <cstring>
@@ -47,16 +47,16 @@ void interrupt_handler(int) {
}  // namespace

int main(int argc, const char** argv) {
  int root_server_port = 8897;
  int grpc_port = 8899;
  int root_server_port = 8896;
  int grpc_port = 8898;
  int signal_port = 8894;

  const std::string arg_grpc_root_server_port = "--root-server-port=";
  const std::string arg_grpc_server_port = "--grpc-port=";
  const std::string arg_rootcanal_port = "--rootcanal-port=";
  const std::string arg_signal_port = "--signal-port=";
  const std::string arg_btsnoop_path = "--btsnoop=";
  std::string btsnoop_path;
  const std::string arg_tester_signal_socket = "--tester-signal-socket=";
  std::string tester_signal_path;
  for (int i = 1; i < argc; i++) {
    std::string arg = argv[i];
    if (arg.find(arg_grpc_root_server_port) == 0) {
@@ -75,18 +75,20 @@ int main(int argc, const char** argv) {
      btsnoop_path = arg.substr(arg_btsnoop_path.size());
      ::bluetooth::hal::SnoopLogger::SetFilePath(btsnoop_path);
    }
    if (arg.find(arg_tester_signal_socket) == 0) {
      tester_signal_path = arg.substr(arg_tester_signal_socket.size());
    if (arg.find(arg_signal_port) == 0) {
      auto port_number = arg.substr(arg_signal_port.size());
      signal_port = std::stoi(port_number);
    }
  }

  signal(SIGINT, interrupt_handler);
  grpc_root_server.StartServer("0.0.0.0", root_server_port, grpc_port);
  int tester_signal_socket = socket(AF_UNIX, SOCK_STREAM, 0);
  struct sockaddr_un addr;
  int tester_signal_socket = socket(AF_INET, SOCK_STREAM, 0);
  struct sockaddr_in addr;
  memset(&addr, 0, sizeof(addr));
  addr.sun_family = AF_UNIX;
  strncpy(addr.sun_path, tester_signal_path.c_str(), tester_signal_path.size() + 1);
  addr.sin_family = AF_INET;
  addr.sin_port = htons(signal_port);
  addr.sin_addr.s_addr = htonl(INADDR_ANY);
  connect(tester_signal_socket, (sockaddr*)&addr, sizeof(addr));
  close(tester_signal_socket);
  auto wait_thread = std::thread([] { grpc_root_server.RunGrpcLoop(); });
+7 −3
Original line number Diff line number Diff line
@@ -52,12 +52,16 @@ def get_instances_with_configs(configs):
        resolved_cmd = []
        for entry in config["cmd"]:
            resolved_cmd.append(replace_vars(entry, config))
        devices.append(GdCertDevice(config["grpc_port"], config["grpc_root_server_port"], resolved_cmd, config["label"]))
        devices.append(GdCertDevice(config["grpc_port"],
                                    config["grpc_root_server_port"],
                                    config["signal_port"],
                                    resolved_cmd, config["label"]))
    return devices

class GdCertDevice(GdDeviceBase):
    def __init__(self, grpc_port, grpc_root_server_port, cmd, label):
        super().__init__(grpc_port, grpc_root_server_port, cmd, label, ACTS_CONTROLLER_CONFIG_NAME)
    def __init__(self, grpc_port, grpc_root_server_port, signal_port, cmd, label):
        super().__init__(grpc_port, grpc_root_server_port, signal_port, cmd,
                         label, ACTS_CONTROLLER_CONFIG_NAME)

        # Cert stubs
        self.rootservice = cert_rootservice_pb2_grpc.RootCertStub(self.grpc_root_server_channel)
+7 −3
Original line number Diff line number Diff line
@@ -52,12 +52,16 @@ def get_instances_with_configs(configs):
        resolved_cmd = []
        for entry in config["cmd"]:
            resolved_cmd.append(replace_vars(entry, config))
        devices.append(GdDevice(config["grpc_port"], config["grpc_root_server_port"], resolved_cmd, config["label"]))
        devices.append(GdDevice(config["grpc_port"],
                                config["grpc_root_server_port"],
                                config["signal_port"],
                                resolved_cmd, config["label"]))
    return devices

class GdDevice(GdDeviceBase):
    def __init__(self, grpc_port, grpc_root_server_port, cmd, label):
        super().__init__(grpc_port, grpc_root_server_port, cmd, label, ACTS_CONTROLLER_CONFIG_NAME)
    def __init__(self, grpc_port, grpc_root_server_port, signal_port, cmd, label):
        super().__init__(grpc_port, grpc_root_server_port, signal_port, cmd,
                         label, ACTS_CONTROLLER_CONFIG_NAME)

        # Facade stubs
        self.rootservice = facade_rootservice_pb2_grpc.RootFacadeStub(self.grpc_root_server_channel)
+6 −8
Original line number Diff line number Diff line
@@ -35,10 +35,12 @@ def replace_vars(string, config):
    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("$(rootcanal_port)", config.get("rootcanal_port")) \
                 .replace("$(signal_port)", config.get("signal_port"))

class GdDeviceBase:
    def __init__(self, grpc_port, grpc_root_server_port, cmd, label, type_identifier):
    def __init__(self, grpc_port, grpc_root_server_port, signal_port, cmd,
                 label, type_identifier):
        self.label = label if label is not None else grpc_port
        # logging.log_path only exists when this is used in an ACTS test run.
        log_path_base = getattr(logging, 'log_path', '/tmp/logs')
@@ -55,14 +57,11 @@ class GdDeviceBase:
        btsnoop_path = os.path.join(log_path_base, '%s_btsnoop_hci.log' % label)
        cmd.append("--btsnoop=" + btsnoop_path)

        tester_signal_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        socket_address = os.path.join(
            log_path_base, '%s_socket' % type_identifier)
        tester_signal_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        socket_address = ('localhost', int(signal_port))
        tester_signal_socket.bind(socket_address)
        tester_signal_socket.listen(1)

        cmd.append("--tester-signal-socket=" + socket_address)

        self.backing_process = subprocess.Popen(
            cmd,
            cwd=ANDROID_BUILD_TOP,
@@ -71,7 +70,6 @@ class GdDeviceBase:
            stderr=self.backing_process_logs)
        tester_signal_socket.accept()
        tester_signal_socket.close()
        os.unlink(socket_address)

        self.grpc_root_server_channel = grpc.insecure_channel("localhost:" + grpc_root_server_port)
        self.grpc_port = int(grpc_port)
+6 −2
Original line number Diff line number Diff line
@@ -15,13 +15,15 @@
                {
                    "grpc_port": "8899",
                    "grpc_root_server_port": "8897",
                    "signal_port": "8895",
                    "label": "stack_under_test",
                    "cmd":
                    [
                        "$ANDROID_HOST_OUT/bin/stack_with_facade",
                        "--grpc-port=$(grpc_port)",
                        "--root-server-port=$(grpc_root_server_port)",
                        "--rootcanal-port=$(rootcanal_port)"
                        "--rootcanal-port=$(rootcanal_port)",
                        "--signal-port=$(signal_port)"
                    ]
                }
            ],
@@ -30,13 +32,15 @@
                {
                    "grpc_port": "8898",
                    "grpc_root_server_port": "8896",
                    "signal_port": "8894",
                    "label": "cert_stack",
                    "cmd":
                    [
                        "$ANDROID_HOST_OUT/bin/bluetooth_cert_stack",
                        "--grpc-port=$(grpc_port)",
                        "--root-server-port=$(grpc_root_server_port)",
                        "--rootcanal-port=$(rootcanal_port)"
                        "--rootcanal-port=$(rootcanal_port)",
                        "--signal-port=$(signal_port)"
                    ]
                }
            ]
Loading