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 Original line Diff line number Diff line
@@ -16,9 +16,9 @@


#include "stack_manager.h"
#include "stack_manager.h"


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


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


  const std::string arg_grpc_root_server_port = "--root-server-port=";
  const std::string arg_grpc_root_server_port = "--root-server-port=";
  const std::string arg_grpc_server_port = "--grpc-port=";
  const std::string arg_grpc_server_port = "--grpc-port=";
  const std::string arg_rootcanal_port = "--rootcanal-port=";
  const std::string arg_rootcanal_port = "--rootcanal-port=";
  const std::string arg_signal_port = "--signal-port=";
  const std::string arg_btsnoop_path = "--btsnoop=";
  const std::string arg_btsnoop_path = "--btsnoop=";
  std::string btsnoop_path;
  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++) {
  for (int i = 1; i < argc; i++) {
    std::string arg = argv[i];
    std::string arg = argv[i];
    if (arg.find(arg_grpc_root_server_port) == 0) {
    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());
      btsnoop_path = arg.substr(arg_btsnoop_path.size());
      ::bluetooth::hal::SnoopLogger::SetFilePath(btsnoop_path);
      ::bluetooth::hal::SnoopLogger::SetFilePath(btsnoop_path);
    }
    }
    if (arg.find(arg_tester_signal_socket) == 0) {
    if (arg.find(arg_signal_port) == 0) {
      tester_signal_path = arg.substr(arg_tester_signal_socket.size());
      auto port_number = arg.substr(arg_signal_port.size());
      signal_port = std::stoi(port_number);
    }
    }
  }
  }


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


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


        # Cert stubs
        # Cert stubs
        self.rootservice = cert_rootservice_pb2_grpc.RootCertStub(self.grpc_root_server_channel)
        self.rootservice = cert_rootservice_pb2_grpc.RootCertStub(self.grpc_root_server_channel)
+7 −3
Original line number Original line Diff line number Diff line
@@ -52,12 +52,16 @@ def get_instances_with_configs(configs):
        resolved_cmd = []
        resolved_cmd = []
        for entry in config["cmd"]:
        for entry in config["cmd"]:
            resolved_cmd.append(replace_vars(entry, config))
            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
    return devices


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


        # Facade stubs
        # Facade stubs
        self.rootservice = facade_rootservice_pb2_grpc.RootFacadeStub(self.grpc_root_server_channel)
        self.rootservice = facade_rootservice_pb2_grpc.RootFacadeStub(self.grpc_root_server_channel)
+6 −8
Original line number Original line Diff line number Diff line
@@ -35,10 +35,12 @@ def replace_vars(string, config):
    return string.replace("$ANDROID_HOST_OUT", ANDROID_HOST_OUT) \
    return string.replace("$ANDROID_HOST_OUT", ANDROID_HOST_OUT) \
                 .replace("$(grpc_port)", config.get("grpc_port")) \
                 .replace("$(grpc_port)", config.get("grpc_port")) \
                 .replace("$(grpc_root_server_port)", config.get("grpc_root_server_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:
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
        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.
        # logging.log_path only exists when this is used in an ACTS test run.
        log_path_base = getattr(logging, 'log_path', '/tmp/logs')
        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)
        btsnoop_path = os.path.join(log_path_base, '%s_btsnoop_hci.log' % label)
        cmd.append("--btsnoop=" + btsnoop_path)
        cmd.append("--btsnoop=" + btsnoop_path)


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


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

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


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