static void run_test(const char *response_payload,
                     size_t response_payload_length,
                     grpc_status_code expected_status,
                     const char *expected_detail) {
  test_tcp_server test_server;
  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
  gpr_event ev;

  grpc_init();
  gpr_event_init(&ev);
  server_port = grpc_pick_unused_port_or_die();
  test_tcp_server_init(&test_server, on_connect, &test_server);
  test_tcp_server_start(&test_server, server_port);
  state.response_payload = response_payload;
  state.response_payload_length = response_payload_length;

  /* poll server until sending out the response */
  poll_server_until_read_done(&test_server, &ev);
  start_rpc(server_port, expected_status, expected_detail);
  gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME));

  /* clean up */
  grpc_endpoint_shutdown(&exec_ctx, state.tcp);
  grpc_endpoint_destroy(&exec_ctx, state.tcp);
  grpc_exec_ctx_finish(&exec_ctx);
  cleanup_rpc();
  test_tcp_server_destroy(&test_server);

  grpc_shutdown();
}
Exemple #2
0
static void* gps_client(void* unused) {
	int client_fd = -1;

	LOG_ENTRY;

	client_fd = gps_proxy_socket_open();
	if (client_fd < 0) {
		RPC_ERROR("failed to open the socket");
		goto fail;
	}
		
	if (start_rpc(client_fd)) {
		RPC_ERROR("failed to connect to the RPC server");
		goto fail;
	}

	goto done;

fail:
	if (client_fd >= 0) {
		close(client_fd);
	}

done:
	pthread_mutex_lock(&gps_mutex);
	pthread_cond_broadcast(&gps_cond);
	pthread_mutex_unlock(&gps_mutex);
	LOG_EXIT;
	return NULL;
}
static void test_initial_string(test_tcp_server *server, int secure) {
  gpr_event ev;
  gpr_event_init(&ev);
  grpc_test_set_initial_connect_string_function(set_magic_initial_string);
  poll_server_until_read_done(server, &ev);
  start_rpc(secure, server_port);
  gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME));
  match_initial_magic_string(&state.incoming_buffer);
  cleanup_rpc();
}
static void test_initial_string_with_redirect(test_tcp_server *server,
                                              int secure) {
  gpr_event ev;
  gpr_event_init(&ev);
  int another_port = grpc_pick_unused_port_or_die();
  grpc_test_set_initial_connect_string_function(
      reset_addr_and_set_magic_string);
  poll_server_until_read_done(server, &ev);
  start_rpc(secure, another_port);
  gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME));
  match_initial_magic_string(&state.incoming_buffer);
  cleanup_rpc();
}
Exemple #5
0
static void call_op(grpc_call_element *elem, grpc_call_element *from_elem,
                    grpc_call_op *op) {
  call_data *calld = elem->call_data;
  GPR_ASSERT(elem->filter == &grpc_client_channel_filter);
  GRPC_CALL_LOG_OP(GPR_INFO, elem, op);

  switch (op->type) {
    case GRPC_SEND_METADATA:
      grpc_metadata_buffer_queue(&calld->pending_metadata, op);
      break;
    case GRPC_SEND_DEADLINE:
      calld->deadline = op->data.deadline;
      op->done_cb(op->user_data, GRPC_OP_OK);
      break;
    case GRPC_SEND_START:
      /* filter out the start event to find which child to send on */
      start_rpc(elem, op);
      break;
    case GRPC_CANCEL_OP:
      cancel_rpc(elem, op);
      break;
    case GRPC_SEND_MESSAGE:
    case GRPC_SEND_FINISH:
    case GRPC_REQUEST_DATA:
      if (calld->state == CALL_ACTIVE) {
        grpc_call_element *child_elem =
            grpc_child_call_get_top_element(calld->s.active.child_call);
        child_elem->filter->call_op(child_elem, elem, op);
      } else {
        op->done_cb(op->user_data, GRPC_OP_ERROR);
      }
      break;
    default:
      GPR_ASSERT(op->dir == GRPC_CALL_UP);
      grpc_call_next_op(elem, op);
      break;
  }
}