From d2c19c15b887d44b92fa36c5f49d7f2ff755f8ad Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Thu, 19 Feb 2015 15:35:44 +0100
Subject: test_server: Replace usage of erlang:now() with usage of new API

---
 lib/test_server/src/test_server.app.src  |  2 +-
 lib/test_server/src/test_server.erl      | 24 ++++++++-------------
 lib/test_server/src/test_server_ctrl.erl | 37 ++++++++++++++------------------
 lib/test_server/src/test_server_node.erl |  5 ++---
 lib/test_server/src/test_server_sup.erl  | 15 ++++---------
 lib/test_server/src/ts_install_cth.erl   | 11 ++++------
 6 files changed, 36 insertions(+), 58 deletions(-)

diff --git a/lib/test_server/src/test_server.app.src b/lib/test_server/src/test_server.app.src
index 173f7075db..5538e8b851 100644
--- a/lib/test_server/src/test_server.app.src
+++ b/lib/test_server/src/test_server.app.src
@@ -34,5 +34,5 @@
   {env, []},
   {runtime_dependencies, ["tools-2.6.14","stdlib-2.0","runtime_tools-1.8.14",
 			  "observer-2.0","kernel-3.0","inets-5.10",
-			  "syntax_tools-1.6.16","erts-6.0"]}]}.
+			  "syntax_tools-1.6.16","erts-7.0"]}]}.
   
diff --git a/lib/test_server/src/test_server.erl b/lib/test_server/src/test_server.erl
index 9192a76a17..bfecb6efd6 100644
--- a/lib/test_server/src/test_server.erl
+++ b/lib/test_server/src/test_server.erl
@@ -1410,7 +1410,7 @@ lookup_config(Key,Config) ->
 
 %% timer:tc/3
 ts_tc(M, F, A) ->
-    Before = erlang:now(),
+    Before = erlang:monotonic_time(),
     Result = try
 		 apply(M, F, A)
 	     catch
@@ -1430,12 +1430,8 @@ ts_tc(M, F, A) ->
 			     {'EXIT',Reason}
 		     end
 	     end,
-    After = erlang:now(),
-    Elapsed =
-	(element(1,After)*1000000000000
-	 +element(2,After)*1000000+element(3,After)) -
-	(element(1,Before)*1000000000000
-	 +element(2,Before)*1000000+element(3,Before)),
+    After   = erlang:monotonic_time(),
+    Elapsed = erlang:convert_time_unit(After-Before, native, micro_seconds),
     {Elapsed, Result}.
 
 set_loc(Stk) ->
@@ -1851,7 +1847,7 @@ time_ms_check(Other) ->
 time_ms_apply(Func, TCPid, MultAndScale) ->
     {_,GL} = process_info(TCPid, group_leader),
     WhoAmI = self(),				% either TC or IO server
