static void test_fails(grpc_slice_split_mode split_mode, char *response) { grpc_httpcli_parser parser; gpr_slice input_slice = gpr_slice_from_copied_string(response); size_t num_slices; size_t i; gpr_slice *slices; int done = 0; grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices); gpr_slice_unref(input_slice); grpc_httpcli_parser_init(&parser); for (i = 0; i < num_slices; i++) { if (!done && !grpc_httpcli_parser_parse(&parser, slices[i])) { done = 1; } gpr_slice_unref(slices[i]); } if (!done && !grpc_httpcli_parser_eof(&parser)) { done = 1; } GPR_ASSERT(done); grpc_httpcli_parser_destroy(&parser); gpr_free(slices); }
static void finish(internal_request *req, int success) { req->on_response(req->user_data, success ? &req->parser.r : NULL); grpc_httpcli_parser_destroy(&req->parser); if (req->addresses != NULL) { grpc_resolved_addresses_destroy(req->addresses); } if (req->ep != NULL) { grpc_endpoint_destroy(req->ep); } gpr_slice_unref(req->request_text); gpr_free(req->host); gpr_free(req); }
static void finish(internal_request *req, int success) { grpc_pollset_set_del_pollset(&req->context->pollset_set, req->pollset); req->on_response(req->user_data, success ? &req->parser.r : NULL); grpc_httpcli_parser_destroy(&req->parser); if (req->addresses != NULL) { grpc_resolved_addresses_destroy(req->addresses); } if (req->ep != NULL) { grpc_endpoint_destroy(req->ep); } gpr_slice_unref(req->request_text); gpr_free(req->host); grpc_iomgr_unregister_object(&req->iomgr_obj); gpr_free(req); }
static void test_succeeds(grpc_slice_split_mode split_mode, char *response, int expect_status, char *expect_body, ...) { grpc_httpcli_parser parser; gpr_slice input_slice = gpr_slice_from_copied_string(response); size_t num_slices; size_t i; gpr_slice *slices; va_list args; grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices); gpr_slice_unref(input_slice); grpc_httpcli_parser_init(&parser); for (i = 0; i < num_slices; i++) { GPR_ASSERT(grpc_httpcli_parser_parse(&parser, slices[i])); gpr_slice_unref(slices[i]); } GPR_ASSERT(grpc_httpcli_parser_eof(&parser)); GPR_ASSERT(expect_status == parser.r.status); if (expect_body != NULL) { GPR_ASSERT(strlen(expect_body) == parser.r.body_length); GPR_ASSERT(0 == memcmp(expect_body, parser.r.body, parser.r.body_length)); } else { GPR_ASSERT(parser.r.body_length == 0); } va_start(args, expect_body); i = 0; for (;;) { char *expect_key; char *expect_value; expect_key = va_arg(args, char *); if (!expect_key) break; GPR_ASSERT(i < parser.r.hdr_count); expect_value = va_arg(args, char *); GPR_ASSERT(expect_value); GPR_ASSERT(0 == strcmp(expect_key, parser.r.hdrs[i].key)); GPR_ASSERT(0 == strcmp(expect_value, parser.r.hdrs[i].value)); i++; } va_end(args); GPR_ASSERT(i == parser.r.hdr_count); grpc_httpcli_parser_destroy(&parser); gpr_free(slices); }