#!/usr/bin/env escript
%% -*- erlang -*-
%%! -sname quickcheck
-mode(compile).

%% A helper to test quickcheck properties on a running broker
%% NodeStr is a local broker node name
%% ModStr is the module containing quickcheck properties
%% TrialsStr is the number of trials
main([NodeStr, ModStr, NumTestsStr, MaxSizeStr]) ->
    {ok, Hostname} = inet:gethostname(),
    Node = list_to_atom(NodeStr ++ "@" ++ Hostname),
    Mod  = list_to_atom(ModStr),
    NumTests = erlang:list_to_integer(NumTestsStr),
    MaxSize = erlang:list_to_integer(MaxSizeStr),
    case rpc:call(Node, code, ensure_loaded, [proper]) of
        {module, proper} ->
            case rpc:call(Node, proper, module,
                          [Mod] ++ [[{numtests,         NumTests},
                                     {max_size,         MaxSize},
                                     {constraint_tries, 200}]]) of
                [] -> ok;
                R  -> io:format("~p.~n", [R]),
                      quit(1)
            end;
        {badrpc, Reason} ->
            io:format("Could not contact node ~p: ~p.~n", [Node, Reason]),
            quit(2);
        {error,nofile} ->
            io:format("Module PropEr was not found on node ~p~n", [Node]),
            quit(2)
    end;
main([]) ->
    io:format("This script requires a node name and a module.~n").

quit(Status) ->
    case os:type() of
        {unix,  _} -> halt(Status);
        {win32, _} -> init:stop(Status)
    end.

