1: %%-----------------------------------------------------------------
    2: %%
    3: %% %CopyrightBegin%
    4: %% 
    5: %% Copyright Ericsson AB 2004-2011. All Rights Reserved.
    6: %% 
    7: %% The contents of this file are subject to the Erlang Public License,
    8: %% Version 1.1, (the "License"); you may not use this file except in
    9: %% compliance with the License. You should have received a copy of the
   10: %% Erlang Public License along with this software. If not, it can be
   11: %% retrieved online at http://www.erlang.org/.
   12: %% 
   13: %% Software distributed under the License is distributed on an "AS IS"
   14: %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
   15: %% the License for the specific language governing rights and limitations
   16: %% under the License.
   17: %% 
   18: %% %CopyrightEnd%
   19: %%
   20: %%
   21: %%-----------------------------------------------------------------
   22: %% File    : orber_web_SUITE.erl
   23: %% Purpose : 
   24: %%-----------------------------------------------------------------
   25: 
   26: -module(orber_web_SUITE).
   27: 
   28: -include_lib("test_server/include/test_server.hrl").
   29: -include_lib("orber/include/corba.hrl").
   30: -include_lib("orber/src/orber_iiop.hrl").
   31: 
   32: -define(default_timeout, ?t:minutes(3)).
   33: 
   34: -define(match(ExpectedRes, Expr),
   35:         fun() ->
   36: 		AcTuAlReS = (catch (Expr)),
   37: 		case AcTuAlReS of
   38: 		    ExpectedRes ->
   39: 			io:format("------ CORRECT RESULT ------~n~p~n",
   40: 				  [AcTuAlReS]),
   41: 			AcTuAlReS;
   42: 		    _ ->
   43: 			io:format("###### ERROR ERROR ######~n~p~n",
   44: 				  [AcTuAlReS]),
   45: 			?line exit(AcTuAlReS)
   46: 		end
   47: 	end()).
   48: 
   49: -define(nomatch(Not, Expr),
   50:         fun() ->
   51: 		AcTuAlReS = (catch (Expr)),
   52: 		case AcTuAlReS of
   53: 		    Not ->
   54: 			io:format("###### ERROR ERROR ######~n~p~n",
   55: 				  [AcTuAlReS]),
   56: 			?line exit(AcTuAlReS);
   57: 		    _ ->
   58: 			io:format("------ CORRECT RESULT ------~n~p~n",
   59: 				  [AcTuAlReS]),
   60: 			AcTuAlReS
   61: 		end
   62: 	end()).
   63: 
   64: 
   65: %%-----------------------------------------------------------------
   66: %% External exports
   67: %%-----------------------------------------------------------------
   68: -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
   69: 	 init_per_group/2,end_per_group/2]).
   70: 
   71: %%-----------------------------------------------------------------
   72: %% Internal exports
   73: %%-----------------------------------------------------------------
   74: -compile(export_all).
   75: 
   76: %%-----------------------------------------------------------------
   77: %% Func: all/1
   78: %% Args: 
   79: %% Returns: 
   80: %%-----------------------------------------------------------------
   81: suite() -> [{ct_hooks,[ts_install_cth]}].
   82: 
   83: all() -> 
   84:     [menu, configure, info, nameservice, ifr_select,
   85:      ifr_data, create, delete_ctx, add_ctx, delete_obj,
   86:      server].
   87: 
   88: groups() -> 
   89:     [].
   90: 
   91: init_per_suite(Config) ->
   92:     Config.
   93: 
   94: end_per_suite(_Config) ->
   95:     ok.
   96: 
   97: init_per_group(_GroupName, Config) ->
   98:     Config.
   99: 
  100: end_per_group(_GroupName, Config) ->
  101:     Config.
  102: 
  103: 
  104: %%-----------------------------------------------------------------
  105: %% Init and cleanup functions.
  106: %%-----------------------------------------------------------------
  107: init_per_testcase(_Case, Config) ->
  108:     ?line Dog=test_server:timetrap(?default_timeout),
  109:     Path = code:which(?MODULE),
  110:     code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
  111:     orber:jump_start(2875),
  112:     oe_orber_test_server:oe_register(),
  113:     [{watchdog, Dog}|Config].
  114: 
  115: 
  116: end_per_testcase(_Case, Config) ->
  117:     oe_orber_test_server:oe_unregister(),
  118:     orber:jump_stop(),
  119:     Path = code:which(?MODULE),
  120:     code:del_path(filename:join(filename:dirname(Path), "idl_output")),
  121:     Dog = ?config(watchdog, Config),
  122:     test_server:timetrap_cancel(Dog),
  123:     ok.
  124: 
  125: %%-----------------------------------------------------------------
  126: %% Test Case: menu
  127: %% Description: 
  128: %%-----------------------------------------------------------------
  129: menu(doc) -> [""];
  130: menu(suite) -> [];
  131: menu(_) ->
  132:     Node = atom_to_list(node()),
  133:     OK = orber_web:menu(env, [{"node", Node}]),
  134:     ?match(OK, orber_web:menu(env, [])),
  135:     ?match(OK, orber_web:menu(env, [42, {"node", Node}, "wrong"])),
  136:     ?match({'EXIT', _E}, orber_web:menu(env, [{"node", localhost}])),
  137:     ok.
  138: 
  139: %%-----------------------------------------------------------------
  140: %% Test Case: configure
  141: %% Description: 
  142: %%-----------------------------------------------------------------
  143: configure(doc) -> [""];
  144: configure(suite) -> [];
  145: configure(_) ->
  146:     Node = atom_to_list(node()),
  147:     ?match({'EXIT', _}, orber_web:configure(env, [])),
  148:     ?match({'EXIT', _}, orber_web:configure(env, [{"node", localhost},
  149: 						  {"data", atom}])),
  150:     ?match([_H|_T], orber_web:configure(env, [{"node", Node}, {"data", ""}])),
  151:     ?match([_H|_T], orber_web:configure(env, [{"node", Node},
  152: 					      {"data", "[{orber_debug_level, 9}]"}])),
  153:     ?match({ok, 9}, application:get_env(orber, orber_debug_level)),
  154:     ?match([_H|_T], orber_web:configure(env, [{"node", "bad_node"},
  155: 					      {"data", "[{orber_debug_level, 9}]"}])),
  156:     ?match({error, _}, orber_web:configure(env, [{"node", Node},
  157: 						 {"data", "{orber_debug_level 9}"}])),
  158:     ok.
  159: 
  160: %%-----------------------------------------------------------------
  161: %% Test Case: info
  162: %% Description: 
  163: %%-----------------------------------------------------------------
  164: info(doc) -> [""];
  165: info(suite) -> [];
  166: info(_) ->
  167:     ?match({'EXIT', _}, orber_web:info(env, [])),
  168:     ?match({'EXIT', _}, orber_web:info(env, [{"node", localhost}])),
  169:     ?match([_H|_T], orber_web:info(env, [{"node", atom_to_list(node())}])),
  170:     ok.
  171: 
  172: %%-----------------------------------------------------------------
  173: %% Test Case: nameservice
  174: %% Description: 
  175: %%-----------------------------------------------------------------
  176: nameservice(doc) -> [""];
  177: nameservice(suite) -> [];
  178: nameservice(_) ->
  179:     NodeStr = atom_to_list(node()),
  180:     ?match({'EXIT', _}, orber_web:nameservice(env, [{"node", localhost}, 
  181: 						    {"context", "root"}])),
  182:     ?match({'EXIT', _}, orber_web:nameservice(env, [{"node", localhost}, 
  183: 						    {"context", "id1"}])),
  184:     ?match([_H|_T], orber_web:nameservice(env, [{"node", "bad_node"}, 
  185: 						{"context", "root"}])),
  186:     ?match([_,_,_,NodeStr|_], orber_web:nameservice(env, [{"node", NodeStr}, 
  187: 							  {"context", "root"}])),
  188:     ?match({ok,_}, orber_web:nameservice(env, [{"node", NodeStr}, 
  189: 					       {"context", "id1"}])),
  190:     ?match([_H|_T], orber_web:add_ctx(env, [{"node", NodeStr},
  191: 					    {"context", "root"},
  192: 					    {"id", "id1"}])),
  193:     ?match([_H|_T], orber_web:add_ctx(env, [{"node", NodeStr},
  194: 					    {"context", "id1"},
  195: 					    {"id", "id2"}])),
  196:     [_,_,_,IOR] = 
  197: 	?match([_,_,_,_], orber_web:create(env, [{"node", NodeStr},
  198: 						 {"module", "orber_test_server"},
  199: 						 {"arguments", "[]"},
  200: 						 {"options", "[{pseudo, true}]"},
  201: 						 {"namestr", "id1/id2/id3"},
  202: 						 {"bind", "rebind"}])),
  203:     ?match(#'IOP_IOR'{}, corba:string_to_object(IOR)),
  204: 
  205:     ?match([_,"id1"|_], orber_web:nameservice(env, [{"node", NodeStr}, 
  206: 						    {"context", "id1"}])),
  207:     ?nomatch({error, _}, orber_web:nameservice(env, [{"node", NodeStr}, 
  208: 						     {"context", "id1/id2"},
  209: 						     {"object", "id3"}])),
  210:     
  211:     ok.
  212: 
  213: %%-----------------------------------------------------------------
  214: %% Test Case: ifr_select
  215: %% Description: 
  216: %%-----------------------------------------------------------------
  217: ifr_select(doc) -> [""];
  218: ifr_select(suite) -> [];
  219: ifr_select(_) ->
  220:     ?match({'EXIT', _}, orber_web:ifr_select(env, [])),
  221:     ?match({'EXIT', _}, orber_web:ifr_select(env, [{"node", localhost}])),
  222:     ?match([_H|_T], orber_web:ifr_select(env, [{"node", "bad_node"}])),
  223:     ?match([_H|_T], orber_web:ifr_select(env, [{"node", atom_to_list(node())}])),
  224:     ok.
  225: 
  226: %%-----------------------------------------------------------------
  227: %% Test Case: ifr_data
  228: %% Description: 
  229: %%-----------------------------------------------------------------
  230: ifr_data(doc) -> [""];
  231: ifr_data(suite) -> [];
  232: ifr_data(_) ->
  233:     ?match({'EXIT', _}, orber_web:ifr_data(env, [])),
  234:     ?match({'EXIT', _}, orber_web:ifr_data(env, [{"node", localhost},
  235: 						 {"table", "ir_ModuleDef"}])),
  236:     ?match({error, _}, orber_web:ifr_data(env, [{"node", "bad_host"},
  237: 						{"table", "ir_ModuleDef"}])),
  238:     ?match({'EXIT', _}, orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  239: 						 {"table", "bad_table"}])),
  240:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  241: 					     {"table", "ir_ModuleDef"}])),
  242:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  243: 					     {"table", "ir_InterfaceDef"}])),
  244:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  245: 					     {"table", "ir_StructDef"}])),
  246:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  247: 					     {"table", "ir_ExceptionDef"}])),
  248:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  249: 					     {"table", "ir_ConstantDef"}])),
  250:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  251: 					     {"table", "ir_EnumDef"}])),
  252:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  253: 					     {"table", "ir_AliasDef"}])),
  254:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  255: 					     {"table", "ir_AttributeDef"}])),
  256:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  257: 					     {"table", "ir_OperationDef"}])),
  258:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  259: 					     {"table", "ir_Contained"}])),
  260:     ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())},
  261: 					     {"table", "ir_TypedefDef"}])),
  262:     ok.
  263: 
  264: %%-----------------------------------------------------------------
  265: %% Test Case: create
  266: %% Description: 
  267: %%-----------------------------------------------------------------
  268: create(doc) -> [""];
  269: create(suite) -> [];
  270: create(_) ->
  271:     NodeStr = atom_to_list(node()),
  272:     ?match({'EXIT', _}, orber_web:create(env, [])),
  273:     ?match({'EXIT', _}, orber_web:create(env, [{"node", localhost}])),
  274:     ?match({error, _}, orber_web:create(env, [{"node", NodeStr},
  275: 					      {"module", "orber_test_server"},
  276: 					      {"arguments", "[]"},
  277: 					      {"options", "[bad_option 42]"},
  278: 					      {"namestr", "[]"},
  279: 					      {"bind", "rebind"}])),
  280:     ?match({error, _}, orber_web:create(env, [{"node", NodeStr},
  281: 					      {"module", "orber_test_server"},
  282: 					      {"arguments", "[bad_argument 42]"},
  283: 					      {"options", "[]"},
  284: 					      {"namestr", "[]"},
  285: 					      {"bind", "rebind"}])),
  286: 
  287:     ?match([_, NodeStr|_T], orber_web:create(env, [{"node", NodeStr}])),
  288:     
  289:     [_,IOR] = ?match([_,_], orber_web:create(env, [{"node", NodeStr},
  290: 						   {"module", "orber_test_server"},
  291: 						   {"arguments", "[]"},
  292: 						   {"options", "[]"},
  293: 						   {"namestr", ""},
  294: 						   {"bind", "rebind"}])),
  295:     ?match(#'IOP_IOR'{}, corba:string_to_object(IOR)),
  296: 
  297:     [_,_,_,_,_,IOR2] =
  298: 	?match([_,_,_,_,_,_], orber_web:create(env, [{"node", NodeStr},
  299: 						     {"module", "orber_test_server"},
  300: 						     {"arguments", "[]"},
  301: 						     {"options", "[]"},
  302: 						     {"namestr", "id1"},
  303: 						     {"bind", "rebind"}])),
  304:     ?match(#'IOP_IOR'{}, corba:string_to_object(IOR2)),
  305: 
  306:     [_,_,_,IOR3] =
  307: 	?match([_,_,_,_], orber_web:create(env, [{"node", NodeStr},
  308: 						 {"module", "orber_test_server"},
  309: 						 {"arguments", "[]"},
  310: 						 {"options", "[{pseudo, true}]"},
  311: 						 {"namestr", "id2"},
  312: 						 {"bind", "rebind"}])),
  313:     ?match(#'IOP_IOR'{}, corba:string_to_object(IOR3)),
  314: 
  315:     [_,IOR4] =?match([_,_], orber_web:create(env, [{"node", NodeStr},
  316: 						   {"module", "orber_test_server"},
  317: 						   {"arguments", "[]"},
  318: 						   {"options", "[{pseudo, true}]"},
  319: 						   {"namestr", ""},
  320: 						   {"bind", "rebind"}])),
  321:     ?match(#'IOP_IOR'{}, corba:string_to_object(IOR4)),
  322: 
  323:     ?match([_], orber_web:create(env, [{"node", NodeStr},
  324: 				       {"module", "orber_test_server"},
  325: 				       {"arguments", "[]"},
  326: 				       {"options", "[{unknown, option}]"},
  327: 				       {"namestr", "id1"},
  328: 				       {"bind", "rebind"}])),
  329:     
  330:     ?match([_, "id1"], orber_web:create(env, [{"node", NodeStr},
  331: 					      {"module", "orber_test_server"},
  332: 					      {"arguments", "[]"},
  333: 					      {"options", "[]"},
  334: 					      {"namestr", "id1"},
  335: 					      {"bind", "bind"}])),
  336:     
  337:     ?match([_, "id2"], orber_web:create(env, [{"node", NodeStr},
  338: 					      {"module", "orber_test_server"},
  339: 					      {"arguments", "[]"},
  340: 					      {"options", "[{pseudo, true}]"},
  341: 					      {"namestr", "id2"},
  342: 					      {"bind", "bind"}])),
  343:     ok.
  344: 
  345: %%-----------------------------------------------------------------
  346: %% Test Case: delete_ctx
  347: %% Description: 
  348: %%-----------------------------------------------------------------
  349: delete_ctx(doc) -> [""];
  350: delete_ctx(suite) -> [];
  351: delete_ctx(_) ->
  352:     ?match({ok, _}, orber_web:delete_ctx(env, [{"node", atom_to_list(node())},
  353: 					       {"context", "id1"}])),
  354:     ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())},
  355: 					    {"context", "root"},
  356: 					    {"id", "id1"}])),
  357:     ?match([_H|_T], orber_web:delete_ctx(env, [{"node", atom_to_list(node())},
  358: 					       {"context", "id1"}])),
  359:     ok.
  360: 
  361: %%-----------------------------------------------------------------
  362: %% Test Case: add_ctx
  363: %% Description: 
  364: %%-----------------------------------------------------------------
  365: add_ctx(doc) -> [""];
  366: add_ctx(suite) -> [];
  367: add_ctx(_) ->
  368:     ?match({error, _}, orber_web:add_ctx(env, [{"node", "bad_node"},
  369:  					       {"context", "root"},
  370: 					       {"id", "id1"}])),
  371:     ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())},
  372: 					    {"context", "root"},
  373: 					    {"id", ""}])),
  374:     ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())},
  375: 					    {"context", "root"},
  376: 					    {"id", "id1"}])),
  377:     ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())},
  378: 					    {"context", "id1"},
  379: 					    {"id", "id2"}])),
  380:     ok.
  381: 
  382: %%-----------------------------------------------------------------
  383: %% Test Case: delete_obj
  384: %% Description: 
  385: %%-----------------------------------------------------------------
  386: delete_obj(doc) -> [""];
  387: delete_obj(suite) -> [];
  388: delete_obj(_) ->
  389:     NodeStr = atom_to_list(node()),
  390:     ?match({error, _}, orber_web:delete_obj(env, [{"node", "bad_node"},
  391: 						  {"context", "id1"},
  392: 						  {"action", "unbind"}])),
  393:     ?match({error, _}, orber_web:delete_obj(env, [{"node", "bad_node"},
  394: 						  {"context", "id1"},
  395: 						  {"action", "both"}])),
  396:     ?match({'EXIT', _}, orber_web:delete_obj(env, [{"node", bad_node},
  397: 						   {"context", "id1"},
  398: 						   {"action", "both"}])),
  399:     ?match({error, _}, orber_web:delete_obj(env, [{"node", NodeStr},
  400: 						  {"context", "non/existing"},
  401: 						  {"action", "unbind"}])),
  402:     [_,_,_,_,_,IOR2] =
  403: 	?match([_,_,_,_,_,_], orber_web:create(env, [{"node", NodeStr},
  404: 						     {"module", "orber_test_server"},
  405: 						     {"arguments", "[]"},
  406: 						     {"options", "[]"},
  407: 						     {"namestr", "id1"},
  408: 						     {"bind", "rebind"}])),
  409:     ?match(#'IOP_IOR'{}, corba:string_to_object(IOR2)),
  410:     
  411:     ?match({error, _}, orber_web:delete_obj(env, [{"node", NodeStr},
  412: 						  {"context", "bad/INS./id"},
  413: 						  {"action", "unbind"}])),
  414: 
  415:     [_,_,_,IOR3] =
  416: 	?match([_,_,_,_], orber_web:create(env, [{"node", NodeStr},
  417: 						 {"module", "orber_test_server"},
  418: 						 {"arguments", "[]"},
  419: 						 {"options", "[{pseudo, true}]"},
  420: 						 {"namestr", "id2"},
  421: 						 {"bind", "rebind"}])),
  422:     ?match(#'IOP_IOR'{}, corba:string_to_object(IOR3)),
  423: 
  424:     ?match([_, "id1"|_], orber_web:delete_obj(env, [{"node", NodeStr},
  425: 						    {"context", "id1"},
  426: 						    {"action", "unbind"}])),
  427:     ?match([_, "id2"|_], orber_web:delete_obj(env, [{"node", NodeStr},
  428: 						    {"context", "id2"},
  429: 						    {"action", "unbind"}])),
  430: 
  431: 
  432:     ok.
  433: 
  434: %%-----------------------------------------------------------------
  435: %% Test Case: server
  436: %% Description: 
  437: %%-----------------------------------------------------------------
  438: server(doc) -> [""];
  439: server(suite) -> [];
  440: server(_) ->
  441:     NodeStr = "node=" ++ atom_to_list(node()),
  442:     {ok, Pid} = ?match({ok,_}, orber_web_server:start()),
  443:     ?match({error,{already_started, Pid}}, orber_web_server:start_link()),
  444:     ?match({error,{already_started,Pid}}, orber_web_server:start()),
  445:     ?match({orber, _}, orber_web_server:config_data()),
  446:     ?match([_H|_T], orber_web_server:ifr_select(env, "node=badnode")),
  447:     ?match([_H|_T], orber_web_server:ifr_select(env, "node=" ++ NodeStr)),
  448:     ?match([_H|_T], orber_web_server:menu(env, NodeStr)),
  449:     ?match([_H|_T], orber_web_server:configure(env, NodeStr ++ "&data=[{orber_debug_level, 9}]")), 
  450:     ?match([_H|_T], orber_web_server:nameservice(env, NodeStr ++ "&context=root")),
  451:     ?match([_H|_T], orber_web_server:info(env, NodeStr)),
  452:     ?match([_H|_T], orber_web_server:ifr_data(env, NodeStr ++ "&table=ir_ModuleDef")),
  453:     ?match([_H|_T], orber_web_server:create(env, NodeStr)),
  454:     ?match([_H|_T], orber_web_server:add_ctx(env, NodeStr ++ "&context=root&id=id1")),
  455:     ?match([_H|_T], orber_web_server:delete_ctx(env, NodeStr++"&context=id1")),
  456:     ?match([_H|_T], orber_web_server:delete_obj(env, NodeStr++"&context=id1&action=unbind")),
  457:     ?match([_H|_T], orber_web_server:default_selection(env, NodeStr)),
  458:     ?match(ok, orber_web_server:stop()),
  459:     ok.
  460: 
  461: