1%%
2%% %CopyrightBegin%
3%%
4%% Copyright Ericsson AB 2008-2019. All Rights Reserved.
5%%
6%% Licensed under the Apache License, Version 2.0 (the "License");
7%% you may not use this file except in compliance with the License.
8%% You may obtain a copy of the License at
9%%
10%%     http://www.apache.org/licenses/LICENSE-2.0
11%%
12%% Unless required by applicable law or agreed to in writing, software
13%% distributed under the License is distributed on an "AS IS" BASIS,
14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15%% See the License for the specific language governing permissions and
16%% limitations under the License.
17%%
18%% %CopyrightEnd%
19%%
20
21%%
22%%----------------------------------------------------------------------
23%% Purpose: Test mini encoding/decoding (codec) module of Megaco/H.248
24%%----------------------------------------------------------------------
25
26-module(megaco_codec_mini_SUITE).
27
28%% ----
29
30-include_lib("megaco/include/megaco.hrl").
31-include("megaco_test_lib.hrl").
32
33%% ----
34
35-export([
36 	 suite/0, all/0, groups/0,
37         init_per_suite/1, end_per_suite/1,
38         init_per_group/2, end_per_group/2,
39         init_per_testcase/2, end_per_testcase/2,
40
41	 otp7672_msg01/1,
42 	 otp7672_msg02/1,
43
44         otp16631_msg01/1,
45         otp16631_msg02/1,
46         otp16631_msg03/1,
47         otp16631_msg04/1,
48         otp16631_msg05/1,
49         otp16631_msg06/1,
50         otp16631_msg11/1,
51         otp16631_msg12/1,
52         otp16631_msg13/1,
53         otp16631_msg14/1,
54         otp16631_msg15/1,
55         otp16631_msg16/1,
56         otp16631_msg21/1,
57         otp16631_msg22/1,
58         otp16631_msg23/1,
59         otp16631_msg24/1,
60         otp16631_msg25/1,
61         otp16631_msg26/1,
62         otp16631_msg31/1,
63         otp16631_msg32/1,
64         otp16631_msg33/1,
65         otp16631_msg34/1,
66         otp16631_msg35/1,
67         otp16631_msg36/1
68
69	]).
70
71
72%% ----
73
74-define(SET_DBG(S,D), begin put(severity, S), put(dbg, D) end).
75-define(RESET_DBG(),  begin erase(severity),  erase(dbg)  end).
76
77
78%%======================================================================
79%% Common Test interface functions
80%%======================================================================
81
82suite() ->
83    [{ct_hooks, [ts_install_cth]}].
84
85all() ->
86    [{group, tickets}].
87
88groups() ->
89    [
90     {tickets,  [], tickets_cases()},
91     {otp7672,  [], otp7672_cases()},
92     {otp16631, [], otp16631_cases()}
93    ].
94
95tickets_cases() ->
96    [
97     {group, otp7672},
98     {group, otp16631}
99    ].
100
101otp7672_cases() ->
102    [
103     otp7672_msg01,
104     otp7672_msg02
105    ].
106
107otp16631_cases() ->
108    [
109     otp16631_msg01,
110     otp16631_msg02,
111     otp16631_msg03,
112     otp16631_msg04,
113     otp16631_msg05,
114     otp16631_msg06,
115     otp16631_msg11,
116     otp16631_msg12,
117     otp16631_msg13,
118     otp16631_msg14,
119     otp16631_msg15,
120     otp16631_msg16,
121     otp16631_msg21,
122     otp16631_msg22,
123     otp16631_msg23,
124     otp16631_msg24,
125     otp16631_msg25,
126     otp16631_msg26,
127     otp16631_msg31,
128     otp16631_msg32,
129     otp16631_msg33,
130     otp16631_msg34,
131     otp16631_msg35,
132     otp16631_msg36
133    ].
134
135
136
137%%
138%% -----
139%%
140
141init_per_suite(suite) ->
142    [];
143init_per_suite(doc) ->
144    [];
145init_per_suite(Config0) when is_list(Config0) ->
146
147    ?ANNOUNCE_SUITE_INIT(),
148
149    p("init_per_suite -> entry with"
150      "~n      Config: ~p"
151      "~n      Nodes:  ~p", [Config0, erlang:nodes()]),
152
153    case ?LIB:init_per_suite([{sysmon, false} | Config0]) of
154        {skip, _} = SKIP ->
155            SKIP;
156
157        Config1 when is_list(Config1) ->
158
159            p("init_per_suite -> end when"
160              "~n      Config: ~p"
161              "~n      Nodes:  ~p", [Config1, erlang:nodes()]),
162
163            Config1
164    end.
165
166end_per_suite(suite) -> [];
167end_per_suite(doc) -> [];
168end_per_suite(Config0) when is_list(Config0) ->
169
170    p("end_per_suite -> entry with"
171      "~n      Config: ~p"
172      "~n      Nodes:  ~p", [Config0, erlang:nodes()]),
173
174    Config1 = ?LIB:end_per_suite(Config0),
175
176    p("end_per_suite -> end when"
177      "~n      Nodes:  ~p", [erlang:nodes()]),
178
179    Config1.
180
181
182%%
183%% -----
184%%
185
186init_per_group(_GroupName, Config) ->
187    Config.
188
189end_per_group(_GroupName, Config) ->
190    Config.
191
192
193
194%%
195%% -----
196%%
197
198init_per_testcase(Case, Config) ->
199
200    p("init_per_suite -> entry with"
201      "~n      Config: ~p"
202      "~n      Nodes:  ~p", [Config, erlang:nodes()]),
203
204    put(verbosity,trc),
205    megaco_test_lib:init_per_testcase(Case, Config).
206
207end_per_testcase(Case, Config) ->
208
209    p("end_per_suite -> entry with"
210      "~n      Config: ~p"
211      "~n      Nodes:  ~p", [Config, erlang:nodes()]),
212
213    erase(verbosity),
214    megaco_test_lib:end_per_testcase(Case, Config).
215
216
217
218
219%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
220
221%% # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
222%% Ticket test cases:
223
224
225%% --------------------------------------------------------------
226%%
227
228otp7672_msg01(suite) ->
229    [];
230otp7672_msg01(Config) when is_list(Config) ->
231    %% ?SET_DBG(trc, true),
232    d("otp7672_msg01 -> entry", []),
233    ok = otp7672( otp7672_msg01() ),
234    %% ?RESET_DBG(),
235    ok.
236
237otp7672_msg02(suite) ->
238    [];
239otp7672_msg02(Config) when is_list(Config) ->
240    %% ?SET_DBG(trc, true),
241    d("otp7672_msg02 -> entry", []),
242    ok = otp7672( otp7672_msg02() ),
243    %% ?RESET_DBG(),
244    ok.
245
246
247otp7672_msg01() ->
248    <<"!/1 <TEST> ">>.
249
250otp7672_msg02() ->
251    <<"!/1 <TE> ">>.
252
253otp7672(Msg) ->
254    case megaco_text_mini_decoder:decode_message([], Msg) of
255	{ok, M} ->
256	    t("mini decode successfull: ~n~p", [M]),
257	    ok;
258	Error ->
259	    e("mini decode failed: ~n~p", [Error]),
260	    {error, Error}
261    end.
262
263
264
265%% --------------------------------------------------------------
266%%
267
268otp16631_msg01(suite) ->
269    [];
270otp16631_msg01(Config) when is_list(Config) ->
271    d("otp16631_msg01 -> entry", []),
272    ok = otp16631( otp16631_msg01() ),
273    ok.
274
275otp16631_msg01() ->
276    otp16631_msg("a").
277
278
279%% --
280
281otp16631_msg02(suite) ->
282    [];
283otp16631_msg02(Config) when is_list(Config) ->
284    d("otp16631_msg02 -> entry", []),
285    ok = otp16631( otp16631_msg02() ),
286    ok.
287
288otp16631_msg02() ->
289    otp16631_msg("b").
290
291
292%% --
293
294otp16631_msg03(suite) ->
295    [];
296otp16631_msg03(Config) when is_list(Config) ->
297    d("otp16631_msg03 -> entry", []),
298    ok = otp16631( otp16631_msg03() ),
299    ok.
300
301otp16631_msg03() ->
302    otp16631_msg("c").
303
304
305%% --
306
307otp16631_msg04(suite) ->
308    [];
309otp16631_msg04(Config) when is_list(Config) ->
310    d("otp16631_msg04 -> entry", []),
311    ok = otp16631( otp16631_msg04() ),
312    ok.
313
314otp16631_msg04() ->
315    otp16631_msg("d").
316
317
318%% --
319
320otp16631_msg05(suite) ->
321    [];
322otp16631_msg05(Config) when is_list(Config) ->
323    d("otp16631_msg05 -> entry", []),
324    ok = otp16631( otp16631_msg05() ),
325    ok.
326
327otp16631_msg05() ->
328    otp16631_msg("e").
329
330
331%% --
332
333otp16631_msg06(suite) ->
334    [];
335otp16631_msg06(Config) when is_list(Config) ->
336    d("otp16631_msg06 -> entry", []),
337    ok = otp16631( otp16631_msg06() ),
338    ok.
339
340otp16631_msg06() ->
341    otp16631_msg("f").
342
343
344%% --
345
346otp16631_msg11(suite) ->
347    [];
348otp16631_msg11(Config) when is_list(Config) ->
349    d("otp16631_msg11 -> entry", []),
350    ok = otp16631( otp16631_msg11() ),
351    ok.
352
353otp16631_msg11() ->
354    otp16631_msg("000a").
355
356
357%% --
358
359otp16631_msg12(suite) ->
360    [];
361otp16631_msg12(Config) when is_list(Config) ->
362    d("otp16631_msg12 -> entry", []),
363    ok = otp16631( otp16631_msg12() ),
364    ok.
365
366otp16631_msg12() ->
367    otp16631_msg("000b").
368
369
370%% --
371
372otp16631_msg13(suite) ->
373    [];
374otp16631_msg13(Config) when is_list(Config) ->
375    d("otp16631_msg13 -> entry", []),
376    ok = otp16631( otp16631_msg13() ),
377    ok.
378
379otp16631_msg13() ->
380    otp16631_msg("000c").
381
382
383%% --
384
385otp16631_msg14(suite) ->
386    [];
387otp16631_msg14(Config) when is_list(Config) ->
388    d("otp16631_msg14 -> entry", []),
389    ok = otp16631( otp16631_msg14() ),
390    ok.
391
392otp16631_msg14() ->
393    otp16631_msg("000d").
394
395
396%% --
397
398otp16631_msg15(suite) ->
399    [];
400otp16631_msg15(Config) when is_list(Config) ->
401    d("otp16631_msg15 -> entry", []),
402    ok = otp16631( otp16631_msg15() ),
403    ok.
404
405otp16631_msg15() ->
406    otp16631_msg("000e").
407
408
409%% --
410
411otp16631_msg16(suite) ->
412    [];
413otp16631_msg16(Config) when is_list(Config) ->
414    d("otp16631_msg16 -> entry", []),
415    ok = otp16631( otp16631_msg16() ),
416    ok.
417
418otp16631_msg16() ->
419    otp16631_msg("000f").
420
421
422%% --
423
424otp16631_msg21(suite) ->
425    [];
426otp16631_msg21(Config) when is_list(Config) ->
427    d("otp16631_msg21 -> entry", []),
428    ok = otp16631( otp16631_msg21() ),
429    ok.
430
431otp16631_msg21() ->
432    otp16631_msg("0a12").
433
434
435%% --
436
437otp16631_msg22(suite) ->
438    [];
439otp16631_msg22(Config) when is_list(Config) ->
440    d("otp16631_msg22 -> entry", []),
441    ok = otp16631( otp16631_msg22() ),
442    ok.
443
444otp16631_msg22() ->
445    otp16631_msg("0b12").
446
447
448%% --
449
450otp16631_msg23(suite) ->
451    [];
452otp16631_msg23(Config) when is_list(Config) ->
453    d("otp16631_msg23 -> entry", []),
454    ok = otp16631( otp16631_msg23() ),
455    ok.
456
457otp16631_msg23() ->
458    otp16631_msg("0c12").
459
460
461%% --
462
463otp16631_msg24(suite) ->
464    [];
465otp16631_msg24(Config) when is_list(Config) ->
466    d("otp16631_msg24 -> entry", []),
467    ok = otp16631( otp16631_msg24() ),
468    ok.
469
470otp16631_msg24() ->
471    otp16631_msg("0d12").
472
473
474%% --
475
476otp16631_msg25(suite) ->
477    [];
478otp16631_msg25(Config) when is_list(Config) ->
479    d("otp16631_msg25 -> entry", []),
480    ok = otp16631( otp16631_msg25() ),
481    ok.
482
483otp16631_msg25() ->
484    otp16631_msg("0e12").
485
486
487%% --
488
489otp16631_msg26(suite) ->
490    [];
491otp16631_msg26(Config) when is_list(Config) ->
492    d("otp16631_msg26 -> entry", []),
493    ok = otp16631( otp16631_msg26() ),
494    ok.
495
496otp16631_msg26() ->
497    otp16631_msg("0f12").
498
499
500%% --
501
502otp16631_msg31(suite) ->
503    [];
504otp16631_msg31(Config) when is_list(Config) ->
505    d("otp16631_msg31 -> entry", []),
506    ok = otp16631( otp16631_msg31() ),
507    ok.
508
509otp16631_msg31() ->
510    otp16631_msg("a123").
511
512
513%% --
514
515otp16631_msg32(suite) ->
516    [];
517otp16631_msg32(Config) when is_list(Config) ->
518    d("otp16631_msg32 -> entry", []),
519    ok = otp16631( otp16631_msg32() ),
520    ok.
521
522otp16631_msg32() ->
523    otp16631_msg("b123").
524
525
526%% --
527
528otp16631_msg33(suite) ->
529    [];
530otp16631_msg33(Config) when is_list(Config) ->
531    d("otp16631_msg33 -> entry", []),
532    ok = otp16631( otp16631_msg33() ),
533    ok.
534
535otp16631_msg33() ->
536    otp16631_msg("c123").
537
538
539%% --
540
541otp16631_msg34(suite) ->
542    [];
543otp16631_msg34(Config) when is_list(Config) ->
544    d("otp16631_msg34 -> entry", []),
545    ok = otp16631( otp16631_msg34() ),
546    ok.
547
548otp16631_msg34() ->
549    otp16631_msg("d123").
550
551
552%% --
553
554otp16631_msg35(suite) ->
555    [];
556otp16631_msg35(Config) when is_list(Config) ->
557    d("otp16631_msg35 -> entry", []),
558    ok = otp16631( otp16631_msg35() ),
559    ok.
560
561otp16631_msg35() ->
562    otp16631_msg("e123").
563
564
565%% --
566
567otp16631_msg36(suite) ->
568    [];
569otp16631_msg36(Config) when is_list(Config) ->
570    d("otp16631_msg36 -> entry", []),
571    ok = otp16631( otp16631_msg36() ),
572    ok.
573
574otp16631_msg36() ->
575    otp16631_msg("f123").
576
577
578%% -----
579
580otp16631( Msg ) ->
581    Bin = erlang:list_to_binary(Msg),
582    try megaco_compact_text_encoder:decode_mini_message([], dynamic, Bin) of
583        {ok, _} ->
584            ok;
585        {error, _} = ERROR ->
586            ERROR
587    catch
588        C:E:S ->
589            {error, {C, E, S}}
590    end.
591
592
593otp16631_msg(X) when is_list(X) ->
594    "!/1 [2409:8050:5005:1243:1011::" ++ X ++
595        "] T=2523{C=-{SC=ROOT{SV{MT=RS,RE=901,PF=ETSI_BGF/2,V=3}}}}".
596
597
598
599
600%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
601
602p(F, A) ->
603    io:format("*** [~s] ~p ***"
604	      "~n   " ++ F ++ "~n",
605	      [?FTS(), self() | A]).
606
607
608t(F,A) ->
609    p(printable(get(severity),trc),trc,F,A).
610
611d(F,A) ->
612    p(printable(get(severity),dbg),dbg,F,A).
613
614%% l(F,A) ->
615%%     p(printable(get(severity),log),log,F,A).
616
617e(F,A) ->
618    p(printable(get(severity),err),err,F,A).
619
620
621printable(trc,_) ->
622    true;
623printable(dbg,trc) ->
624    false;
625printable(dbg,_) ->
626    true;
627printable(log,log) ->
628    true;
629printable(log,err) ->
630    true;
631printable(err,err) ->
632    true;
633printable(_,_) ->
634    false.
635
636
637p(true,L,F,A) ->
638    io:format("~s:" ++ F ++ "~n", [image_of(L)|A]);
639p(_,_,_,_) ->
640    ok.
641
642image_of(trc) ->
643    "TRC";
644image_of(dbg) ->
645    "DBG";
646image_of(log) ->
647    "LOG";
648image_of(err) ->
649    "ERR";
650image_of(L) ->
651    io_lib:format("~p",[L]).
652
653