You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2015/09/09 10:42:57 UTC
[14/19] mochiweb commit: updated refs/heads/upstream to bd6ae7c
ensure correct ordering of Set-Cookie output headers #162
Project: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/commit/952087ef
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/tree/952087ef
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/diff/952087ef
Branch: refs/heads/upstream
Commit: 952087ef7a2ce73b8c2d666de13adf138d913d77
Parents: 419ba96
Author: Bob Ippolito <bo...@redivi.com>
Authored: Mon Aug 31 08:30:40 2015 -0700
Committer: Bob Ippolito <bo...@redivi.com>
Committed: Mon Aug 31 08:30:40 2015 -0700
----------------------------------------------------------------------
CHANGES.md | 2 ++
src/mochiweb_request.erl | 8 +++-----
test/mochiweb_test_util.erl | 10 +++++++++-
test/mochiweb_test_util.hrl | 2 +-
test/mochiweb_tests.erl | 17 +++++++++++++++++
5 files changed, 32 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/952087ef/CHANGES.md
----------------------------------------------------------------------
diff --git a/CHANGES.md b/CHANGES.md
index 7102a6f..b7f6c4b 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,5 +1,7 @@
Version 2.13.0 released XXXX-XX-XX
+* Ensure correct ordering of Set-Cookie headers, first in first out.
+ https://github.com/mochi/mochiweb/issues/162
* Improve response times by caching a formatted date once per second
for the response headers with a mochiweb_clock service
https://github.com/mochi/mochiweb/pull/158
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/952087ef/src/mochiweb_request.erl
----------------------------------------------------------------------
diff --git a/src/mochiweb_request.erl b/src/mochiweb_request.erl
index 093d9ba..39890ce 100644
--- a/src/mochiweb_request.erl
+++ b/src/mochiweb_request.erl
@@ -326,12 +326,10 @@ format_response_header({Code, ResponseHeaders}, {?MODULE, [_Socket, _Opts, _Meth
false ->
HResponse1
end,
- F = fun ({K, V}, Acc) ->
- [mochiweb_util:make_io(K), <<": ">>, V, <<"\r\n">> | Acc]
- end,
- End = lists:foldl(F, [<<"\r\n">>], mochiweb_headers:to_list(HResponse2)),
+ End = [[mochiweb_util:make_io(K), <<": ">>, V, <<"\r\n">>]
+ || {K, V} <- mochiweb_headers:to_list(HResponse2)],
Response = mochiweb:new_response({THIS, Code, HResponse2}),
- {[make_version(Version), make_code(Code), <<"\r\n">> | End], Response};
+ {[make_version(Version), make_code(Code), <<"\r\n">> | [End, <<"\r\n">>]], Response};
format_response_header({Code, ResponseHeaders, Length},
{?MODULE, [_Socket, _Opts, _Method, _RawPath, _Version, _Headers]}=THIS) ->
HResponse = mochiweb_headers:make(ResponseHeaders),
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/952087ef/test/mochiweb_test_util.erl
----------------------------------------------------------------------
diff --git a/test/mochiweb_test_util.erl b/test/mochiweb_test_util.erl
index 2fbf14f..a0bf11a 100644
--- a/test/mochiweb_test_util.erl
+++ b/test/mochiweb_test_util.erl
@@ -63,7 +63,7 @@ client_request(SockFun, _Method, []) ->
{the_end, {error, closed}} = {the_end, SockFun(recv)},
ok;
client_request(SockFun, Method,
- [#treq{path=Path, body=Body, xreply=ExReply} | Rest]) ->
+ [#treq{path=Path, body=Body, xreply=ExReply, xheaders=ExHeaders} | Rest]) ->
Request = [atom_to_list(Method), " ", Path, " HTTP/1.1\r\n",
client_headers(Body, Rest =:= []),
"\r\n",
@@ -83,6 +83,14 @@ client_request(SockFun, Method,
?assert(mochiweb_headers:get_value("Date", Headers) =/= undefined),
?assert(mochiweb_headers:get_value("Content-Type", Headers) =/= undefined),
ContentLength = list_to_integer(mochiweb_headers:get_value("Content-Length", Headers)),
+ EHeaders = mochiweb_headers:make(ExHeaders),
+ lists:foreach(
+ fun (K) ->
+ ?assertEqual(mochiweb_headers:get_value(K, EHeaders),
+ mochiweb_headers:get_value(K, Headers))
+ end,
+ %% Assumes implementation details of the headers
+ gb_trees:keys(EHeaders)),
{payload, ExReply} = {payload, drain_reply(SockFun, ContentLength, <<>>)},
client_request(SockFun, Method, Rest).
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/952087ef/test/mochiweb_test_util.hrl
----------------------------------------------------------------------
diff --git a/test/mochiweb_test_util.hrl b/test/mochiweb_test_util.hrl
index 99fdc4e..503be98 100644
--- a/test/mochiweb_test_util.hrl
+++ b/test/mochiweb_test_util.hrl
@@ -1 +1 @@
--record(treq, {path, body= <<>>, xreply= <<>>}).
+-record(treq, {path, body= <<>>, xreply= <<>>, xheaders= []}).
http://git-wip-us.apache.org/repos/asf/couchdb-mochiweb/blob/952087ef/test/mochiweb_tests.erl
----------------------------------------------------------------------
diff --git a/test/mochiweb_tests.erl b/test/mochiweb_tests.erl
index 209971b..0b558ac 100644
--- a/test/mochiweb_tests.erl
+++ b/test/mochiweb_tests.erl
@@ -96,6 +96,23 @@ single_GET_any_test_() ->
?_assertEqual(ok, with_server(Transport, ServerFun, ClientFun))}
|| Transport <- [ssl, plain]].
+
+cookie_header_test() ->
+ ReplyPrefix = "You requested: ",
+ ExHeaders = [{"Set-Cookie", "foo=bar"},
+ {"Set-Cookie", "foo=baz"}],
+ ServerFun = fun (Req) ->
+ Reply = ReplyPrefix ++ Req:get(path),
+ Req:ok({"text/plain", ExHeaders, Reply})
+ end,
+ Path = "cookie_header",
+ ExpectedReply = list_to_binary(ReplyPrefix ++ Path),
+ TestReqs = [#treq{path=Path, xreply=ExpectedReply, xheaders=ExHeaders}],
+ ClientFun = new_client_fun('GET', TestReqs),
+ ok = with_server(plain, ServerFun, ClientFun),
+ ok.
+
+
do_CONNECT(Transport, Times) ->
PathPrefix = "example.com:",
ReplyPrefix = "You requested: ",