-    T0 = now(),
+    T0 = os:timestamp(),
     UserTTSup = 
 	spawn(fun() -> 
 		      user_timetrap_supervisor(Func, WhoAmI, TCPid,
@@ -1884,7 +1880,7 @@ user_timetrap_supervisor(Func, Spawner, TCPid, GL, T0, MultAndScale) ->
     receive
 	{UserTT,Result} ->
 	    demonitor(MonRef, [flush]),
-	    Elapsed = trunc(timer:now_diff(now(), T0) / 1000),
+	    Elapsed = trunc(timer:now_diff(os:timestamp(), T0) / 1000),
 	    try time_ms_check(Result) of
 		TimeVal ->
 		    %% this is the new timetrap value to set (return value
@@ -2407,9 +2403,8 @@ is_release_available(Release) ->
 %%
 
 run_on_shielded_node(Fun, CArgs) when is_function(Fun), is_list(CArgs) ->
-    {A,B,C} = now(),
-    Name = "shielded_node-" ++ integer_to_list(A) ++ "-" ++ integer_to_list(B)
-	++ "-" ++ integer_to_list(C),
+    Nr = erlang:unique_integer([positive]),
+    Name = "shielded_node-" ++ integer_to_list(Nr),
     Node = case start_node(Name, slave, [{args, "-hidden " ++ CArgs}]) of
 	       {ok, N} -> N;
 	       Err -> fail({failed_to_start_shielded_node, Err})
@@ -2468,9 +2463,8 @@ is_cover(Name) ->
 %% A filename of the form <Stem><Number> is generated, and the
 %% function checks that that file doesn't already exist.
 temp_name(Stem) ->
-    {A,B,C} = erlang:now(),
-    RandomNum = A bxor B bxor C,
-    RandomName = Stem ++ integer_to_list(RandomNum),
+    Num = erlang:unique_integer([positive]),
+    RandomName = Stem ++ integer_to_list(Num),
     {ok,Files} = file:list_dir(filename:dirname(Stem)),
     case lists:member(RandomName,Files) of
 	true ->
diff --git a/lib/test_server/src/test_server_ctrl.erl b/lib/test_server/src/test_server_ctrl.erl
index af8921fe75..b9a87bce2c 100644
--- a/lib/test_server/src/test_server_ctrl.erl
+++ b/lib/test_server/src/test_server_ctrl.erl
@@ -99,7 +99,7 @@
 -define(last_link, "last_link").
 -define(last_test, "last_test").
 -define(html_ext, ".html").
--define(now, erlang:now()).
+-define(now, os:timestamp()).
 
 -define(void_fun, fun() -> ok end).
 -define(mod_result(X), if X == skip -> skipped;
@@ -1204,19 +1204,14 @@ init_tester(Mod, Func, Args, Dir, Name, {_,_,MinLev}=Levels,
 report_severe_error(Reason) ->
     test_server_sup:framework_call(report, [severe_error,Reason]).
 
-%% timer:tc/3
-ts_tc(M, F, A) ->
-    Before = ?now,
-    Val = (catch apply(M, F, A)),
-    After = ?now,
-    Elapsed = elapsed_time(Before, After),
-    {Elapsed,Val}.
-
-elapsed_time(Before, After) ->
-    (element(1,After)*1000000000000 +
-     element(2,After)*1000000 + element(3,After)) -
-    (element(1,Before)*1000000000000 +
-     element(2,Before)*1000000 + element(3,Before)).
+ts_tc(M,F,A) ->
+    Before = erlang:monotonic_time(),
+    Result = (catch apply(M, F, A)),
+    After   = erlang:monotonic_time(),
+    Elapsed = erlang:convert_time_unit(After-Before,
+				       native,
+				       micro_seconds),
+    {Elapsed, Result}.
 
 start_extra_tools(ExtraTools) ->
     start_extra_tools(ExtraTools, []).
@@ -2473,7 +2468,7 @@ run_test_cases_loop([{conf,Ref,Props,{Mod,Func}}|_Cases]=Cs0,
 			file:set_cwd(filename:dirname(get(test_server_dir))),
 			After = ?now,
 			Before = get(test_server_parallel_start_time),
-			Elapsed = elapsed_time(Before, After)/1000000,
+			Elapsed = timer:now_diff(After, Before)/1000000,
 			put(test_server_total_time, Elapsed),
 			{false,tl(Mode0),undefined,Elapsed,
 			 update_status(Ref, OkSkipFail, Status)};
@@ -2482,7 +2477,7 @@ run_test_cases_loop([{conf,Ref,Props,{Mod,Func}}|_Cases]=Cs0,
 			%% parallel group (io buffering is active)
 			OkSkipFail = wait_for_cases(Ref),
 			queue_test_case_io(Ref, self(), 0, Mod, Func),
-			Elapsed = elapsed_time(conf_start(Ref, Mode0),?now)/1000000,
+			Elapsed = timer:now_diff(?now, conf_start(Ref, Mode0))/1000000,
 			case CurrIOHandler of
 			    {Ref,_} ->
 				%% current_io_handler was set by start conf of this
@@ -2499,12 +2494,12 @@ run_test_cases_loop([{conf,Ref,Props,{Mod,Func}}|_Cases]=Cs0,
 		%% this is an end conf for a non-parallel group that's not
 		%% nested under a parallel group, so no need to buffer io
 		{false,tl(Mode0),undefined,
-		 elapsed_time(conf_start(Ref, Mode0),?now)/1000000, Status};
+		 timer:now_diff(?now, conf_start(Ref, Mode0))/1000000, Status};
 	    {Ref,_} ->
 		%% this is an end conf for a non-parallel group nested under
 		%% a parallel group (io buffering is active)
 		queue_test_case_io(Ref, self(), 0, Mod, Func),
-		Elapsed = elapsed_time(conf_start(Ref, Mode0),?now)/1000000,
+		Elapsed = timer:now_diff(?now, conf_start(Ref, Mode0))/1000000,
 		case CurrIOHandler of
 		    {Ref,_} ->
 			%% current_io_handler was set by start conf of this
@@ -2559,7 +2554,7 @@ run_test_cases_loop([{conf,Ref,Props,{Mod,Func}}|_Cases]=Cs0,
 			    %% 1. check the TS_RANDOM_SEED env variable
 			    %% 2. check random_seed in process state
 			    %% 3. use value provided with shuffle option
-			    %% 4. use now() values for seed
+			    %% 4. use timestamp() values for seed
 			    case os:getenv("TS_RANDOM_SEED") of
 				Undef when Undef == false ; Undef == "undefined" ->
 				    case get(test_server_random_seed) of
@@ -3696,8 +3691,8 @@ run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
 		RunDir = filename:dirname(MinorName),
 		Ext =
 		    if Num == 0 ->
-			    {_,S,Us} = now(),
-			    lists:flatten(io_lib:format(".~w.~w", [S,Us]));
+			    Nr = erlang:unique_integer([positive]),
+			    lists:flatten(io_lib:format(".~w", [Nr]));
 		       true ->
 			    lists:flatten(io_lib:format(".~w", [Num]))
 		    end,
diff --git a/lib/test_server/src/test_server_node.erl b/lib/test_server/src/test_server_node.erl
index acd47788db..9d87eca07e 100644
--- a/lib/test_server/src/test_server_node.erl
+++ b/lib/test_server/src/test_server_node.erl
@@ -618,9 +618,8 @@ do_quote_progname([Prog,Arg|Args]) ->
     end.
 
 random_element(L) ->
-    {A,B,C} = now(),
-    E = lists:sum([A,B,C]) rem length(L),
-    lists:nth(E+1, L).
+    random:seed(os:timestamp()),
+    lists:nth(random:uniform(length(L)), L).
 
 find_release(latest) ->
     "/usr/local/otp/releases/latest/bin/erl";
diff --git a/lib/test_server/src/test_server_sup.erl b/lib/test_server/src/test_server_sup.erl
index 96e369a138..7a1f7803eb 100644
--- a/lib/test_server/src/test_server_sup.erl
+++ b/lib/test_server/src/test_server_sup.erl
@@ -121,14 +121,8 @@ messages_get(Msgs) ->
     end.
 
 timecall(M, F, A) ->
-    Befor = erlang:now(),
-    Val = apply(M, F, A),
-    After = erlang:now(),
-    Elapsed =
-        (element(1,After)*1000000+element(2,After)+element(3,After)/1000000)-
-        (element(1,Befor)*1000000+element(2,Befor)+element(3,Befor)/1000000),
-    {Elapsed, Val}.
-
+    {Elapsed, Val} = timer:tc(M, F, A),
+    {Elapsed / 1000000, Val}.
 
 
 call_crash(Time,Crash,M,F,A) ->
@@ -874,9 +868,8 @@ unique_name() ->
 util_loop(State) ->		       
     receive
 	{From,unique_name} ->
-	    {_,S,Us} = now(),
-	    Ms = trunc(Us/1000),
-	    Name = lists:flatten(io_lib:format("~w.~w", [S,Ms])),
+	    Nr = erlang:unique_integer([positive]),
+	    Name = integer_to_list(Nr),
 	    if Name == State#util_state.latest_name ->
 		    timer:sleep(1),
 		    self() ! {From,unique_name},
diff --git a/lib/test_server/src/ts_install_cth.erl b/lib/test_server/src/ts_install_cth.erl
index 7746bbed6f..3dfa6174fe 100644
--- a/lib/test_server/src/ts_install_cth.erl
+++ b/lib/test_server/src/ts_install_cth.erl
@@ -238,12 +238,9 @@ generate_nodenames2(0, _Hosts, Acc) ->
     Acc;
 generate_nodenames2(N, Hosts, Acc) ->
     Host=lists:nth((N rem (length(Hosts)))+1, Hosts),
-    Name=list_to_atom(temp_nodename("nod", []) ++ "@" ++ Host),
+    Name=list_to_atom(temp_nodename("nod") ++ "@" ++ Host),
     generate_nodenames2(N-1, Hosts, [Name|Acc]).
 
-temp_nodename([], Acc) ->
-    lists:flatten(Acc);
-temp_nodename([Chr|Base], Acc) ->
-    {A,B,C} = erlang:now(),
-    New = [Chr | integer_to_list(Chr bxor A bxor B+A bxor C+B)],
-    temp_nodename(Base, [New|Acc]).
+temp_nodename(Base) ->
+    Num = erlang:unique_integer([positive]),
+    Base ++ integer_to_list(Num).
-- 
cgit v1.2.3