You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2017/06/09 16:23:39 UTC

[couchdb] branch 2.1.x updated: Account for extra newlines in response body

This is an automated email from the ASF dual-hosted git repository.

davisp pushed a commit to branch 2.1.x
in repository https://gitbox.apache.org/repos/asf/couchdb.git


The following commit(s) were added to refs/heads/2.1.x by this push:
     new aca0693  Account for extra newlines in response body
aca0693 is described below

commit aca0693a5a0767254c5d5146b44fac6fba339f7f
Author: Paul J. Davis <pa...@gmail.com>
AuthorDate: Fri Jun 9 09:03:50 2017 -0500

    Account for extra newlines in response body
    
    The timeout=1 (1ms) parameter would some times trigger extra newlines to be
    included in the response body. The use of `binary:split/2` would then
    return different portions of the body depending on timing in the
    cluster. This change adds a helper function to split out all newlines in
    the response and then returns the last non-empty line.
    
    This also removes introspection of the clustered update sequence since
    this is an HTTP API behavior tests and those are defined as opaque
    values.
    
    COUCHDB-3415
---
 src/chttpd/test/chttpd_db_test.erl | 36 ++++++++++++++++--------------------
 1 file changed, 16 insertions(+), 20 deletions(-)

diff --git a/src/chttpd/test/chttpd_db_test.erl b/src/chttpd/test/chttpd_db_test.erl
index 02d74ad..96ce01e 100644
--- a/src/chttpd/test/chttpd_db_test.erl
+++ b/src/chttpd/test/chttpd_db_test.erl
@@ -83,33 +83,29 @@ should_return_ok_true_on_bulk_update(Url) ->
 
 
 should_accept_live_as_an_alias_for_continuous(Url) ->
-    ?_test(begin
-        {ok, _, _, ResultBody} =
-            test_request:get(Url ++ "/_changes?feed=live&timeout=1", [?AUTH]),
-        % https://issues.apache.org/jira/browse/COUCHDB-3415?filter=12340503
-        % if the decode fails, print out ResultBody, so we can debug what
-        % extra data is coming in.
-        {ResultJson} = try ?JSON_DECODE(ResultBody) of
-            Json -> Json
+    GetLastSeq = fun(Bin) ->
+        Parts = binary:split(Bin, <<"\n">>, [global]),
+        Filtered = [P || P <- Parts, size(P) > 0],
+        LastSeqBin = lists:last(Filtered),
+        {Result} = try ?JSON_DECODE(LastSeqBin) of
+            Data -> Data
         catch
-            throw:Error ->
-                io:format(user, "~nJSON_DECODE error: ~p~n", [Error]),
-                io:format(user, "~nOffending String: ~p~n", [ResultBody]),
+            _:_ ->
                 ?assert(false) % should not happen, abort
         end,
-        <<LastSeqNum0:1/binary, "-", _/binary>> = couch_util:get_value(
-            <<"last_seq">>, ResultJson, undefined),
-        LastSeqNum = list_to_integer(binary_to_list(LastSeqNum0)),
+        couch_util:get_value(<<"last_seq">>, Result, undefined)
+    end,
+    ?_test(begin
+        {ok, _, _, ResultBody1} =
+            test_request:get(Url ++ "/_changes?feed=live&timeout=1", [?AUTH]),
+        LastSeq1 = GetLastSeq(ResultBody1),
 
         {ok, _, _, _} = create_doc(Url, "testdoc2"),
-        {ok, _, _, ResultBody2} = 
+        {ok, _, _, ResultBody2} =
             test_request:get(Url ++ "/_changes?feed=live&timeout=1", [?AUTH]),
-        [_, CleanedResult] = binary:split(ResultBody2, <<"\n">>),
-        {[{_, Seq}, _]} = ?JSON_DECODE(CleanedResult),
-        <<SeqNum0:1/binary, "-", _/binary>> = Seq,
-        SeqNum = list_to_integer(binary_to_list(SeqNum0)),
+        LastSeq2 = GetLastSeq(ResultBody2),
 
-        ?assertEqual(LastSeqNum + 1, SeqNum)
+        ?assertNotEqual(LastSeq1, LastSeq2)
     end).
 
 

-- 
To stop receiving notification emails like this one, please contact
['"commits@couchdb.apache.org" <co...@couchdb.apache.org>'].