Hi Filipe,
I tested this new branch and it seems to have issues (at least on my machine) :
ok 44 reduce_false
ok 45 reduce_false_temp
not ok 46 replication
Reason: expected '"tony"', got 'null'
Trace back (most recent call first):
0:
Error("expected '\"tony\"', got 'null'")
46: /Users/bitdiddle/emacs/foo/couchdb/test/javascript/cli_runner.js
T(false,"expected '\"tony\"', got 'null'",undefined)
324: /Users/bitdiddle/emacs/foo/couchdb/share/www/script/couch_test_runner.js
TEquals("tony",null)
I also retested the original patch with and without the sleep(100) and without
still fails, though it's move around a bit in the etaps, so this could be other
issues.
Cheers,
Bob
On Oct 31, 2012, at 11:35 AM, Filipe David Manana <[email protected]> wrote:
> On Wed, Oct 31, 2012 at 4:32 PM, Paul Davis <[email protected]>
> wrote:
>> Nice find
>
> Say thanks to Damien :)
> Fixed in an older etap version, I just ported it to latest etap.
>
> Robert (Dionne), wanna test this to see if it fixes the hangs you used
> to have with OTP R15Bx?
> thanks
>
>>
>> On Wed, Oct 31, 2012 at 11:29 AM, <[email protected]> wrote:
>>> Updated Branches:
>>> refs/heads/1424-fix-etap-consuming-any-test-message [created] 67d531b02
>>>
>>>
>>> COUCHDB-1424 Fix etap to not consume any message
>>>
>>> Turns out that etap consumes any message in the mailbox in
>>> some cases. This can make some tests that use message passing
>>> hang, as etap itself consumes the messages.
>>>
>>>
>>> Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
>>> Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/67d531b0
>>> Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/67d531b0
>>> Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/67d531b0
>>>
>>> Branch: refs/heads/1424-fix-etap-consuming-any-test-message
>>> Commit: 67d531b028503b316c9ff8842b8fb34ea75db29d
>>> Parents: 8ccf696
>>> Author: Filipe David Borba Manana <[email protected]>
>>> Authored: Wed Oct 31 16:19:48 2012 +0100
>>> Committer: Filipe David Borba Manana <[email protected]>
>>> Committed: Wed Oct 31 16:19:48 2012 +0100
>>>
>>> ----------------------------------------------------------------------
>>> src/etap/etap.erl | 21 +++++++++++----------
>>> 1 files changed, 11 insertions(+), 10 deletions(-)
>>> ----------------------------------------------------------------------
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/67d531b0/src/etap/etap.erl
>>> ----------------------------------------------------------------------
>>> diff --git a/src/etap/etap.erl b/src/etap/etap.erl
>>> index 7380013..ae3896c 100644
>>> --- a/src/etap/etap.erl
>>> +++ b/src/etap/etap.erl
>>> @@ -120,14 +120,14 @@ plan(N) when is_integer(N), N > 0 ->
>>> %% @doc End the current test plan and output test results.
>>> %% @todo This should probably be done in the test_server process.
>>> end_tests() ->
>>> - timer:sleep(100),
>>> + Ref = make_ref(),
>>> case whereis(etap_server) of
>>> - undefined -> self() ! true;
>>> - _ -> etap_server ! {self(), state}
>>> + undefined -> self() ! {Ref, true};
>>> + _ -> etap_server ! {self(), state, Ref}
>>> end,
>>> - State = receive X -> X end,
>>> + State = receive {Ref, X} -> X end,
>>> if
>>> - State#test_state.planned == -1 ->
>>> + is_record(State, test_state) andalso State#test_state.planned ==
>>> -1 ->
>>> io:format("1..~p~n", [State#test_state.count]);
>>> true ->
>>> ok
>>> @@ -564,8 +564,8 @@ test_server(State) ->
>>> count = State#test_state.count + 1,
>>> fail = State#test_state.fail + 1
>>> };
>>> - {From, state} ->
>>> - From ! State,
>>> + {From, state, Ref} ->
>>> + From ! {Ref, State},
>>> State;
>>> {_From, diag, Message} ->
>>> io:format("~s~n", [Message]),
>>> @@ -573,8 +573,8 @@ test_server(State) ->
>>> {From, count} ->
>>> From ! State#test_state.count,
>>> State;
>>> - {From, is_skip} ->
>>> - From ! State#test_state.skip,
>>> + {From, is_skip, Ref} ->
>>> + From ! {Ref, State#test_state.skip},
>>> State;
>>> done ->
>>> exit(normal)
>>> @@ -584,7 +584,8 @@ test_server(State) ->
>>> %% @private
>>> %% @doc Process the result of a test and send it to the etap_server process.
>>> mk_tap(Result, Desc) ->
>>> - IsSkip = lib:sendw(etap_server, is_skip),
>>> + etap_server ! {self(), is_skip, Ref = make_ref()} ,
>>> + receive {Ref, IsSkip} -> ok end,
>>> case [IsSkip, Result] of
>>> [_, true] ->
>>> etap_server ! {self(), pass, Desc},
>>>
>
>
>
> --
> Filipe David Manana,
>
> "Reasonable men adapt themselves to the world.
> Unreasonable men adapt the world to themselves.
> That's why all progress depends on unreasonable men."