You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2026/04/28 05:07:28 UTC
(couchdb-ibrowse) 05/05: Add connect_to tests
This is an automated email from the ASF dual-hosted git repository.
nickva pushed a commit to branch wh/connect_to_w_tests
in repository https://gitbox.apache.org/repos/asf/couchdb-ibrowse.git
commit 165b3c6852e4e37ec77e2d5a7c6a3f48cddc6c1a
Author: Nick Vatamaniuc <va...@gmail.com>
AuthorDate: Tue Apr 28 01:06:12 2026 -0400
Add connect_to tests
These are for Will's "feat: add connect_to option" feature
---
test/ibrowse_test.erl | 55 ++++++++++++++++++++++++++++++++++++++++++++
test/ibrowse_test_server.erl | 17 ++++++++++++++
2 files changed, 72 insertions(+)
diff --git a/test/ibrowse_test.erl b/test/ibrowse_test.erl
index 4e64acc..5c87539 100644
--- a/test/ibrowse_test.erl
+++ b/test/ibrowse_test.erl
@@ -34,6 +34,9 @@
test_preserve_status_line/0,
test_binary_headers/0,
test_binary_headers/1,
+ test_connect_to_overrides_target/0,
+ test_connect_to_unreachable_fails/0,
+ test_connect_to_preserves_host_header/0,
test_dead_lb_pid/0,
test_generate_body_0/0,
test_retry_of_requests/0,
@@ -62,6 +65,9 @@
{local_test_fun, test_303_response_with_a_body, []},
{local_test_fun, test_303_response_with_no_body, []},
{local_test_fun, test_binary_headers, []},
+ {local_test_fun, test_connect_to_overrides_target, []},
+ {local_test_fun, test_connect_to_unreachable_fails, []},
+ {local_test_fun, test_connect_to_preserves_host_header, []},
{local_test_fun, test_dead_lb_pid, []},
{local_test_fun, test_retry_of_requests, []},
{local_test_fun, verify_chunked_streaming, []},
@@ -546,6 +552,55 @@ test_binary_headers(Url) ->
{test_failed, Res}
end.
+%%------------------------------------------------------------------------------
+%% url host is bogus, request only succeeds if connect_to actually
+%% redirects
+%%------------------------------------------------------------------------------
+test_connect_to_overrides_target() ->
+ clear_msg_q(),
+ Url = "http://no.such.host.invalid:8181/",
+ case ibrowse:send_req(Url, [], get, [], [{connect_to, "localhost"}], 5000) of
+ {ok, "200", _, _} ->
+ success;
+ Res ->
+ {test_failed, Res}
+ end.
+
+%%------------------------------------------------------------------------------
+%% url host reachable, but connect_to points at an unroutable
+%% address
+%%------------------------------------------------------------------------------
+test_connect_to_unreachable_fails() ->
+ clear_msg_q(),
+ case ibrowse:send_req("http://localhost:8181/", [], get, [],
+ [{connect_to, "192.0.2.1"},
+ {connect_timeout, 500}],
+ 5000) of
+ {error, _} ->
+ success;
+ Res ->
+ {test_failed, Res}
+ end.
+
+%%------------------------------------------------------------------------------
+%% connect_to shouldn't bleed into the Host header, server should see the
+%% original url host
+%%------------------------------------------------------------------------------
+test_connect_to_preserves_host_header() ->
+ clear_msg_q(),
+ Url = "http://example.invalid:8181/ibrowse_echo_host",
+ case ibrowse:send_req(Url, [], get, [], [{connect_to, "localhost"}], 5000) of
+ {ok, "200", Headers, _} ->
+ case proplists:get_value("x-host", Headers) of
+ "example.invalid:8181" ->
+ success;
+ V ->
+ {fail, V}
+ end;
+ Res ->
+ {test_failed, Res}
+ end.
+
%%------------------------------------------------------------------------------
%% Test what happens when the response to a HEAD request is a
%% Chunked-Encoding response with a non-empty body. Issue #67 on
diff --git a/test/ibrowse_test_server.erl b/test/ibrowse_test_server.erl
index 17af695..7a5bb01 100644
--- a/test/ibrowse_test_server.erl
+++ b/test/ibrowse_test_server.erl
@@ -229,6 +229,16 @@ process_request(Sock, Sock_type,
false ->
collect_body
end;
+process_request(Sock, Sock_type,
+ #request{method='GET',
+ headers = Headers,
+ uri = {abs_path, "/ibrowse_echo_host"}}) ->
+ Host = get_host_header(Headers),
+ Resp = [<<"HTTP/1.1 200 OK\r\n">>,
+ <<"Server: ibrowse_test\r\n">>,
+ "x-host: ", Host, "\r\n",
+ <<"Content-Length: 0\r\n\r\n">>],
+ do_send(Sock, Sock_type, Resp);
process_request(Sock, Sock_type,
#request{method='GET',
headers = Headers,
@@ -366,3 +376,10 @@ get_content_length([{http_header, _, _X, _, _Y} | T]) ->
get_content_length(T);
get_content_length([]) ->
undefined.
+
+get_host_header([{http_header, _, 'Host', _, V} | _]) ->
+ V;
+get_host_header([_ | T]) ->
+ get_host_header(T);
+get_host_header([]) ->
+ "not_found".