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

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

Add a signaling socket from facade/cert to tester

The tester needs to wait for grpc server to start up before sending any
RPC. Use a UNIX domain socket to indicate when the grpc server is ready

Test: cert/run_cert.sh
Change-Id: Iaf5e9dfaedaa30a09448da0632ae7d362845c87a
parent 1267f5c5
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -16,7 +16,12 @@

#include "stack_manager.h"

#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <unistd.h>
#include <csignal>
#include <cstring>
#include <string>
#include <thread>

@@ -50,6 +55,8 @@ int main(int argc, const char** argv) {
  const std::string arg_rootcanal_port = "--rootcanal-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) {
@@ -68,10 +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());
    }
  }

  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;
  memset(&addr, 0, sizeof(addr));
  addr.sun_family = AF_UNIX;
  strncpy(addr.sun_path, tester_signal_path.c_str(), tester_signal_path.size() + 1);
  connect(tester_signal_socket, (sockaddr*)&addr, sizeof(addr));
  close(tester_signal_socket);
  auto wait_thread = std::thread([] { grpc_root_server.RunGrpcLoop(); });
  wait_thread.join();

+13 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ import logging
import os
from builtins import open
import signal
import socket
import subprocess
import time

@@ -52,14 +53,24 @@ 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.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,
            env=os.environ.copy(),
            stdout=self.backing_process_logs,
            stderr=self.backing_process_logs)
        time.sleep(1)  # We need some time for backing_process to start server
        # TODO: pass a fd that can be signaled when the process is ready
        tester_signal_socket.accept()
        tester_signal_socket.close()

        self.grpc_root_server_channel = grpc.insecure_channel("localhost:" + grpc_root_server_port)
        self.grpc_port = int(grpc_port)
        self.grpc_channel = grpc.insecure_channel("localhost:" + grpc_port)
+17 −0
Original line number Diff line number Diff line
@@ -16,7 +16,12 @@

#include "stack_manager.h"

#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <unistd.h>
#include <csignal>
#include <cstring>
#include <string>
#include <thread>

@@ -50,6 +55,8 @@ int main(int argc, const char** argv) {
  const std::string arg_rootcanal_port = "--rootcanal-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) {
@@ -68,10 +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());
    }
  }

  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;
  memset(&addr, 0, sizeof(addr));
  addr.sun_family = AF_UNIX;
  strncpy(addr.sun_path, tester_signal_path.c_str(), tester_signal_path.size() + 1);
  connect(tester_signal_socket, (sockaddr*)&addr, sizeof(addr));
  close(tester_signal_socket);
  auto wait_thread = std::thread([] { grpc_root_server.RunGrpcLoop(); });
  wait_thread.join();