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: