%%----------------------------------------------------------------- %% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2004-2010. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. %% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. %% %% %CopyrightEnd% %% %% %%----------------------------------------------------------------- %% File : orber_web_SUITE.erl %% Purpose : %%----------------------------------------------------------------- -module(orber_web_SUITE). -include_lib("test_server/include/test_server.hrl"). -include_lib("orber/include/corba.hrl"). -include_lib("orber/src/orber_iiop.hrl"). -define(default_timeout, ?t:minutes(3)). -define(match(ExpectedRes, Expr), fun() -> AcTuAlReS = (catch (Expr)), case AcTuAlReS of ExpectedRes -> io:format("------ CORRECT RESULT ------~n~p~n", [AcTuAlReS]), AcTuAlReS; _ -> io:format("###### ERROR ERROR ######~n~p~n", [AcTuAlReS]), ?line exit(AcTuAlReS) end end()). -define(nomatch(Not, Expr), fun() -> AcTuAlReS = (catch (Expr)), case AcTuAlReS of Not -> io:format("###### ERROR ERROR ######~n~p~n", [AcTuAlReS]), ?line exit(AcTuAlReS); _ -> io:format("------ CORRECT RESULT ------~n~p~n", [AcTuAlReS]), AcTuAlReS end end()). %%----------------------------------------------------------------- %% External exports %%----------------------------------------------------------------- -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2]). %%----------------------------------------------------------------- %% Internal exports %%----------------------------------------------------------------- -export([]). -compile(export_all). %%----------------------------------------------------------------- %% Func: all/1 %% Args: %% Returns: %%----------------------------------------------------------------- suite() -> [{suite_callbacks,[ts_install_scb]}]. all() -> [menu, configure, info, nameservice, ifr_select, ifr_data, create, delete_ctx, add_ctx, delete_obj, server]. groups() -> []. init_per_suite(Config) -> Config. end_per_suite(_Config) -> ok. init_per_group(_GroupName, Config) -> Config. end_per_group(_GroupName, Config) -> Config. %%----------------------------------------------------------------- %% Init and cleanup functions. %%----------------------------------------------------------------- init_per_testcase(_Case, Config) -> ?line Dog=test_server:timetrap(?default_timeout), Path = code:which(?MODULE), code:add_pathz(filename:join(filename:dirname(Path), "idl_output")), orber:jump_start(2875), oe_orber_test_server:oe_register(), [{watchdog, Dog}|Config]. end_per_testcase(_Case, Config) -> oe_orber_test_server:oe_unregister(), orber:jump_stop(), Path = code:which(?MODULE), code:del_path(filename:join(filename:dirname(Path), "idl_output")), Dog = ?config(watchdog, Config), test_server:timetrap_cancel(Dog), ok. %%----------------------------------------------------------------- %% Test Case: menu %% Description: %%----------------------------------------------------------------- menu(doc) -> [""]; menu(suite) -> []; menu(_) -> Node = atom_to_list(node()), OK = orber_web:menu(env, [{"node", Node}]), ?match(OK, orber_web:menu(env, [])), ?match(OK, orber_web:menu(env, [42, {"node", Node}, "wrong"])), ?match({'EXIT', _E}, orber_web:menu(env, [{"node", localhost}])), ok. %%----------------------------------------------------------------- %% Test Case: configure %% Description: %%----------------------------------------------------------------- configure(doc) -> [""]; configure(suite) -> []; configure(_) -> Node = atom_to_list(node()), ?match({'EXIT', _}, orber_web:configure(env, [])), ?match({'EXIT', _}, orber_web:configure(env, [{"node", localhost}, {"data", atom}])), ?match([_H|_T], orber_web:configure(env, [{"node", Node}, {"data", ""}])), ?match([_H|_T], orber_web:configure(env, [{"node", Node}, {"data", "[{orber_debug_level, 9}]"}])), ?match({ok, 9}, application:get_env(orber, orber_debug_level)), ?match([_H|_T], orber_web:configure(env, [{"node", "bad_node"}, {"data", "[{orber_debug_level, 9}]"}])), ?match({error, _}, orber_web:configure(env, [{"node", Node}, {"data", "{orber_debug_level 9}"}])), ok. %%----------------------------------------------------------------- %% Test Case: info %% Description: %%----------------------------------------------------------------- info(doc) -> [""]; info(suite) -> []; info(_) -> ?match({'EXIT', _}, orber_web:info(env, [])), ?match({'EXIT', _}, orber_web:info(env, [{"node", localhost}])), ?match([_H|_T], orber_web:info(env, [{"node", atom_to_list(node())}])), ok. %%----------------------------------------------------------------- %% Test Case: nameservice %% Description: %%----------------------------------------------------------------- nameservice(doc) -> [""]; nameservice(suite) -> []; nameservice(_) -> NodeStr = atom_to_list(node()), ?match({'EXIT', _}, orber_web:nameservice(env, [{"node", localhost}, {"context", "root"}])), ?match({'EXIT', _}, orber_web:nameservice(env, [{"node", localhost}, {"context", "id1"}])), ?match([_H|_T], orber_web:nameservice(env, [{"node", "bad_node"}, {"context", "root"}])), ?match([_,_,_,NodeStr|_], orber_web:nameservice(env, [{"node", NodeStr}, {"context", "root"}])), ?match({ok,_}, orber_web:nameservice(env, [{"node", NodeStr}, {"context", "id1"}])), ?match([_H|_T], orber_web:add_ctx(env, [{"node", NodeStr}, {"context", "root"}, {"id", "id1"}])), ?match([_H|_T], orber_web:add_ctx(env, [{"node", NodeStr}, {"context", "id1"}, {"id", "id2"}])), [_,_,_,IOR] = ?match([_,_,_,_], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[{pseudo, true}]"}, {"namestr", "id1/id2/id3"}, {"bind", "rebind"}])), ?match(#'IOP_IOR'{}, corba:string_to_object(IOR)), ?match([_,"id1"|_], orber_web:nameservice(env, [{"node", NodeStr}, {"context", "id1"}])), ?nomatch({error, _}, orber_web:nameservice(env, [{"node", NodeStr}, {"context", "id1/id2"}, {"object", "id3"}])), ok. %%----------------------------------------------------------------- %% Test Case: ifr_select %% Description: %%----------------------------------------------------------------- ifr_select(doc) -> [""]; ifr_select(suite) -> []; ifr_select(_) -> ?match({'EXIT', _}, orber_web:ifr_select(env, [])), ?match({'EXIT', _}, orber_web:ifr_select(env, [{"node", localhost}])), ?match([_H|_T], orber_web:ifr_select(env, [{"node", "bad_node"}])), ?match([_H|_T], orber_web:ifr_select(env, [{"node", atom_to_list(node())}])), ok. %%----------------------------------------------------------------- %% Test Case: ifr_data %% Description: %%----------------------------------------------------------------- ifr_data(doc) -> [""]; ifr_data(suite) -> []; ifr_data(_) -> ?match({'EXIT', _}, orber_web:ifr_data(env, [])), ?match({'EXIT', _}, orber_web:ifr_data(env, [{"node", localhost}, {"table", "ir_ModuleDef"}])), ?match({error, _}, orber_web:ifr_data(env, [{"node", "bad_host"}, {"table", "ir_ModuleDef"}])), ?match({'EXIT', _}, orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "bad_table"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_ModuleDef"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_InterfaceDef"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_StructDef"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_ExceptionDef"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_ConstantDef"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_EnumDef"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_AliasDef"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_AttributeDef"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_OperationDef"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_Contained"}])), ?match([_H|_T], orber_web:ifr_data(env, [{"node", atom_to_list(node())}, {"table", "ir_TypedefDef"}])), ok. %%----------------------------------------------------------------- %% Test Case: create %% Description: %%----------------------------------------------------------------- create(doc) -> [""]; create(suite) -> []; create(_) -> NodeStr = atom_to_list(node()), ?match({'EXIT', _}, orber_web:create(env, [])), ?match({'EXIT', _}, orber_web:create(env, [{"node", localhost}])), ?match({error, _}, orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[bad_option 42]"}, {"namestr", "[]"}, {"bind", "rebind"}])), ?match({error, _}, orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[bad_argument 42]"}, {"options", "[]"}, {"namestr", "[]"}, {"bind", "rebind"}])), ?match([_, NodeStr|_T], orber_web:create(env, [{"node", NodeStr}])), [_,IOR] = ?match([_,_], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[]"}, {"namestr", ""}, {"bind", "rebind"}])), ?match(#'IOP_IOR'{}, corba:string_to_object(IOR)), [_,_,_,_,_,IOR2] = ?match([_,_,_,_,_,_], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[]"}, {"namestr", "id1"}, {"bind", "rebind"}])), ?match(#'IOP_IOR'{}, corba:string_to_object(IOR2)), [_,_,_,IOR3] = ?match([_,_,_,_], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[{pseudo, true}]"}, {"namestr", "id2"}, {"bind", "rebind"}])), ?match(#'IOP_IOR'{}, corba:string_to_object(IOR3)), [_,IOR4] =?match([_,_], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[{pseudo, true}]"}, {"namestr", ""}, {"bind", "rebind"}])), ?match(#'IOP_IOR'{}, corba:string_to_object(IOR4)), ?match([_], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[{unknown, option}]"}, {"namestr", "id1"}, {"bind", "rebind"}])), ?match([_, "id1"], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[]"}, {"namestr", "id1"}, {"bind", "bind"}])), ?match([_, "id2"], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[{pseudo, true}]"}, {"namestr", "id2"}, {"bind", "bind"}])), ok. %%----------------------------------------------------------------- %% Test Case: delete_ctx %% Description: %%----------------------------------------------------------------- delete_ctx(doc) -> [""]; delete_ctx(suite) -> []; delete_ctx(_) -> ?match({ok, _}, orber_web:delete_ctx(env, [{"node", atom_to_list(node())}, {"context", "id1"}])), ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())}, {"context", "root"}, {"id", "id1"}])), ?match([_H|_T], orber_web:delete_ctx(env, [{"node", atom_to_list(node())}, {"context", "id1"}])), ok. %%----------------------------------------------------------------- %% Test Case: add_ctx %% Description: %%----------------------------------------------------------------- add_ctx(doc) -> [""]; add_ctx(suite) -> []; add_ctx(_) -> ?match({error, _}, orber_web:add_ctx(env, [{"node", "bad_node"}, {"context", "root"}, {"id", "id1"}])), ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())}, {"context", "root"}, {"id", ""}])), ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())}, {"context", "root"}, {"id", "id1"}])), ?match([_H|_T], orber_web:add_ctx(env, [{"node", atom_to_list(node())}, {"context", "id1"}, {"id", "id2"}])), ok. %%----------------------------------------------------------------- %% Test Case: delete_obj %% Description: %%----------------------------------------------------------------- delete_obj(doc) -> [""]; delete_obj(suite) -> []; delete_obj(_) -> NodeStr = atom_to_list(node()), ?match({error, _}, orber_web:delete_obj(env, [{"node", "bad_node"}, {"context", "id1"}, {"action", "unbind"}])), ?match({error, _}, orber_web:delete_obj(env, [{"node", "bad_node"}, {"context", "id1"}, {"action", "both"}])), ?match({'EXIT', _}, orber_web:delete_obj(env, [{"node", bad_node}, {"context", "id1"}, {"action", "both"}])), ?match({error, _}, orber_web:delete_obj(env, [{"node", NodeStr}, {"context", "non/existing"}, {"action", "unbind"}])), [_,_,_,_,_,IOR2] = ?match([_,_,_,_,_,_], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[]"}, {"namestr", "id1"}, {"bind", "rebind"}])), ?match(#'IOP_IOR'{}, corba:string_to_object(IOR2)), ?match({error, _}, orber_web:delete_obj(env, [{"node", NodeStr}, {"context", "bad/INS./id"}, {"action", "unbind"}])), [_,_,_,IOR3] = ?match([_,_,_,_], orber_web:create(env, [{"node", NodeStr}, {"module", "orber_test_server"}, {"arguments", "[]"}, {"options", "[{pseudo, true}]"}, {"namestr", "id2"}, {"bind", "rebind"}])), ?match(#'IOP_IOR'{}, corba:string_to_object(IOR3)), ?match([_, "id1"|_], orber_web:delete_obj(env, [{"node", NodeStr}, {"context", "id1"}, {"action", "unbind"}])), ?match([_, "id2"|_], orber_web:delete_obj(env, [{"node", NodeStr}, {"context", "id2"}, {"action", "unbind"}])), ok. %%----------------------------------------------------------------- %% Test Case: server %% Description: %%----------------------------------------------------------------- server(doc) -> [""]; server(suite) -> []; server(_) -> NodeStr = "node=" ++ atom_to_list(node()), {ok, Pid} = ?match({ok,_}, orber_web_server:start()), ?match({error,{already_started, Pid}}, orber_web_server:start_link()), ?match({error,{already_started,Pid}}, orber_web_server:start()), ?match({orber, _}, orber_web_server:config_data()), ?match([_H|_T], orber_web_server:ifr_select(env, "node=badnode")), ?match([_H|_T], orber_web_server:ifr_select(env, "node=" ++ NodeStr)), ?match([_H|_T], orber_web_server:menu(env, NodeStr)), ?match([_H|_T], orber_web_server:configure(env, NodeStr ++ "&data=[{orber_debug_level, 9}]")), ?match([_H|_T], orber_web_server:nameservice(env, NodeStr ++ "&context=root")), ?match([_H|_T], orber_web_server:info(env, NodeStr)), ?match([_H|_T], orber_web_server:ifr_data(env, NodeStr ++ "&table=ir_ModuleDef")), ?match([_H|_T], orber_web_server:create(env, NodeStr)), ?match([_H|_T], orber_web_server:add_ctx(env, NodeStr ++ "&context=root&id=id1")), ?match([_H|_T], orber_web_server:delete_ctx(env, NodeStr++"&context=id1")), ?match([_H|_T], orber_web_server:delete_obj(env, NodeStr++"&context=id1&action=unbind")), ?match([_H|_T], orber_web_server:default_selection(env, NodeStr)), ?match(ok, orber_web_server:stop()), ok.