aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/core/end2end/fixtures/http_proxy_fixture.c
diff options
context:
space:
mode:
authorGravatar Yash Tibrewal <yashkt@google.com>2017-07-20 16:48:01 -0700
committerGravatar Yash Tibrewal <yashkt@google.com>2017-07-20 16:48:01 -0700
commitc62ce80b805837dc2246b453a4a8b76c886cb6a3 (patch)
tree37b03c8af1c3fffc103643713ed577edb92dbe5f /test/core/end2end/fixtures/http_proxy_fixture.c
parenta74ea8602d60bfdf4d99642e6c72573b803e69dc (diff)
Test credentials are passed with channel arg. Renamed macros and refactored code as per suggestions. Renamed test to proxy_auth and changed it to use simple_request instead of a payload.
Diffstat (limited to 'test/core/end2end/fixtures/http_proxy_fixture.c')
-rw-r--r--test/core/end2end/fixtures/http_proxy_fixture.c68
1 files changed, 24 insertions, 44 deletions
diff --git a/test/core/end2end/fixtures/http_proxy_fixture.c b/test/core/end2end/fixtures/http_proxy_fixture.c
index 239444e75f..266351d181 100644
--- a/test/core/end2end/fixtures/http_proxy_fixture.c
+++ b/test/core/end2end/fixtures/http_proxy_fixture.c
@@ -309,41 +309,23 @@ static void on_server_connect_done(grpc_exec_ctx* exec_ctx, void* arg,
/**
* Parses the proxy auth header value to check if it matches :-
- * Basic <base64_encoded_user_cred>
+ * Basic <base64_encoded_expected_cred>
* Returns true if it matches, false otherwise
*/
-static bool proxy_auth_header_matches(grpc_exec_ctx *exec_ctx,
- char *proxy_auth_header_val) {
- if(proxy_auth_header_val == NULL) {
+static bool proxy_auth_header_matches(grpc_exec_ctx* exec_ctx,
+ char* proxy_auth_header_val,
+ char* expected_cred) {
+ GPR_ASSERT(proxy_auth_header_val != NULL && expected_cred != NULL);
+ if (strncmp(proxy_auth_header_val, "Basic ", 6) != 0) {
return false;
}
- char **auth_header_strs;
- size_t auth_header_nstrs;
- bool auth_header_matches = false;
- // Split the auth header value on space
- gpr_string_split(proxy_auth_header_val, " ", &auth_header_strs,
- &auth_header_nstrs);
- if(auth_header_nstrs != 2) {
- goto done;
- }
- // Authentication type should be Basic
- if(strcmp(auth_header_strs[0], "Basic") != 0) {
- goto done;
- }
- // should match GRPC_END2END_HTTP_PROXY_TEST_CONNECT_CRED after decoding
+ proxy_auth_header_val += 6;
grpc_slice decoded_slice =
- grpc_base64_decode(exec_ctx, auth_header_strs[1], 0);
- if(grpc_slice_str_cmp(
- decoded_slice, GRPC_END2END_HTTP_PROXY_TEST_CONNECT_CRED) != 0) {
- goto done;
- }
- auth_header_matches = true;
-done:
- for(size_t i = 0; i < auth_header_nstrs; i++) {
- gpr_free(auth_header_strs[i]);
- }
- gpr_free(auth_header_strs);
- return auth_header_matches;
+ grpc_base64_decode(exec_ctx, proxy_auth_header_val, 0);
+ const bool header_matches =
+ grpc_slice_str_cmp(decoded_slice, expected_cred) == 0;
+ grpc_slice_unref_internal(exec_ctx, decoded_slice);
+ return header_matches;
}
// Callback to read the HTTP CONNECT request.
@@ -395,23 +377,21 @@ static void on_read_request_done(grpc_exec_ctx* exec_ctx, void* arg,
return;
}
// If proxy auth is being used, check if the header is present and as expected
- if(grpc_channel_args_find(
- conn->proxy->channel_args,
- GRPC_END2END_HTTP_PROXY_TEST_CONNECT_AUTH_PRESENT) != NULL) {
+ const grpc_arg* proxy_auth = grpc_channel_args_find(
+ conn->proxy->channel_args, GRPC_ARG_HTTP_PROXY_AUTH_CREDS);
+ if (proxy_auth != NULL) {
bool auth_header_found = false;
- for(size_t i = 0; i < conn->http_request.hdr_count; i++) {
- if(strcmp(conn->http_request.hdrs[i].key, "Proxy-Authorization") == 0) {
- if(!proxy_auth_header_matches(
- exec_ctx, conn->http_request.hdrs[i].value)) {
- break;
- }
- auth_header_found = true;
+ for (size_t i = 0; i < conn->http_request.hdr_count; i++) {
+ if (strcmp(conn->http_request.hdrs[i].key, "Proxy-Authorization") == 0) {
+ auth_header_found = proxy_auth_header_matches(
+ exec_ctx, conn->http_request.hdrs[i].value,
+ proxy_auth->value.string);
break;
}
}
- if(!auth_header_found) {
- const char *msg = "HTTP Connect could not verify authentication";
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
+ if (!auth_header_found) {
+ const char* msg = "HTTP Connect could not verify authentication";
+ error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(msg);
proxy_connection_failed(exec_ctx, conn, true /* is_client */,
"HTTP proxy read request", error);
GRPC_ERROR_UNREF(error);
@@ -503,7 +483,7 @@ static void thread_main(void* arg) {
}
grpc_end2end_http_proxy* grpc_end2end_http_proxy_create(
- grpc_channel_args *args) {
+ grpc_channel_args* args) {
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_end2end_http_proxy* proxy =
(grpc_end2end_http_proxy*)gpr_malloc(sizeof(*proxy));