Go to the documentation of this file.
41 #define HTTP1_RESP_400 \
42 "HTTP/1.0 400 Bad Request\n" \
43 "Content-Type: text/html; charset=UTF-8\n" \
44 "Content-Length: 0\n" \
45 "Date: Tue, 07 Jun 2016 17:43:20 GMT\n\n"
47 #define HTTP2_SETTINGS_FRAME "\x00\x00\x00\x04\x00\x00\x00\x00\x00"
49 #define HTTP2_RESP(STATUS_CODE) \
50 "\x00\x00>\x01\x04\x00\x00\x00\x01" \
52 "content-length\x01" \
57 "\x10\x07:status\x03" #STATUS_CODE
59 #define UNPARSEABLE_RESP "Bad Request\n"
61 #define HTTP2_DETAIL_MSG(STATUS_CODE) \
62 "Received http2 header with status: " #STATUS_CODE
67 #define SERVER_INCOMING_DATA_LENGTH_LOWER_THRESHOLD (size_t)200
92 static void*
tag(
intptr_t t) {
return reinterpret_cast<void*
>(t); }
108 state.response_payload,
state.response_payload_length);
122 state.incoming_data_length +=
state.temp_incoming_buffer.length;
125 for (
i = 0;
i <
state.temp_incoming_buffer.count;
i++) {
133 "got %" PRIuPTR
" bytes, expected %" PRIuPTR
134 " bytes or a non-HTTP2 response to be sent",
135 state.incoming_data_length,
137 if (
state.incoming_data_length >=
139 !
state.http2_response) {
154 nullptr, grpc_schedule_on_exec_ctx);
158 state.connection_attempt_made =
true;
160 state.incoming_data_length = 0;
162 if (
state.send_settings) {
182 const char* expected_detail) {
246 if (expected_detail !=
nullptr) {
268 state.target.clear();
297 state.connection_attempt_made =
false;
307 static void run_test(
bool http2_response,
bool send_settings,
308 const char* response_payload,
309 size_t response_payload_length,
311 const char* expected_detail) {
321 state.http2_response = http2_response;
322 state.send_settings = send_settings;
323 state.response_payload = response_payload;
324 state.response_payload_length = response_payload_length;
327 std::unique_ptr<grpc_core::Thread> thdptr(
345 int main(
int argc,
char** argv) {
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
GPRAPI void grpc_slice_unref(grpc_slice s)
std::chrono::duration< std::int_fast64_t > seconds
gpr_event * signal_when_done
grpc_slice_buffer temp_incoming_buffer
void test_tcp_server_init(test_tcp_server *server, grpc_tcp_server_cb on_connect, void *user_data)
static void run_test(bool http2_response, bool send_settings, const char *response_payload, size_t response_payload_length, grpc_status_code expected_status, const char *expected_detail)
grpc_metadata_array * trailing_metadata
grpc_status_code * status
@ GRPC_STATUS_UNAVAILABLE
void test_tcp_server_start(test_tcp_server *server, int port)
@ GRPC_STATUS_UNAUTHENTICATED
return memset(p, 0, total)
char * grpc_dump_slice(const grpc_slice &s, uint32_t flags)
struct grpc_op::grpc_op_data::grpc_op_send_initial_metadata send_initial_metadata
GPRAPI gpr_timespec gpr_time_0(gpr_clock_type type)
static void handle_write()
GPRAPI int grpc_slice_slice(grpc_slice haystack, grpc_slice needle)
@ GRPC_STATUS_PERMISSION_DENIED
GPRAPI void gpr_event_set(gpr_event *ev, void *value)
GPRAPI void gpr_free(void *ptr)
void grpc_endpoint_read(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, bool urgent, int min_progress_size)
#define HTTP2_RESP(STATUS_CODE)
GPRAPI void * gpr_malloc(size_t size)
GPRAPI gpr_timespec gpr_inf_future(gpr_clock_type type)
@ GRPC_STATUS_DEADLINE_EXCEEDED
int main(int argc, char **argv)
static void done_writing_settings_frame(void *, grpc_error_handle error)
union grpc_op::grpc_op_data data
void test_tcp_server_destroy(test_tcp_server *server)
GRPCAPI void grpc_metadata_array_destroy(grpc_metadata_array *array)
static grpc_metadata_array trailing_metadata_recv
std::unique_ptr< Server > server
grpc_slice_buffer outgoing_buffer
static grpc_closure on_writing_settings_frame
@ GRPC_OP_RECV_INITIAL_METADATA
static grpc_closure on_read
GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b)
def c_str(s, encoding='ascii')
GRPCAPI void grpc_call_unref(grpc_call *call)
GPRAPI gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b)
bool connection_attempt_made
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
void cq_verifier_destroy(cq_verifier *v)
GPRAPI void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer *sb)
struct grpc_call grpc_call
#define gpr_atm_acq_load(p)
#define HTTP2_DETAIL_MSG(STATUS_CODE)
static void on_connect(void *arg, grpc_endpoint *tcp, grpc_pollset *, grpc_tcp_server_acceptor *acceptor)
std::string JoinHostPort(absl::string_view host, int port)
GPRAPI grpc_slice grpc_slice_from_static_buffer(const void *source, size_t len)
GRPCAPI grpc_channel_credentials * grpc_insecure_credentials_create()
void test_tcp_server_poll(test_tcp_server *server, int milliseconds)
GPRAPI grpc_slice grpc_slice_from_static_string(const char *source)
cq_verifier * cq_verifier_create(grpc_completion_queue *cq)
#define gpr_atm_rel_store(p, value)
static void * tag(intptr_t t)
static grpc_closure on_write
GPRAPI void gpr_event_init(gpr_event *ev)
void grpc_endpoint_shutdown(grpc_endpoint *ep, grpc_error_handle why)
def test_server(max_workers=10, reuse_port=False)
#define CQ_EXPECT_COMPLETION(v, tag, success)
int grpc_pick_unused_port_or_die(void)
static void cleanup_rpc()
void grpc_endpoint_destroy(grpc_endpoint *ep)
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock)
static gpr_timespec n_sec_deadline(int seconds)
GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer *sb)
const char * response_payload
GPRAPI void * gpr_event_wait(gpr_event *ev, gpr_timespec abs_deadline)
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
grpc_completion_queue * cq
grpc_slice * status_details
static grpc_slice details
GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials *creds)
GRPCAPI grpc_call * grpc_channel_create_call(grpc_channel *channel, grpc_call *parent_call, uint32_t propagation_mask, grpc_completion_queue *completion_queue, grpc_slice method, const grpc_slice *host, gpr_timespec deadline, void *reserved)
GPRAPI void grpc_slice_buffer_add(grpc_slice_buffer *sb, grpc_slice slice)
GRPCAPI grpc_channel * grpc_channel_create(const char *target, grpc_channel_credentials *creds, const grpc_channel_args *args)
GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len)
#define GRPC_PROPAGATE_DEFAULTS
static grpc_core::Thread * poll_server_until_read_done(test_tcp_server *server, gpr_event *signal_when_done)
#define HTTP2_SETTINGS_FRAME
GPRAPI gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b)
GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue *cq)
@ GRPC_OP_SEND_INITIAL_METADATA
grpc_core::ExecCtx exec_ctx
std::string grpc_error_std_string(grpc_error_handle error)
static void handle_read(void *, grpc_error_handle error)
struct grpc_op::grpc_op_data::grpc_op_recv_status_on_client recv_status_on_client
size_t response_payload_length
static void done_write(void *, grpc_error_handle error)
GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue *cq, gpr_timespec deadline, void *reserved)
void cq_verify(cq_verifier *v, int timeout_sec)
GRPCAPI void grpc_completion_queue_shutdown(grpc_completion_queue *cq)
GRPCAPI void grpc_channel_destroy(grpc_channel *channel)
size_t incoming_data_length
struct grpc_channel grpc_channel
@ GRPC_STATUS_UNIMPLEMENTED
void grpc_slice_buffer_destroy_internal(grpc_slice_buffer *sb)
void grpc_endpoint_write(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, void *arg, int max_frame_size)
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
struct grpc_op::grpc_op_data::grpc_op_recv_initial_metadata recv_initial_metadata
#define SERVER_INCOMING_DATA_LENGTH_LOWER_THRESHOLD
grpc_completion_type type
GRPCAPI void grpc_init(void)
@ GRPC_OP_RECV_STATUS_ON_CLIENT
void grpc_endpoint_add_to_pollset(grpc_endpoint *ep, grpc_pollset *pollset)
static void actually_poll_server(void *arg)
static grpc_metadata_array initial_metadata_recv
GRPCAPI grpc_call_error grpc_call_start_batch(grpc_call *call, const grpc_op *ops, size_t nops, void *tag, void *reserved)
GRPCAPI void grpc_shutdown(void)
static void start_rpc(int target_port, grpc_status_code expected_status, const char *expected_detail)
@ GRPC_OP_SEND_CLOSE_FROM_CLIENT
GRPCAPI void grpc_metadata_array_init(grpc_metadata_array *array)
GPRAPI gpr_timespec gpr_time_from_seconds(int64_t s, gpr_clock_type clock_type)
#define GRPC_ERROR_IS_NONE(err)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:35