From b046454d76031067f6b49faec938ad422b47c44b Mon Sep 17 00:00:00 2001
From: Siri Hansen <siri@erlang.org>
Date: Wed, 27 Mar 2013 14:49:00 +0100
Subject: [reltool] Clean up work dir after test

This is to save space in daily tests.
Result of failed test cases are still saved.
---
 lib/reltool/test/reltool_server_SUITE.erl | 50 ++++++++++++++++++++++++++++---
 1 file changed, 46 insertions(+), 4 deletions(-)

(limited to 'lib')

diff --git a/lib/reltool/test/reltool_server_SUITE.erl b/lib/reltool/test/reltool_server_SUITE.erl
index 23338d9ecd..08e3cd8e80 100644
--- a/lib/reltool/test/reltool_server_SUITE.erl
+++ b/lib/reltool/test/reltool_server_SUITE.erl
@@ -28,6 +28,7 @@
 -include_lib("reltool/src/reltool.hrl").
 -include("reltool_test_lib.hrl").
 -include_lib("common_test/include/ct.hrl").
+-include_lib("kernel/include/file.hrl").
 
 -define(NODE_NAME, '__RELTOOL__TEMPORARY_TEST__NODE__').
 -define(WORK_DIR, "reltool_work_dir").
@@ -36,8 +37,9 @@
 %% Initialization functions.
 
 init_per_suite(Config) ->
+    {ok,Cwd} = file:get_cwd(),
     ?ignore(file:make_dir(?WORK_DIR)),
-    reltool_test_lib:init_per_suite(Config).
+    [{cwd,Cwd}|reltool_test_lib:init_per_suite(Config)].
 
 end_per_suite(Config) ->
     reltool_test_lib:end_per_suite(Config).
@@ -49,9 +51,49 @@ init_per_testcase(Func,Config) ->
 	pang -> ok
     end,
     reltool_test_lib:init_per_testcase(Func,Config).
-end_per_testcase(Func,Config) -> 
+end_per_testcase(Func,Config) ->
+    ok = file:set_cwd(filename:join(?config(cwd,Config),?WORK_DIR)),
+    {ok,All}  = file:list_dir("."),
+    Files = [F || F <- All, false == lists:prefix("save.",F)],
+    case ?config(tc_status,Config) of
+	ok ->
+	    ok;
+	_Fail ->
+	    SaveDir = "save."++atom_to_list(Func),
+	    ok = file:make_dir(SaveDir),
+	    save_test_result(Files,SaveDir)
+    end,
+    rm_files(Files),
+    ok = file:set_cwd(?config(cwd,Config)),
     reltool_test_lib:end_per_testcase(Func,Config).
 
+
+save_test_result(Files,DestDir) ->
+    Tar = "copy.tar",
+    ok = erl_tar:create(Tar, Files),
+    ok = erl_tar:extract(Tar, [{cwd,DestDir}]),
+    ok = file:delete(Tar),
+    ok.
+
+rm_files([F | Fs]) ->
+    case file:read_file_info(F) of
+	{ok,#file_info{type=directory}} ->
+	    rm_dir(F);
+	{ok,_Regular} ->
+	    ok = file:delete(F)
+    end,
+    rm_files(Fs);
+rm_files([]) ->
+    ok.
+
+rm_dir(Dir) ->
+    {ok,Files} = file:list_dir(Dir),
+    rm_files([filename:join(Dir, F) || F <- Files]),
+    ok = file:del_dir(Dir).
+
+
+
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% SUITE specification
 
@@ -504,7 +546,7 @@ create_script(_Config) ->
     %% ?m(OrigScript2, Script2),
     
     ?m(equal, diff_script(OrigScript, Script)),
-    
+
     %% Stop server
     ?m(ok, reltool:stop(Pid)),
     ok.
@@ -753,7 +795,7 @@ create_target(_Config) ->
     Erl = filename:join([TargetDir, "bin", "erl"]),
     {ok, Node} = ?msym({ok, _}, start_node(?NODE_NAME, Erl)),
     ?msym(ok, stop_node(Node)),
-    
+
     ok.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- 
cgit v1.2.3