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