summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2012-11-28 16:37:06 +0000
committerEmile Joubert <emile@rabbitmq.com>2012-11-28 16:37:06 +0000
commit943a738e09f5fb9bdc05dbc05c885d6e3381d0e5 (patch)
tree15701e54bb7cce5d1fe9c8b2f226b72090e699bf /src
parent1e4b9b5a71484717c43c2915ee3179cd00993d28 (diff)
downloadrabbitmq-server-git-943a738e09f5fb9bdc05dbc05c885d6e3381d0e5.tar.gz
Better quickcheck test of interruptable backing queue fold
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_backing_queue_qc.erl22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/rabbit_backing_queue_qc.erl b/src/rabbit_backing_queue_qc.erl
index 982b247904..61ec02fb4d 100644
--- a/src/rabbit_backing_queue_qc.erl
+++ b/src/rabbit_backing_queue_qc.erl
@@ -159,7 +159,7 @@ qc_purge(#state{bqstate = BQ}) ->
{call, ?BQMOD, purge, [BQ]}.
qc_fold(#state{bqstate = BQ}) ->
- {call, ?BQMOD, fold, [fun foldfun/3, foldacc(), BQ]}.
+ {call, ?BQMOD, fold, [makefoldfun(pos_integer()), foldacc(), BQ]}.
%% Preconditions
@@ -329,12 +329,14 @@ postcondition(S, {call, ?BQMOD, drain_confirmed, _Args}, Res) ->
lists:all(fun (M) -> gb_sets:is_element(M, Confirms) end,
ReportedConfirmed);
-postcondition(S, {call, ?BQMOD, fold, _Args}, {Res, _BQ}) ->
+postcondition(S, {call, ?BQMOD, fold, [FoldFun, Acc0, _BQ0]}, {Res, _BQ1}) ->
#state{messages = Messages} = S,
- lists:foldl(fun ({_SeqId, {MsgProps, Msg}}, Acc) ->
- {cont, Acc1} = foldfun(Msg, MsgProps, Acc),
- Acc1
- end, foldacc(), gb_trees:to_list(Messages)) =:= Res;
+ {_, Model} = lists:foldl(fun ({_SeqId, {_MsgProps, _Msg}}, {stop, Acc}) ->
+ {stop, Acc};
+ ({_SeqId, {MsgProps, Msg}}, {cont, Acc}) ->
+ FoldFun(Msg, MsgProps, Acc)
+ end, {cont, Acc0}, gb_trees:to_list(Messages)),
+ true = Model =:= Res;
postcondition(#state{bqstate = BQ, len = Len}, {call, _M, _F, _A}, _Res) ->
?BQMOD:len(BQ) =:= Len.
@@ -394,7 +396,13 @@ rand_choice(List, Selection, N) ->
rand_choice(List -- [Picked], [Picked | Selection],
N - 1).
-foldfun(Msg, _MsgProps, Acc) -> {cont, [Msg | Acc]}.
+makefoldfun(Size) ->
+ fun (Msg, _MsgProps, Acc) ->
+ case length(Acc) > Size of
+ false -> {cont, [Msg | Acc]};
+ true -> {stop, Acc}
+ end
+ end.
foldacc() -> [].
dropfun(Props) ->