diff options
Diffstat (limited to 'test/core/end2end/tests/max_message_length.c')
-rw-r--r-- | test/core/end2end/tests/max_message_length.c | 118 |
1 files changed, 71 insertions, 47 deletions
diff --git a/test/core/end2end/tests/max_message_length.c b/test/core/end2end/tests/max_message_length.c index e698987a0a..c222d9dfae 100644 --- a/test/core/end2end/tests/max_message_length.c +++ b/test/core/end2end/tests/max_message_length.c @@ -41,6 +41,11 @@ #include <grpc/support/log.h> #include <grpc/support/time.h> #include <grpc/support/useful.h> + +#include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/transport/metadata.h" +#include "src/core/lib/transport/service_config.h" + #include "test/core/end2end/cq_verifier.h" static void *tag(intptr_t t) { return (void *)t; } @@ -48,8 +53,7 @@ static void *tag(intptr_t t) { return (void *)t; } static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, const char *test_name, grpc_channel_args *client_args, - grpc_channel_args *server_args, - const char *query_args) { + grpc_channel_args *server_args) { grpc_end2end_test_fixture f; gpr_log(GPR_INFO, "%s/%s", test_name, config.name); // We intentionally do not pass the client and server args to @@ -57,7 +61,7 @@ static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, // proxy, only on the backend server. f = config.create_fixture(NULL, NULL); config.init_server(&f, server_args); - config.init_client(&f, client_args, query_args); + config.init_client(&f, client_args); return f; } @@ -109,14 +113,13 @@ static void test_max_message_length_on_request(grpc_end2end_test_config config, send_limit, use_service_config); grpc_end2end_test_fixture f; - grpc_arg channel_arg; - grpc_channel_args channel_args; grpc_call *c = NULL; grpc_call *s = NULL; cq_verifier *cqv; grpc_op ops[6]; grpc_op *op; - gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); + grpc_slice request_payload_slice = + grpc_slice_from_copied_string("hello world"); grpc_byte_buffer *request_payload = grpc_raw_byte_buffer_create(&request_payload_slice, 1); grpc_byte_buffer *recv_payload = NULL; @@ -130,37 +133,50 @@ static void test_max_message_length_on_request(grpc_end2end_test_config config, size_t details_capacity = 0; int was_cancelled = 2; - char *query_args = NULL; grpc_channel_args *client_args = NULL; grpc_channel_args *server_args = NULL; if (use_service_config) { // We don't currently support service configs on the server side. GPR_ASSERT(send_limit); - query_args = - "method_name=/service/method" - "&max_request_message_bytes=5"; + grpc_arg arg; + arg.type = GRPC_ARG_STRING; + arg.key = GRPC_ARG_SERVICE_CONFIG; + arg.value.string = + "{\n" + " \"methodConfig\": [ {\n" + " \"name\": [\n" + " { \"service\": \"service\", \"method\": \"method\" }\n" + " ],\n" + " \"maxRequestMessageBytes\": \"5\"\n" + " } ]\n" + "}"; + client_args = grpc_channel_args_copy_and_add(NULL, &arg, 1); } else { // Set limit via channel args. - channel_arg.key = send_limit ? GRPC_ARG_MAX_SEND_MESSAGE_LENGTH - : GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH; - channel_arg.type = GRPC_ARG_INTEGER; - channel_arg.value.integer = 5; - channel_args.num_args = 1; - channel_args.args = &channel_arg; + grpc_arg arg; + arg.key = send_limit ? GRPC_ARG_MAX_SEND_MESSAGE_LENGTH + : GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH; + arg.type = GRPC_ARG_INTEGER; + arg.value.integer = 5; + grpc_channel_args *args = grpc_channel_args_copy_and_add(NULL, &arg, 1); if (send_limit) { - client_args = &channel_args; + client_args = args; } else { - server_args = &channel_args; + server_args = args; } } f = begin_test(config, "test_max_request_message_length", client_args, - server_args, query_args); + server_args); + if (client_args != NULL) grpc_channel_args_destroy(client_args); + if (server_args != NULL) grpc_channel_args_destroy(server_args); + cqv = cq_verifier_create(f.cq); - c = grpc_channel_create_call(f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq, - "/service/method", "foo.test.google.fr:1234", - gpr_inf_future(GPR_CLOCK_REALTIME), NULL); + c = grpc_channel_create_call( + f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq, "/service/method", + get_host_override_string("foo.test.google.fr:1234", config), + gpr_inf_future(GPR_CLOCK_REALTIME), NULL); GPR_ASSERT(c); grpc_metadata_array_init(&initial_metadata_recv); @@ -233,7 +249,8 @@ static void test_max_message_length_on_request(grpc_end2end_test_config config, cq_verify(cqv); GPR_ASSERT(0 == strcmp(call_details.method, "/service/method")); - GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr:1234")); + validate_host_override_string("foo.test.google.fr:1234", call_details.host, + config); GPR_ASSERT(was_cancelled == 1); done: @@ -270,15 +287,13 @@ static void test_max_message_length_on_response(grpc_end2end_test_config config, send_limit, use_service_config); grpc_end2end_test_fixture f; - grpc_arg channel_arg; - grpc_channel_args channel_args; grpc_call *c = NULL; grpc_call *s = NULL; cq_verifier *cqv; grpc_op ops[6]; grpc_op *op; - gpr_slice response_payload_slice = - gpr_slice_from_copied_string("hello world"); + grpc_slice response_payload_slice = + grpc_slice_from_copied_string("hello world"); grpc_byte_buffer *response_payload = grpc_raw_byte_buffer_create(&response_payload_slice, 1); grpc_byte_buffer *recv_payload = NULL; @@ -292,32 +307,44 @@ static void test_max_message_length_on_response(grpc_end2end_test_config config, size_t details_capacity = 0; int was_cancelled = 2; - char *query_args = NULL; grpc_channel_args *client_args = NULL; grpc_channel_args *server_args = NULL; if (use_service_config) { // We don't currently support service configs on the server side. GPR_ASSERT(!send_limit); - query_args = - "method_name=/service/method" - "&max_response_message_bytes=5"; + grpc_arg arg; + arg.type = GRPC_ARG_STRING; + arg.key = GRPC_ARG_SERVICE_CONFIG; + arg.value.string = + "{\n" + " \"methodConfig\": [ {\n" + " \"name\": [\n" + " { \"service\": \"service\", \"method\": \"method\" }\n" + " ],\n" + " \"maxResponseMessageBytes\": \"5\"\n" + " } ]\n" + "}"; + client_args = grpc_channel_args_copy_and_add(NULL, &arg, 1); } else { // Set limit via channel args. - channel_arg.key = send_limit ? GRPC_ARG_MAX_SEND_MESSAGE_LENGTH - : GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH; - channel_arg.type = GRPC_ARG_INTEGER; - channel_arg.value.integer = 5; - channel_args.num_args = 1; - channel_args.args = &channel_arg; + grpc_arg arg; + arg.key = send_limit ? GRPC_ARG_MAX_SEND_MESSAGE_LENGTH + : GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH; + arg.type = GRPC_ARG_INTEGER; + arg.value.integer = 5; + grpc_channel_args *args = grpc_channel_args_copy_and_add(NULL, &arg, 1); if (send_limit) { - server_args = &channel_args; + server_args = args; } else { - client_args = &channel_args; + client_args = args; } } f = begin_test(config, "test_max_response_message_length", client_args, - server_args, query_args); + server_args); + if (client_args != NULL) grpc_channel_args_destroy(client_args); + if (server_args != NULL) grpc_channel_args_destroy(server_args); + cqv = cq_verifier_create(f.cq); c = grpc_channel_create_call(f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq, @@ -402,7 +429,6 @@ static void test_max_message_length_on_response(grpc_end2end_test_config config, GPR_ASSERT(0 == strcmp(call_details.method, "/service/method")); GPR_ASSERT(0 == strcmp(call_details.host, "foo.test.google.fr:1234")); - GPR_ASSERT(was_cancelled == 0); GPR_ASSERT(status == GRPC_STATUS_INVALID_ARGUMENT); GPR_ASSERT(strcmp(details, @@ -436,12 +462,10 @@ void max_message_length(grpc_end2end_test_config config) { false /* use_service_config */); test_max_message_length_on_response(config, true /* send_limit */, false /* use_service_config */); - if (config.feature_mask & FEATURE_MASK_SUPPORTS_QUERY_ARGS) { - test_max_message_length_on_request(config, true /* send_limit */, - true /* use_service_config */); - test_max_message_length_on_response(config, false /* send_limit */, - true /* use_service_config */); - } + test_max_message_length_on_request(config, true /* send_limit */, + true /* use_service_config */); + test_max_message_length_on_response(config, false /* send_limit */, + true /* use_service_config */); } void max_message_length_pre_init(void) {} |