X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_test.erl;h=867131a44691984dcef91f3060c59ff14db91ee7;hp=d5c83c30ad26d0375d591e861e628716303fdae6;hb=9aec6848a87dcccac15aea762cc6d5bb18ff731a;hpb=c021866458e347a8c704217247ba207ad99c5cb7 diff --git a/modules/erl/euphorik_test.erl b/modules/erl/euphorik_test.erl index d5c83c3..867131a 100644 --- a/modules/erl/euphorik_test.erl +++ b/modules/erl/euphorik_test.erl @@ -1,16 +1,38 @@ % coding: utf-8 +% Copyright 2008 Grégory Burri +% +% This file is part of Euphorik. +% +% Euphorik is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Euphorik is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Euphorik. If not, see . +% % Module de test de euphorik. % Crée un certain nombre d'utilisateur et post des messages aléatoire. -module(euphorik_test). --compile(export_all). - +-export([ + start/2, + stop/1, + bench_get_messages/0, + bench_get_messages_avec_2_conversations/0 +]). -include("../include/euphorik_bd.hrl"). % N est le nombre d'utilisateur -start(N) -> +% M est le nombre de message que chaque utilisateur va poster +start(N, M) -> Ids = creer_users(N), lists:map( fun(Id) -> @@ -19,7 +41,7 @@ start(N) -> fun() -> {A1, A2, A3} = now(), random:seed(A1, A2, A3), - loop(Id) + loop(Id, M) end ) end, @@ -29,13 +51,59 @@ start(N) -> stop(Pids) -> lists:foreach(fun(Pid) -> exit(Pid, kill) end, Pids). + +bench_get_messages() -> + T = [ + {page,"chat"}, + {cookie,"5G84A5CJXMCPEHNI8T5A9"}, + {message_count,40}, + {last_message_id,0}, + {main_page,1}, + {troll_id,0}, + {conversations,{array,[]}} + ], + moyenne_temps(euphorik_protocole, wait_event, [T], 20). + + +bench_get_messages_avec_2_conversations() -> + T = [ + {page,"chat"}, + {cookie,"5G84A5CJXMCPEHNI8T5A9"}, + {message_count,40}, + {last_message_id,0}, + {main_page,1}, + {troll_id,0}, + {conversations,{array, [ + {struct, [ + {root, 921}, + {page,1}, + {last_message_id,0} + ]}, + {struct, [ + {root, 772}, + {page, 1}, + {last_message_id, 0} + ]} + ]}} + ], + moyenne_temps(euphorik_protocole, wait_event, [T], 20). + + +moyenne_temps(Module, Fun, Args, N) -> + moyenne_temps(Module, Fun, Args, N, N, 0). +moyenne_temps(_, _, _, 0, Total, Temps_acc) -> + Temps_acc / Total; +moyenne_temps(Module, Fun, Args, N, Total, Temps_acc) -> + {Temps, _} = timer:tc(Module, Fun, Args), + moyenne_temps(Module, Fun, Args, N - 1, Total, Temps_acc + Temps). + % Crée N user avec des noms aléatoires et renvoie la liste des id. creer_users(N) -> creer_users(N, []). creer_users(0, Ids) -> lists:map(fun(#user{id = Id}) -> Id end, Ids); creer_users(N, Ids) -> - creer_users(N - 1, [euphorik_bd:nouveau_user(mot_rand(random:uniform(4) + 4), "", "") | Ids ]). + creer_users(N - 1, [euphorik_bd:nouveau_user(mot_rand(random:uniform(4) + 4), "", "", #profile{}) | Ids ]). % crée un message aléatoire et le renvoie @@ -56,26 +124,32 @@ mot_rand(L, Mot) -> % Tire au hasard de 0 à 3 messages sur les 10 derniers postés, renvoie une liste de int() % répartition : -% 0 : 0.5 -% 1 : 0.3 +% 0 : 0.1 +% 1 : 0.7 % 2 : 0.15 % 3 : 0.05 messages_id_rand() -> - Messages = lists:map(fun(#minichat{id = Id}) -> Id end, euphorik_bd:messages(30)), R = random:uniform(), - if R =< 0.5 -> []; - R > 0.5 andalso R =< 0.8 -> - tire_element_rand(1, Messages); - R > 0.8 andalso R =< 0.95 -> - tire_element_rand(2, Messages); + if R =< 0.1 -> + []; true -> - tire_element_rand(3, Messages) + Messages = lists:map(fun(#minichat{id = Id}) -> Id end, euphorik_bd:messages(8)), + if + R > 0.1 andalso R =< 0.8 -> + tire_element_rand(1, Messages); + R > 0.8 andalso R =< 0.95 -> + tire_element_rand(2, Messages); + true -> + tire_element_rand(3, Messages) + end end. % tire N element distinct parmis la liste L proposée tire_element_rand(N, L) when N =< length(L) -> - tire_element_rand(N, L, []). + tire_element_rand(N, L, []); +tire_element_rand(_, _) -> + []. tire_element_rand(0, _, Elements) -> Elements; tire_element_rand(N, L, Elements) -> E = lists:nth(random:uniform(length(L)), L), @@ -86,13 +160,20 @@ tire_element_rand(N, L, Elements) -> tire_element_rand(N-1, L, [E | Elements]) end. - -loop(User_id) -> +loop(User_id, 0) -> + io:format("~p a fini~n", [User_id]); +loop(User_id, M) -> % attend un temp aléatoire compris entre 1 sec et 5 sec timer:sleep(1000 * random:uniform(5)), % poste un message aléatoire par une personne aléatoire répondant à des messages aléatoires {Message, Repond_a} = {message_rand(), messages_id_rand()}, io:format("~p poste ~p et repond a ~w~n", [User_id, Message, Repond_a]), - euphorik_bd:nouveau_message(Message, User_id, Repond_a), - loop(User_id). + case euphorik_bd:nouveau_message(Message, User_id, Repond_a) of + {erreur, E} -> + io:format("~p : erreur : ~p~n", [User_id, E]), + loop(User_id, M); + _ -> + loop(User_id, M - 1) + end. + \ No newline at end of file