%%% File : ibrowse_test.erl %%% Author : Chandrashekhar Mullaparthi %%% Description : Test ibrowse %%% Created : 14 Oct 2003 by Chandrashekhar Mullaparthi -module(ibrowse_test). -vsn('$Id: ibrowse_test.erl,v 1.1 2005/05/05 22:28:28 chandrusf Exp $ '). -compile(export_all). -import(ibrowse_http_client, [printable_date/0]). send_reqs(Url, NumWorkers, NumReqsPerWorker) -> proc_lib:spawn(?MODULE, send_reqs_1, [Url, NumWorkers, NumReqsPerWorker]). send_reqs_1(Url, NumWorkers, NumReqsPerWorker) -> process_flag(trap_exit, true), Pids = lists:map(fun(_X) -> proc_lib:spawn_link(?MODULE, do_send_req, [Url, NumReqsPerWorker, self()]) end, lists:seq(1,NumWorkers)), put(num_reqs_per_worker, NumReqsPerWorker), do_wait(Pids, now(), printable_date(), 0, 0). do_wait([], _StartNow, StartTime, NumSucc, NumErrs) -> io:format("~n~nDone...~nStartTime -> ~s~n", [StartTime]), io:format("EndTime -> ~s~n", [printable_date()]), io:format("NumSucc -> ~p~n", [NumSucc]), io:format("NumErrs -> ~p~n", [NumErrs]); do_wait(Pids, StartNow, StartTime, NumSucc, NumErrs) -> receive {done, From, _Time, {ChildNumSucc, ChildNumFail}} -> do_wait(Pids--[From], StartNow, StartTime, NumSucc+ChildNumSucc, NumErrs+ChildNumFail); {'EXIT',_, normal} -> do_wait(Pids, StartNow, StartTime, NumSucc, NumErrs); {'EXIT', From, _Reason} -> do_wait(Pids--[From], StartNow, StartTime, NumSucc, NumErrs + get(num_reqs_per_worker)) end. do_send_req(Url, NumReqs, Parent) -> StartTime = now(), Res = do_send_req_1(Url, NumReqs, {0, 0}), Parent ! {done, self(), StartTime, Res}. do_send_req_1(_Url, 0, {NumSucc, NumFail}) -> {NumSucc, NumFail}; do_send_req_1(Url, NumReqs, {NumSucc, NumFail}) -> case ibrowse:send_req(Url, [], get, [], [], 10000) of {ok, _Status, _Headers, _Body} -> do_send_req_1(Url, NumReqs-1, {NumSucc+1, NumFail}); _Err -> do_send_req_1(Url, NumReqs-1, {NumSucc, NumFail+1}) end. drv_ue_test() -> drv_ue_test(lists:duplicate(1024, 127)). drv_ue_test(Data) -> [{port, Port}| _] = ets:lookup(ibrowse_table, port), % erl_ddll:unload_driver("ibrowse_drv"), % timer:sleep(1000), % erl_ddll:load_driver("../priv", "ibrowse_drv"), % Port = open_port({spawn, "ibrowse_drv"}, []), {Time, Res} = timer:tc(ibrowse_lib, drv_ue, [Data, Port]), io:format("Time -> ~p~n", [Time]), io:format("Data Length -> ~p~n", [length(Data)]), io:format("Res Length -> ~p~n", [length(Res)]). % io:format("Result -> ~s~n", [Res]). ue_test() -> ue_test(lists:duplicate(1024, $?)). ue_test(Data) -> {Time, Res} = timer:tc(ibrowse_lib, url_encode, [Data]), io:format("Time -> ~p~n", [Time]), io:format("Data Length -> ~p~n", [length(Data)]), io:format("Res Length -> ~p~n", [length(Res)]). % io:format("Result -> ~s~n", [Res]).