From f7969aa372c65b52fa957f674621ab2913b79c51 Mon Sep 17 00:00:00 2001 From: Patrik Nyblom Date: Tue, 26 Oct 2010 18:23:16 +0200 Subject: Add test loading all of OTP in boot script and running embedded --- lib/kernel/test/code_SUITE.erl | 81 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) (limited to 'lib/kernel') diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl index c9437df258..521e7ba21e 100644 --- a/lib/kernel/test/code_SUITE.erl +++ b/lib/kernel/test/code_SUITE.erl @@ -19,7 +19,7 @@ -module(code_SUITE). -include("test_server.hrl"). - +%-compile(export_all). -export([all/1]). -export([set_path/1, get_path/1, add_path/1, add_paths/1, del_path/1, replace_path/1, load_file/1, load_abs/1, ensure_loaded/1, @@ -31,6 +31,7 @@ where_is_file_cached/1, where_is_file_no_cache/1, purge_stacktrace/1, mult_lib_roots/1, bad_erl_libs/1, code_archive/1, code_archive2/1, on_load/1, + big_boot_embedded/1, on_load_embedded/1, on_load_errors/1, native_early_modules/1]). -export([init_per_testcase/2, fin_per_testcase/2, @@ -53,6 +54,7 @@ all(suite) -> where_is_file_no_cache, where_is_file_cached, purge_stacktrace, mult_lib_roots, bad_erl_libs, code_archive, code_archive2, on_load, on_load_embedded, + big_boot_embedded, on_load_errors, native_early_modules]. init_per_suite(Config) -> @@ -1145,6 +1147,22 @@ compile_files([File | Files], SrcDir, OutDir) -> compile_files([], _, _) -> ok. +big_boot_embedded(suite) -> + []; +big_boot_embedded(doc) -> + ["Test that a boot file with (almost) all of OTP can be used to start an" + " embeddedd system."]; +big_boot_embedded(Config) when is_list(Config) -> + ?line {BootArg,AppsInBoot} = create_big_boot(Config), + ?line {ok, Node} = + ?t:start_node(big_boot_embedded, slave, + [{args,"-boot "++BootArg++" -mode embedded"}]), + ?line RemoteNodeApps = + [ {X,Y} || {X,_,Y} <- + rpc:call(Node,application,loaded_applications,[]) ], + ?line true = lists:sort(AppsInBoot) =:= lists:sort(RemoteNodeApps), + ok. + on_load(Config) when is_list(Config) -> Master = on_load_test_case_process, @@ -1281,6 +1299,67 @@ create_script(Config) -> ?line file:close(Fd), {filename:dirname(Name),filename:basename(Name)}. +create_big_boot(Config) -> + ?line {ok, OldDir} = file:get_cwd(), + ?line {Options,Local} = case is_source_dir() of + true -> {[no_module_tests,local],true}; + _ -> {[no_module_tests],false} + end, + ?line {LatestDir,LatestName,Apps} = create_big_script(Config,Local), + ?line ok = file:set_cwd(LatestDir), + ?line ok = systools:make_script(LatestName, Options), + ?line ok = file:set_cwd(OldDir), + {filename:join(LatestDir, LatestName),Apps}. + +% The following apps cannot be loaded +% hipe .app references (or can reference) files that have no +% corresponding beam file (if hipe is not enabled) +filter_app("hipe",_) -> + false; +% Dialyzer and typer depends on hipe +filter_app("dialyzer",_) -> + false; +filter_app("typer",_) -> + false; +% Orber requires explicit configuration +filter_app("orber",_) -> + false; +% cos* depends on orber +filter_app("cos"++_,_) -> + false; +% ic has a mod instruction in the app file but no corresponding start function +filter_app("ic",_) -> + false; +% Netconf has some dependency that I really do not understand (maybe like orber) +filter_app("netconf",_) -> + false; +% Safe has the same kind of error in the .app file as ic +filter_app("safe",_) -> + false; +% OS_mon does not find it's port program when running cerl +filter_app("os_mon",true) -> + false; +% Other apps should be OK. +filter_app(_,_) -> + true. +create_big_script(Config,Local) -> + ?line PrivDir = ?config(priv_dir, Config), + ?line Name = filename:join(PrivDir,"full_script_test"), + ?line InitialApplications=application:loaded_applications(), + ?line [application:load(list_to_atom(Y)) || {match,[Y]} <- [ re:run(X,code:lib_dir()++"/"++"([^/-]*).*/ebin",[{capture,[1],list}]) || X <- code:get_path()],filter_app(Y,Local)], + ?line Apps = [ {N,V} || {N,_,V} <- application:loaded_applications()], + ?line {ok,Fd} = file:open(Name ++ ".rel", write), + ?line io:format(Fd, + "{release, {\"Test release 3\", \"P2A\"}, \n" + " {erts, \"9.42\"}, \n" + " ~p}.\n", + [Apps]), + ?line file:close(Fd), + ?line NewlyLoaded = + application:loaded_applications() -- InitialApplications, + ?line [ application:unload(N) || {N,_,_} <- NewlyLoaded], + {filename:dirname(Name),filename:basename(Name),Apps}. + is_source_dir() -> filename:basename(code:lib_dir(kernel)) =:= "kernel" andalso filename:basename(code:lib_dir(stdlib)) =:= "stdlib". -- cgit v1.2.3 From c499f6e21280c9fe2600728a79f8f18519ec665e Mon Sep 17 00:00:00 2001 From: Patrik Nyblom Date: Thu, 25 Nov 2010 12:14:02 +0100 Subject: Make testcase filter away bogus applications from earlier suites --- lib/kernel/test/code_SUITE.erl | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'lib/kernel') diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl index 521e7ba21e..0bf40a9bba 100644 --- a/lib/kernel/test/code_SUITE.erl +++ b/lib/kernel/test/code_SUITE.erl @@ -1339,6 +1339,18 @@ filter_app("safe",_) -> % OS_mon does not find it's port program when running cerl filter_app("os_mon",true) -> false; +% The following apps may be loaded due to earlier test suites and shuld +% not be included +filter_app("app0",_) -> + false; +filter_app("app1",_) -> + false; +filter_app("app2",_) -> + false; +filter_app("group_leader",_) -> + false; +filter_app("app_start_error",_) -> + false; % Other apps should be OK. filter_app(_,_) -> true. -- cgit v1.2.3 From db5e4ea154648387689a4bdb7c3f7bf67081aeb7 Mon Sep 17 00:00:00 2001 From: Patrik Nyblom Date: Fri, 26 Nov 2010 14:59:43 +0100 Subject: Unload stray applications from application_SUITE before creating script --- lib/kernel/test/code_SUITE.erl | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to 'lib/kernel') diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl index 0bf40a9bba..705717ff49 100644 --- a/lib/kernel/test/code_SUITE.erl +++ b/lib/kernel/test/code_SUITE.erl @@ -1339,18 +1339,6 @@ filter_app("safe",_) -> % OS_mon does not find it's port program when running cerl filter_app("os_mon",true) -> false; -% The following apps may be loaded due to earlier test suites and shuld -% not be included -filter_app("app0",_) -> - false; -filter_app("app1",_) -> - false; -filter_app("app2",_) -> - false; -filter_app("group_leader",_) -> - false; -filter_app("app_start_error",_) -> - false; % Other apps should be OK. filter_app(_,_) -> true. @@ -1358,6 +1346,12 @@ create_big_script(Config,Local) -> ?line PrivDir = ?config(priv_dir, Config), ?line Name = filename:join(PrivDir,"full_script_test"), ?line InitialApplications=application:loaded_applications(), + %% Applications left loaded by the application suite, unload them! + ?line UnloadFix=[app0,app1,app2,group_leader,app_start_error], + ?line [application:unload(Leftover) || + Leftover <- UnloadFix, + lists:keymember(Leftover,1,InitialApplications) ], + %% Now we should have only "real" applications... ?line [application:load(list_to_atom(Y)) || {match,[Y]} <- [ re:run(X,code:lib_dir()++"/"++"([^/-]*).*/ebin",[{capture,[1],list}]) || X <- code:get_path()],filter_app(Y,Local)], ?line Apps = [ {N,V} || {N,_,V} <- application:loaded_applications()], ?line {ok,Fd} = file:open(Name ++ ".rel", write), -- cgit v1.2.3