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