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