int run_ctest()

in e2e-examples/gcs/benchmark/grpc_xtra.cc [31:70]


int run_ctest(std::function<std::shared_ptr<grpc::Channel>()> channel_creator,
              const Parameters& parameters) {
  struct ChannelState {
    std::shared_ptr<grpc::Channel> channel;
    std::unique_ptr<std::thread> thread;
    std::string peer;
  };
  std::vector<ChannelState> states;
  const int size = parameters.ctest;
  for (int i = 0; i < size; i++) {
    states.push_back(ChannelState{channel_creator()});
  }
  for (int i = 0; i < size; i++) {
    ChannelState& cur_state = states[i];
    cur_state.thread = absl::make_unique<std::thread>([&cur_state]() {
      grpc::health::v1::HealthCheckRequest request;
      request.set_service("google.storage.v1.Storage");
      grpc::health::v1::HealthCheckResponse response;
      grpc::ClientContext context;
      auto stub = grpc::health::v1::Health::NewStub(cur_state.channel);
      auto s = stub->Check(&context, request, &response);
      cur_state.peer = context.peer();
    });
  }
  std::for_each(states.begin(), states.end(),
                [](ChannelState& state) { state.thread->join(); });
  std::unordered_map<std::string, int> peer_count_map;
  std::cout << "### Result: Requests for " << size << " channels" << std::endl;
  for (int i = 0; i < size; i++) {
    std::cout << i << ": " << states[i].peer << std::endl;
    peer_count_map[states[i].peer] += 1;
  }
  std::cout << std::endl;
  std::cout << "### Summary: Total " << peer_count_map.size() << " peers"
            << std::endl;
  for (const auto& p : peer_count_map) {
    std::cout << p.first << " -> " << p.second << " times." << std::endl;
  }
  return 0;
}