1%% 2%% %CopyrightBegin% 3%% 4%% Copyright Ericsson AB 2004-2020. 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%% Purpose: 23%% 24%% Test: 25%% ts:run(). 26%% ts:run(snmp, [batch]). 27%% ts:run(snmp, snmp_manager_config_SUITE, [batch]). 28%% 29%%---------------------------------------------------------------------- 30-module(snmp_manager_config_SUITE). 31 32 33%%---------------------------------------------------------------------- 34%% Include files 35%%---------------------------------------------------------------------- 36-include_lib("common_test/include/ct.hrl"). 37-include("snmp_test_lib.hrl"). 38-include_lib("snmp/src/manager/snmpm_usm.hrl"). 39-include_lib("snmp/src/app/snmp_internal.hrl"). 40 41 42%%---------------------------------------------------------------------- 43%% External exports 44%%---------------------------------------------------------------------- 45%% -compile(export_all). 46 47-export([ 48 suite/0, all/0, groups/0, 49 init_per_suite/1, end_per_suite/1, 50 init_per_group/2, end_per_group/2, 51 init_per_testcase/2, end_per_testcase/2, 52 53 54 simple_start_and_stop/1, 55 start_without_mandatory_opts1/1, 56 start_without_mandatory_opts2/1, 57 start_with_all_valid_opts/1, 58 start_with_unknown_opts/1, 59 start_with_incorrect_opts/1, 60 start_with_invalid_manager_conf_file1/1, 61 start_with_invalid_users_conf_file1/1, 62 start_with_invalid_agents_conf_file1/1, 63 start_with_invalid_usm_conf_file1/1, 64 start_with_create_db_and_dir_opt/1, 65 66 67 simple_system_op/1, 68 69 70 register_user_using_file/1, 71 register_user_using_function/1, 72 register_user_failed_using_function1/1, 73 74 75 register_agent_using_file/1, 76 register_agent_using_function/1, 77 register_agent_failed_using_function1/1, 78 79 80 register_usm_user_using_file/1, 81 register_usm_user_using_function/1, 82 register_usm_user_failed_using_function1/1, 83 update_usm_user_info/1, 84 85 86 create_and_increment/1, 87 88 89 stats_create_and_increment/1, 90 91 92 otp_7219/1, 93 94 otp_8395_1/1, 95 otp_8395_2/1, 96 otp_8395_3/1, 97 otp_8395_4/1 98 99 ]). 100 101 102%%---------------------------------------------------------------------- 103%% Internal exports 104%%---------------------------------------------------------------------- 105-export([ 106 ]). 107 108 109%%---------------------------------------------------------------------- 110%% Macros 111%%---------------------------------------------------------------------- 112 113 114%%---------------------------------------------------------------------- 115%% Records 116%%---------------------------------------------------------------------- 117 118 119%%====================================================================== 120%% Common Test interface functions 121%%====================================================================== 122 123suite() -> 124 [{ct_hooks, [ts_install_cth]}]. 125 126 127all() -> 128 [ 129 {group, start_and_stop}, 130 {group, normal_op}, 131 {group, tickets} 132 ]. 133 134groups() -> 135 [ 136 {start_and_stop, [], start_and_stop_cases()}, 137 {normal_op, [], normal_op_cases()}, 138 {system, [], system_cases()}, 139 {users, [], users_cases()}, 140 {agents, [], agents_cases()}, 141 {usm_users, [], usm_users_cases()}, 142 {counter, [], counter_cases()}, 143 {stats_counter, [], stats_counter_cases()}, 144 {tickets, [], tickets_cases()}, 145 {otp_8395, [], otp_8395_cases()} 146 ]. 147 148start_and_stop_cases() -> 149 [ 150 simple_start_and_stop, 151 start_without_mandatory_opts1, 152 start_without_mandatory_opts2, 153 start_with_all_valid_opts, 154 start_with_unknown_opts, 155 start_with_incorrect_opts, 156 start_with_create_db_and_dir_opt, 157 start_with_invalid_manager_conf_file1, 158 start_with_invalid_users_conf_file1, 159 start_with_invalid_agents_conf_file1, 160 start_with_invalid_usm_conf_file1 161 ]. 162 163normal_op_cases() -> 164 [ 165 {group, system}, 166 {group, agents}, 167 {group, users}, 168 {group, usm_users}, 169 {group, counter}, 170 {group, stats_counter} 171 ]. 172 173system_cases() -> 174 [ 175 simple_system_op 176 ]. 177 178users_cases() -> 179 [ 180 register_user_using_file, 181 register_user_using_function, 182 register_user_failed_using_function1 183 ]. 184 185agents_cases() -> 186 [ 187 register_agent_using_file, 188 register_agent_using_function, 189 register_agent_failed_using_function1 190 ]. 191 192usm_users_cases() -> 193 [ 194 register_usm_user_using_file, 195 register_usm_user_using_function, 196 register_usm_user_failed_using_function1, 197 update_usm_user_info 198 ]. 199 200counter_cases() -> 201 [ 202 create_and_increment 203 ]. 204 205stats_counter_cases() -> 206 [ 207 stats_create_and_increment 208 ]. 209 210tickets_cases() -> 211 [ 212 otp_7219, 213 {group, otp_8395} 214 ]. 215 216otp_8395_cases() -> 217 [ 218 otp_8395_1, 219 otp_8395_2, 220 otp_8395_3, 221 otp_8395_4 222 ]. 223 224 225init_per_suite(Config0) when is_list(Config0) -> 226 227 ?IPRINT("init_per_suite -> entry with" 228 "~n Config0: ~p", [Config0]), 229 230 case ?LIB:init_per_suite(Config0) of 231 {skip, _} = SKIP -> 232 SKIP; 233 234 Config1 -> 235 236 Config2 = snmp_test_lib:init_suite_top_dir(?MODULE, Config1), 237 238 %% We need one on this node also 239 snmp_test_sys_monitor:start(), 240 241 ?IPRINT("init_per_suite -> end when" 242 "~n Config: ~p", [Config2]), 243 244 Config2 245 end. 246 247end_per_suite(Config0) when is_list(Config0) -> 248 249 ?IPRINT("end_per_suite -> entry with" 250 "~n Config0: ~p", [Config0]), 251 252 snmp_test_sys_monitor:stop(), 253 Config1 = ?LIB:end_per_suite(Config0), 254 255 ?IPRINT("end_per_suite -> end"), 256 257 Config1. 258 259 260init_per_group(_GroupName, Config) -> 261 Config. 262 263end_per_group(_GroupName, Config) -> 264 Config. 265 266 267init_per_testcase(Case, Config) when is_list(Config) -> 268 ?IPRINT("init_per_testcase -> entry with" 269 "~n Config: ~p", [Config]), 270 271 snmp_test_global_sys_monitor:reset_events(), 272 273 SuiteTopDir = ?config(snmp_suite_top_dir, Config), 274 CaseTopDir = filename:join(SuiteTopDir, atom_to_list(Case)), 275 ?line ok = file:make_dir(CaseTopDir), 276 277 ?IPRINT("init_per_testcase -> CaseTopDir: ~p", [CaseTopDir]), 278 MgrTopDir = filename:join(CaseTopDir, "manager/"), 279 ?line ok = file:make_dir(MgrTopDir), 280 MgrConfDir = filename:join(MgrTopDir, "conf/"), 281 ?line ok = file:make_dir(MgrConfDir), 282 MgrDbDir = filename:join(MgrTopDir, "db/"), 283 case Case of 284 start_with_create_db_and_dir_opt -> 285 ok; 286 _ -> 287 ?line ok = file:make_dir(MgrDbDir) 288 end, 289 MgrLogDir = filename:join(MgrTopDir, "log/"), 290 ?line ok = file:make_dir(MgrLogDir), 291 Config1 = [{case_top_dir, CaseTopDir}, 292 {manager_dir, MgrTopDir}, 293 {manager_conf_dir, MgrConfDir}, 294 {manager_db_dir, MgrDbDir}, 295 {manager_log_dir, MgrLogDir} | Config], 296 297 ?IPRINT("init_per_testcase -> done when" 298 "~n Config1: ~p", [Config1]), 299 300 Config1. 301 302 303end_per_testcase(_Case, Config) when is_list(Config) -> 304 305 ?IPRINT("end_per_testcase -> entry with" 306 "~n Config: ~p", [Config]), 307 308 ?IPRINT("system events during test: " 309 "~n ~p", [snmp_test_global_sys_monitor:events()]), 310 311 %% The cleanup is removed due to some really discusting NFS behaviour... 312 %% Also, it can always be useful to retain "all the stuff" after 313 %% the test case in case of debugging... 314 Config. 315 316 317%%====================================================================== 318%% Test functions 319%%====================================================================== 320 321%% 322%% --- 323%% 324 325simple_start_and_stop(suite) -> []; 326simple_start_and_stop(doc) -> 327 "Start the snmp manager config process with the \n" 328 "minimum setof options (config dir)."; 329simple_start_and_stop(Conf) when is_list(Conf) -> 330 put(tname, "SIME-START_AND_STOP"), 331 ?IPRINT("start"), 332 process_flag(trap_exit, true), 333 ConfDir = ?config(manager_conf_dir, Conf), 334 DbDir = ?config(manager_db_dir, Conf), 335 336 write_manager_conf(ConfDir), 337 338 Opts = [{versions, [v1]}, 339 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 340 341 ?line {ok, _Pid} = snmpm_config:start_link(Opts), 342 ?line ok = snmpm_config:stop(), 343 344 ok. 345 346 347%% 348%% --- 349%% 350 351start_without_mandatory_opts1(suite) -> []; 352start_without_mandatory_opts1(doc) -> 353 "Start the snmp manager config process with some of the \n" 354 "mandatory options missing."; 355start_without_mandatory_opts1(Conf) when is_list(Conf) -> 356 put(tname, "START-WO-MAND-OPTS-1"), 357 put(verbosity, trace), 358 ?IPRINT("start"), 359 process_flag(trap_exit, true), 360 ConfDir = ?config(manager_conf_dir, Conf), 361 DbDir = ?config(manager_db_dir, Conf), 362 363 write_manager_conf(ConfDir), 364 365 366 %% config, but no dir: 367 ?IPRINT("config option, but no dir"), 368 Opts = [{priority, normal}, 369 {config, [{verbosity, trace}, {db_dir, DbDir}]}, {mibs, []}], 370 ?line {error, {missing_mandatory,dir}} = config_start(Opts), 371 372 ?IPRINT("done"), 373 ok. 374 375 376%% 377%% --- 378%% 379 380start_without_mandatory_opts2(suite) -> []; 381start_without_mandatory_opts2(doc) -> 382 "Start the snmp manager config process with some of the \n" 383 "mandatory options missing."; 384start_without_mandatory_opts2(Conf) when is_list(Conf) -> 385 put(tname, "START-WO-MAND-OPTS-2"), 386 put(verbosity,trace), 387 ?IPRINT("start"), 388 process_flag(trap_exit, true), 389 ConfDir = ?config(manager_conf_dir, Conf), 390 391 write_manager_conf(ConfDir), 392 393 394 %% Second set of options (no config): 395 ?IPRINT("no config option"), 396 Opts = [{priority, normal}, 397 {mibs, []}], 398 ?line {error, {missing_mandatory,config,[dir, db_dir]}} = 399 config_start(Opts), 400 401 ?IPRINT("done"), 402 ok. 403 404 405%% 406%% --- 407%% 408 409start_with_all_valid_opts(suite) -> []; 410start_with_all_valid_opts(doc) -> 411 "Start the snmp manager config process with the \n" 412 "complete set of all the valid options."; 413start_with_all_valid_opts(Conf) when is_list(Conf) -> 414 put(tname, "START-W-ALL-VALID-OPTS"), 415 put(tname,swavo), 416 ?IPRINT("start"), 417 process_flag(trap_exit, true), 418 ConfDir = ?config(manager_conf_dir, Conf), 419 DbDir = ?config(manager_db_dir, Conf), 420 LogDir = ?config(manager_log_dir, Conf), 421 StdMibDir = filename:join(code:priv_dir(snmp), "mibs") ++ "/", 422 423 write_manager_conf(ConfDir), 424 425 426 %% Third set of options (no versions): 427 ?IPRINT("all options"), 428 NetIfOpts = [{module, snmpm_net_if}, 429 {verbosity, trace}, 430 {options, [{recbuf, 30000}, 431 {bind_to, false}, 432 {no_reuse, false}]}], 433 ServerOpts = [{timeout, ?SECS(10)}, 434 {verbosity, trace}, 435 {cbproxy, permanent}, 436 {netif_sup, {?SECS(60), ?SECS(5)}}], 437 NoteStoreOpts = [{timeout, ?SECS(20)}, 438 {verbosity, trace}], 439 ConfigOpts = [{dir, ConfDir}, 440 {verbosity, trace}, 441 {db_dir, DbDir}, 442 {db_init_error, create}], 443 Mibs = [join(StdMibDir, "SNMP-NOTIFICATION-MIB"), 444 join(StdMibDir, "SNMP-USER-BASED-SM-MIB")], 445 Prio = normal, 446 ATL = [{type, read_write}, 447 {dir, LogDir}, 448 {size, {10,10240}}, 449 {repair, true}], 450 Vsns = [v1,v2,v3], 451 Opts = [{config, ConfigOpts}, 452 {net_if, NetIfOpts}, 453 {server, ServerOpts}, 454 {note_store, NoteStoreOpts}, 455 {audit_trail_log, ATL}, 456 {priority, Prio}, 457 {mibs, Mibs}, 458 {versions, Vsns}], 459 ?line {ok, _Pid} = config_start(Opts), 460 ?line ok = config_stop(), 461 462 ?IPRINT("done"), 463 ok. 464 465 466%% 467%% --- 468%% 469 470start_with_unknown_opts(suite) -> []; 471start_with_unknown_opts(doc) -> 472 "Start the snmp manager config process when some of\n" 473 "the options are unknown."; 474start_with_unknown_opts(Conf) when is_list(Conf) -> 475 put(tname, "START-W-UNKNOWN-OPTS"), 476 ?IPRINT("start"), 477 process_flag(trap_exit, true), 478 ConfDir = ?config(manager_conf_dir, Conf), 479 DbDir = ?config(manager_db_dir, Conf), 480 LogDir = ?config(manager_log_dir, Conf), 481 StdMibDir = filename:join(code:priv_dir(snmp), "mibs") ++ "/", 482 483 write_manager_conf(ConfDir), 484 485 486 %% Third set of options (no versions): 487 ?IPRINT("all options"), 488 NetIfOpts = [{module, snmpm_net_if}, 489 {verbosity, trace}, 490 {options, [{recbuf, 30000}, 491 {bind_to, false}, 492 {no_reuse, false}]}], 493 ServerOpts = [{timeout, 10000}, {verbosity, trace}], 494 NoteStoreOpts = [{timeout, 20000}, {verbosity, trace}], 495 ConfigOpts = [{dir, ConfDir}, {verbosity, trace}, {db_dir, DbDir}], 496 Mibs = [join(StdMibDir, "SNMP-NOTIFICATION-MIB"), 497 join(StdMibDir, "SNMP-USER-BASED-SM-MIB")], 498 Prio = normal, 499 ATL = [{type, read_write}, 500 {dir, LogDir}, 501 {size, {10,10240}}, 502 {repair, true}], 503 Vsns = [v1,v2,v3], 504 Opts = [{config, ConfigOpts}, 505 {net_if, NetIfOpts}, 506 {server, ServerOpts}, 507 {note_store, NoteStoreOpts}, 508 {audit_trail_log, ATL}, 509 {unknown_option, "dummy value"}, 510 {priority, Prio}, 511 {mibs, Mibs}, 512 {versions, Vsns}], 513 ?line {ok, _Pid} = config_start(Opts), 514 515 ?IPRINT("(config) started - now stop"), 516 ?line ok = config_stop(), 517 518 ?IPRINT("done"), 519 ok. 520 521 522%% 523%% --- 524%% 525 526start_with_incorrect_opts(suite) -> []; 527start_with_incorrect_opts(doc) -> 528 "Start the snmp manager config process when some of\n" 529 "the options has incorrect values."; 530start_with_incorrect_opts(Conf) when is_list(Conf) -> 531 put(tname, "START-W-INCORRECT-OPTS"), 532 ?IPRINT("start"), 533 process_flag(trap_exit, true), 534 ConfDir = ?config(manager_conf_dir, Conf), 535 DbDir = ?config(manager_db_dir, Conf), 536 LogDir = ?config(manager_log_dir, Conf), 537 StdMibDir = filename:join(code:priv_dir(snmp), "mibs") ++ "/", 538 539 write_manager_conf(ConfDir), 540 541 ConfigOpts = [{verbosity,trace}, {dir, ConfDir}, {db_dir, DbDir}], 542 543 ?IPRINT("net-if - incorrect module"), 544 NetIfOpts1 = [{module, snmpm_user}], %% Behaviour check will fail 545 Opts01 = [{config, ConfigOpts}, {versions, [v1]}, 546 {net_if, NetIfOpts1}], 547 ?line {error, Reason01} = config_start(Opts01), 548 ?IPRINT("net-if (module) res: ~p", [Reason01]), 549 550 ?IPRINT("net-if - incorrect verbosity"), 551 NetIfOpts2 = [{verbosity, invalid_verbosity}], 552 Opts02 = [{config, ConfigOpts}, {versions, [v1]}, 553 {net_if, NetIfOpts2}], 554 ?line {error, Reason02} = config_start(Opts02), 555 ?IPRINT("net-if (verbosity) res: ~p", [Reason02]), 556 557 ?IPRINT("net-if - incorrect options"), 558 NetIfOpts3 = [{options, invalid_options}], 559 Opts03 = [{config, ConfigOpts}, {versions, [v1]}, 560 {net_if, NetIfOpts3}], 561 ?line {error, Reason03} = config_start(Opts03), 562 ?IPRINT("net-if (options) res: ~p", [Reason03]), 563 564 ?IPRINT("server - incorrect timeout (1)"), 565 ServerOpts1 = [{timeout, invalid_timeout}], 566 Opts08 = [{config, ConfigOpts}, {versions, [v1]}, 567 {server, ServerOpts1}], 568 ?line {error, Reason08} = config_start(Opts08), 569 ?IPRINT("server (timeout) res: ~p", [Reason08]), 570 571 ?IPRINT("server - incorrect timeout (2)"), 572 ServerOpts2 = [{timeout, 0}], 573 Opts09 = [{config, ConfigOpts}, {versions, [v1]}, 574 {server, ServerOpts2}], 575 ?line {error, Reason09} = config_start(Opts09), 576 ?IPRINT("server (timeout) res: ~p", [Reason09]), 577 578 ?IPRINT("server - incorrect timeout (3)"), 579 ServerOpts3 = [{timeout, -1000}], 580 Opts10 = [{config, ConfigOpts}, 581 {versions, [v1]}, 582 {server, ServerOpts3}], 583 ?line {error, Reason10} = config_start(Opts10), 584 ?IPRINT("server (timeout) res: ~p", [Reason10]), 585 586 ?IPRINT("server - incorrect verbosity"), 587 ServerOpts4 = [{verbosity, invalid_verbosity}], 588 Opts11 = [{config, ConfigOpts}, 589 {versions, [v1]}, 590 {server, ServerOpts4}], 591 ?line {error, Reason11} = config_start(Opts11), 592 ?IPRINT("server (verbosity) res: ~p", [Reason11]), 593 594 ?IPRINT("note-store - incorrect timeout (1)"), 595 NoteStoreOpts1 = [{timeout, invalid_timeout}], 596 Opts12 = [{config, ConfigOpts}, 597 {versions, [v1]}, 598 {note_store, NoteStoreOpts1}], 599 ?line {error, Reason12} = config_start(Opts12), 600 ?IPRINT("note-store (timeout) res: ~p", [Reason12]), 601 602 ?IPRINT("note-store - incorrect timeout (2)"), 603 NoteStoreOpts2 = [{timeout, 0}], 604 Opts13 = [{config, ConfigOpts}, 605 {versions, [v1]}, 606 {note_store, NoteStoreOpts2}], 607 ?line {error, Reason13} = config_start(Opts13), 608 ?IPRINT("note-store (timeout) res: ~p", [Reason13]), 609 610 ?IPRINT("note-store - incorrect timeout (3)"), 611 NoteStoreOpts3 = [{timeout, -2000}], 612 Opts14 = [{config, ConfigOpts}, 613 {versions, [v1]}, 614 {note_store, NoteStoreOpts3}], 615 ?line {error, Reason14} = config_start(Opts14), 616 ?IPRINT("note-store (timeout) res: ~p", [Reason14]), 617 618 ?IPRINT("note-store - incorrect verbosity"), 619 NoteStoreOpts4 = [{timeout, 20000}, {verbosity, invalid_verbosity}], 620 Opts15 = [{config, ConfigOpts}, 621 {versions, [v1]}, 622 {note_store, NoteStoreOpts4}], 623 ?line {error, Reason15} = config_start(Opts15), 624 ?IPRINT("note-store (verbosity) res: ~p", [Reason15]), 625 626 ?IPRINT("config - incorrect dir (1)"), 627 ConfigOpts1 = [{dir, invalid_dir}], 628 Opts16 = [{config, ConfigOpts1}, 629 {versions, [v1]}], 630 ?line {error, Reason16} = config_start(Opts16), 631 ?IPRINT("config (dir) res: ~p", [Reason16]), 632 633 ?IPRINT("config - incorrect dir (2)"), 634 ConfigOpts2 = [{dir, "/invalid/dir"}], 635 Opts17 = [{config, ConfigOpts2}, 636 {versions, [v1]}], 637 ?line {error, Reason17} = config_start(Opts17), 638 ?IPRINT("config (dir) res: ~p", [Reason17]), 639 640 ?IPRINT("config - incorrect verbosity"), 641 ConfigOpts3 = [{dir, ConfDir}, {verbosity, invalid_verbosity}], 642 Opts18 = [{config, ConfigOpts3}, 643 {versions, [v1]}], 644 ?line {error, Reason18} = config_start(Opts18), 645 ?IPRINT("config (verbosity) res: ~p", [Reason18]), 646 647 ?IPRINT("mibs - incorrect mibs (1)"), 648 Mibs1 = invalid_mibs, 649 Opts19 = [{config, ConfigOpts}, 650 {versions, [v1]}, 651 {mibs, Mibs1}], 652 ?line {error, Reason19} = config_start(Opts19), 653 ?IPRINT("mibs (mibs) res: ~p", [Reason19]), 654 655 ?IPRINT("mibs - incorrect mibs (2)"), 656 Mibs2 = [join(StdMibDir, "INVALID-MIB")], 657 Opts20 = [{config, ConfigOpts}, 658 {versions, [v1]}, 659 {mibs, Mibs2}], 660 ?line {error, Reason20} = config_start(Opts20), 661 ?IPRINT("mibs (mibs) res: ~p", [Reason20]), 662 663 ?IPRINT("prio - incorrect prio"), 664 Prio1 = invalid_prio, 665 Opts21 = [{config, ConfigOpts}, 666 {versions, [v1]}, 667 {priority, Prio1}], 668 ?line {error, Reason21} = config_start(Opts21), 669 ?IPRINT("prio (prio) res: ~p", [Reason21]), 670 671 ?IPRINT("atl - incorrect type"), 672 ATL1 = [{type, invalid_type}, 673 {dir, LogDir}, 674 {size, {10,10240}}, 675 {repair, true}], 676 Opts22 = [{config, ConfigOpts}, 677 {versions, [v1]}, 678 {audit_trail_log, ATL1}], 679 ?line {error, Reason22} = config_start(Opts22), 680 ?IPRINT("atl (type) res: ~p", [Reason22]), 681 682 ?IPRINT("atl - incorrect dir (1)"), 683 ATL2 = [{type, read_write}, 684 {dir, invalid_dir}, 685 {size, {10,10240}}, 686 {repair, true}], 687 Opts23 = [{config, ConfigOpts}, 688 {versions, [v1]}, 689 {audit_trail_log, ATL2}], 690 ?line {error, Reason23} = config_start(Opts23), 691 ?IPRINT("atl (dir) res: ~p", [Reason23]), 692 693 ?IPRINT("atl - incorrect dir (2)"), 694 ATL3 = [{type, read_write}, 695 {dir, "/invalid/dir"}, 696 {size, {10,10240}}, 697 {repair, true}], 698 Opts24 = [{config, ConfigOpts}, 699 {versions, [v1]}, 700 {audit_trail_log, ATL3}], 701 ?line {error, Reason24} = config_start(Opts24), 702 ?IPRINT("atl (dir) res: ~p", [Reason24]), 703 704 ?IPRINT("atl - incorrect size (1)"), 705 ATL4 = [{type, read_write}, 706 {dir, LogDir}, 707 {size, invalid_size}, 708 {repair, true}], 709 Opts25 = [{config, ConfigOpts}, 710 {versions, [v1]}, 711 {audit_trail_log, ATL4}], 712 ?line {error, Reason25} = config_start(Opts25), 713 ?IPRINT("atl (size) res: ~p", [Reason25]), 714 715 ?IPRINT("atl - incorrect size (2)"), 716 ATL5 = [{type, read_write}, 717 {dir, LogDir}, 718 {size, {10,invalid_file_size}}, 719 {repair, true}], 720 Opts26 = [{config, ConfigOpts}, 721 {versions, [v1]}, 722 {audit_trail_log, ATL5}], 723 ?line {error, Reason26} = config_start(Opts26), 724 ?IPRINT("atl (size) res: ~p", [Reason26]), 725 726 ?IPRINT("atl - incorrect size (3)"), 727 ATL6 = [{type, read_write}, 728 {dir, LogDir}, 729 {size, {invalid_file_num,10240}}, 730 {repair, true}], 731 Opts27 = [{config, ConfigOpts}, 732 {versions, [v1]}, 733 {audit_trail_log, ATL6}], 734 ?line {error, Reason27} = config_start(Opts27), 735 ?IPRINT("atl (size) res: ~p", [Reason27]), 736 737 ?IPRINT("atl - incorrect repair"), 738 ATL7 = [{type, read_write}, 739 {dir, LogDir}, 740 {size, {10,10240}}, 741 {repair, invalid_repair}], 742 Opts28 = [{config, ConfigOpts}, 743 {versions, [v1]}, 744 {audit_trail_log, ATL7}], 745 ?line {error, Reason28} = config_start(Opts28), 746 ?IPRINT("atl (repair) res: ~p", [Reason28]), 747 748 ?IPRINT("version - incorrect versions (1)"), 749 Vsns1 = invalid_vsns, 750 Opts29 = [{config, ConfigOpts}, 751 {versions, Vsns1}], 752 ?line {error, Reason29} = config_start(Opts29), 753 ?IPRINT("versions (versions) res: ~p", [Reason29]), 754 755 ?IPRINT("version - incorrect versions (2)"), 756 Vsns2 = [v1,v2,v3,v9], 757 Opts30 = [{config, ConfigOpts}, 758 {versions, Vsns2}], 759 ?line {error, Reason30} = config_start(Opts30), 760 ?IPRINT("versions (versions) res: ~p", [Reason30]), 761 762 ?IPRINT("done"), 763 ok. 764 765 766%% 767%% --- 768%% 769 770start_with_invalid_manager_conf_file1(suite) -> []; 771start_with_invalid_manager_conf_file1(doc) -> 772 "Start with invalid manager config file (1)."; 773start_with_invalid_manager_conf_file1(Conf) when is_list(Conf) -> 774 put(tname, "START-W-INV-MGR-CONF-FILE-1"), 775 ?IPRINT("start"), 776 process_flag(trap_exit, true), 777 ConfDir = ?config(manager_conf_dir, Conf), 778 DbDir = ?config(manager_db_dir, Conf), 779 780 Opts = [{versions, [v1]}, 781 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 782 783 %% -- 784 ?IPRINT("write manager config file with invalid IP address (1)"), 785 write_manager_conf(ConfDir, 786 "arne-anka", "4001", "500", "\"bmkEngine\""), 787 ?line {error, Reason11} = config_start(Opts), 788 ?IPRINT("start failed (as expected): ~p", [Reason11]), 789 ?line {failed_reading, _, _, 1, {parse_error, _}} = Reason11, 790 config_ensure_not_running(), 791 792 %% -- 793 ?IPRINT("write manager config file with invalid IP address (2)"), 794 write_manager_conf(ConfDir, 795 "arne_anka", "4001", "500", "\"bmkEngine\""), 796 ?line {error, Reason12} = config_start(Opts), 797 ?IPRINT("start failed (as expected): ~p", [Reason12]), 798 ?line {failed_check, _, _, 2, {bad_address, _}} = Reason12, 799 config_ensure_not_running(), 800 801 %% -- 802 ?IPRINT("write manager config file with invalid IP address (3)"), 803 write_manager_conf(ConfDir, 804 "9999", "4001", "500", "\"bmkEngine\""), 805 ?line {error, Reason13} = config_start(Opts), 806 ?IPRINT("start failed (as expected): ~p", [Reason13]), 807 ?line {failed_check, _, _, 2, {bad_address, _}} = Reason13, 808 config_ensure_not_running(), 809 810 %% -- 811 ?IPRINT("write manager config file with invalid port (2)"), 812 write_manager_conf(ConfDir, 813 "[134,138,177,189]", "kalle-anka", "500", "\"bmkEngine\""), 814 ?line {error, Reason21} = config_start(Opts), 815 ?IPRINT("start failed (as expected): ~p", [Reason21]), 816 ?line {failed_reading, _, _, 2, {parse_error, _}} = Reason21, 817 config_ensure_not_running(), 818 819 %% -- 820 ?IPRINT("write manager config file with invalid port (1)"), 821 write_manager_conf(ConfDir, 822 "[134,138,177,189]", "-1", "500", "\"bmkEngine\""), 823 ?line {error, Reason22} = config_start(Opts), 824 ?IPRINT("start failed (as expected): ~p", [Reason22]), 825 io:format("Reason22: ~p~n", [Reason22]), 826 ?line {failed_check, _, _, 3, {bad_port, _}} = Reason22, 827 config_ensure_not_running(), 828 829 %% -- 830 ?IPRINT("write manager config file with invalid port (3)"), 831 write_manager_conf(ConfDir, 832 "[134,138,177,189]", "\"kalle-anka\"", "500", "\"bmkEngine\""), 833 ?line {error, Reason23} = config_start(Opts), 834 ?IPRINT("start failed (as expected): ~p", [Reason23]), 835 ?line {failed_check, _, _, 3, {bad_port, _}} = Reason23, 836 config_ensure_not_running(), 837 838 %% -- 839 ?IPRINT("write manager config file with invalid EngineID (1)"), 840 write_manager_conf(ConfDir, 841 "[134,138,177,189]", "4001", "500", "bmkEngine"), 842 ?line {error, Reason31} = config_start(Opts), 843 ?IPRINT("start failed (as expected): ~p", [Reason31]), 844 ?line {failed_check, _, _, 5, {invalid_string, _}} = Reason31, 845 config_ensure_not_running(), 846 847 %% -- 848 ?IPRINT("write manager config file with invalid EngineID (2)"), 849 write_manager_conf(ConfDir, 850 "[134,138,177,189]", "4001", "500", "{1,2,3}"), 851 ?line {error, Reason32} = config_start(Opts), 852 ?IPRINT("start failed (as expected): ~p", [Reason32]), 853 ?line {failed_check, _, _, 5, {invalid_string, _}} = Reason32, 854 config_ensure_not_running(), 855 856 %% -- 857 ?IPRINT("write manager config file with invalid EngineID (3)"), 858 write_manager_conf(ConfDir, 859 "[134,138,177,189]", "4001", "500", "10101"), 860 ?line {error, Reason33} = config_start(Opts), 861 ?IPRINT("start failed (as expected): ~p", [Reason33]), 862 ?line {failed_check, _, _, 5, {invalid_string, _}} = Reason33, 863 config_ensure_not_running(), 864 865 %% -- 866 ?IPRINT("write manager config file with invalid MMS (1)"), 867 write_manager_conf(ConfDir, 868 "[134,138,177,189]", "4001", "483", "\"bmkEngine\""), 869 ?line {error, Reason41} = config_start(Opts), 870 ?IPRINT("start failed (as expected): ~p", [Reason41]), 871 ?line {failed_check, _, _, 4, {invalid_integer, _}} = Reason41, 872 config_ensure_not_running(), 873 874 %% -- 875 ?IPRINT("write manager config file with invalid MMS (2)"), 876 write_manager_conf(ConfDir, 877 "[134,138,177,189]", "4001", "-1", "\"bmkEngine\""), 878 ?line {error, Reason42} = config_start(Opts), 879 ?IPRINT("start failed (as expected): ~p", [Reason42]), 880 ?line {failed_check, _, _, 4, {invalid_integer, _}} = Reason42, 881 config_ensure_not_running(), 882 883 %% -- 884 ?IPRINT("write manager config file with invalid MMS (3)"), 885 write_manager_conf(ConfDir, 886 "[134,138,177,189]", "4001", "\"kalle-anka\"", "\"bmkEngine\""), 887 ?line {error, Reason43} = config_start(Opts), 888 ?IPRINT("start failed (as expected): ~p", [Reason43]), 889 ?line {failed_check, _, _, 4, {invalid_integer, _}} = Reason43, 890 config_ensure_not_running(), 891 892 %% -- 893 ?IPRINT("write manager config file with invalid MMS (4)"), 894 write_manager_conf(ConfDir, 895 "[134,138,177,189]", "4001", "kalle_anka", "\"bmkEngine\""), 896 ?line {error, Reason44} = config_start(Opts), 897 ?IPRINT("start failed (as expected): ~p", [Reason44]), 898 ?line {failed_check, _, _, 4, {invalid_integer, _}} = Reason44, 899 config_ensure_not_running(), 900 901 %% -- 902 ?IPRINT("write manager config file with unknown option"), 903 write_manager_conf(ConfDir, 904 "{kalle, anka}."), 905 ?line {error, Reason51} = config_start(Opts), 906 ?IPRINT("start failed (as expected): ~p", [Reason51]), 907 ?line {failed_check, _, _, 1, {unknown_config, _}} = Reason51, 908 config_ensure_not_running(), 909 910 %% -- 911 ?IPRINT("write manager config file with unknown option"), 912 write_manager_conf(ConfDir, 913 "kalle_anka."), 914 ?line {error, Reason52} = config_start(Opts), 915 ?IPRINT("start failed (as expected): ~p", [Reason52]), 916 ?line {failed_check, _, _, 1, {unknown_config, _}} = Reason52, 917 config_ensure_not_running(), 918 919 ?IPRINT("done"), 920 ok. 921 922 923%% 924%% --- 925%% 926 927start_with_invalid_users_conf_file1(suite) -> []; 928start_with_invalid_users_conf_file1(doc) -> 929 "Start with invalid users config file."; 930start_with_invalid_users_conf_file1(Conf) when is_list(Conf) -> 931 put(tname, "START-W-INV-USER-CONF-FILE-1"), 932 ?IPRINT("start"), 933 process_flag(trap_exit, true), 934 ConfDir = ?config(manager_conf_dir, Conf), 935 DbDir = ?config(manager_db_dir, Conf), 936 937 verify_dir_existing(conf, ConfDir), 938 verify_dir_existing(db, DbDir), 939 940 Opts = [{versions, [v1]}, 941 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 942 943 write_manager_conf(ConfDir), 944 945 %% -- 946 ?IPRINT("write users config file with invalid module (1)"), 947 write_users_conf(ConfDir, [{"kalle", "kalle", "dummy"}]), 948 ?line {error, Reason11} = config_start(Opts), 949 ?IPRINT("start failed (as expected): ~p", [Reason11]), 950 ?line {failed_check, _, _, _, {bad_module, kalle}} = Reason11, 951 config_ensure_not_running(), 952 953 %% -- 954 ?IPRINT("write users config file with invalid module (1)"), 955 write_users_conf(ConfDir, [{"kalle", "snmpm", "dummy"}]), 956 ?line {error, Reason12} = config_start(Opts), 957 ?IPRINT("start failed (as expected): ~p", [Reason12]), 958 ?line {failed_check, _, _, _, {bad_module, _}} = Reason12, 959 config_ensure_not_running(), 960 961 %% -- 962 ?IPRINT("write users config file with invalid module (2)"), 963 write_users_conf(ConfDir, [{"kalle1", "10101", "dummy"}]), 964 ?line {error, Reason13} = config_start(Opts), 965 ?IPRINT("start failed (as expected): ~p", [Reason13]), 966 ?line {failed_check, _, _, _, {bad_module, _}} = Reason13, 967 config_ensure_not_running(), 968 969 %% -- 970 ?IPRINT("write users config file with invalid user tuple (1)"), 971 write_users_conf2(ConfDir, "{kalle, snmpm_user_default}."), 972 ?line {error, Reason21} = config_start(Opts), 973 ?IPRINT("start failed (as expected): ~p", [Reason21]), 974 ?line {failed_check, _, _, _, {bad_user_config, _}} = Reason21, 975 config_ensure_not_running(), 976 977 %% -- 978 ?IPRINT("write users config file with invalid user tuple (2)"), 979 write_users_conf2(ConfDir, "{kalle, snmpm_user_default, kalle, [], olle}."), 980 ?line {error, Reason22} = config_start(Opts), 981 ?IPRINT("start failed (as expected): ~p", [Reason22]), 982 ?line {failed_check, _, _, _, {bad_user_config, _}} = Reason22, 983 config_ensure_not_running(), 984 985 %% -- 986 ?IPRINT("write users config file with invalid user tuple (3)"), 987 write_users_conf2(ConfDir, "snmpm_user_default."), 988 ?line {error, Reason23} = config_start(Opts), 989 ?IPRINT("start failed (as expected): ~p", [Reason23]), 990 ?line {failed_check, _, _, _, {bad_user_config, _}} = Reason23, 991 config_ensure_not_running(), 992 993 %% -- 994 ?IPRINT("write users config file with invalid user tuple (4)"), 995 write_users_conf2(ConfDir, "[kalle, snmpm_user_default, kalle]."), 996 ?line {error, Reason24} = config_start(Opts), 997 ?IPRINT("start failed (as expected): ~p", [Reason24]), 998 ?line {failed_check, _, _, _, {bad_user_config, _}} = Reason24, 999 config_ensure_not_running(), 1000 1001 %% -- 1002 ?IPRINT("write users config file with invalid user agent default config (1)"), 1003 write_users_conf2(ConfDir, "{kalle, snmpm_user_default, kalle, olle}."), 1004 ?line {error, Reason31} = config_start(Opts), 1005 ?IPRINT("start failed (as expected): ~p", [Reason31]), 1006 ?line {failed_check, _, _, _, {bad_default_agent_config, _}} = Reason31, 1007 config_ensure_not_running(), 1008 1009 %% -- 1010 ?IPRINT("write users config file with invalid user agent default config (2)"), 1011 write_users_conf2(ConfDir, "{kalle, snmpm_user_default, kalle, [olle]}."), 1012 ?line {error, Reason32} = config_start(Opts), 1013 ?IPRINT("start failed (as expected): ~p", [Reason32]), 1014 %% ?line {failed_check, _, _, _, {bad_default_agent_config, _}} = Reason32, 1015 case Reason32 of 1016 {failed_check, _, _, _, {bad_default_agent_config, _}} -> 1017 ok; 1018 {A, B, C, D} -> 1019 exit({bad_error, A, B, C, D}) 1020 end, 1021 config_ensure_not_running(), 1022 1023 ?IPRINT("done"), 1024 ok. 1025 1026 1027%% 1028%% --- 1029%% 1030 1031start_with_invalid_agents_conf_file1(suite) -> []; 1032start_with_invalid_agents_conf_file1(doc) -> 1033 "Start with invalid agents config file."; 1034start_with_invalid_agents_conf_file1(Conf) when is_list(Conf) -> 1035 put(tname, "START-W-INV-AGS-CONF-FILE-1"), 1036 ?IPRINT("start"), 1037 process_flag(trap_exit, true), 1038 ConfDir = ?config(manager_conf_dir, Conf), 1039 DbDir = ?config(manager_db_dir, Conf), 1040 1041 verify_dir_existing(conf, ConfDir), 1042 verify_dir_existing(db, DbDir), 1043 1044 Opts = [{versions, [v1]}, 1045 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 1046 1047 write_manager_conf(ConfDir), 1048 1049 write_users_conf(ConfDir, [{"swiacf", "snmpm_user_default", "dummy"}]), 1050 1051 Agent0 = {"swiacf", "\"targ-hobbes\"", "\"comm1\"", 1052 "[192,168,0,100]", "162", "\"bmkEngine\"", "1500", "484", "v1", 1053 "any", "\"initial\"", "noAuthNoPriv"}, 1054 1055 %% -- 1056 ?IPRINT("[test 11] write agents config file with invalid user (1)"), 1057 Agent11 = setelement(1, Agent0, "kalle-anka"), 1058 write_agents_conf(ConfDir, [Agent11]), 1059 case config_start(Opts) of 1060 {error, Reason11} -> 1061 ?IPRINT("start failed (as expected): ~p", [Reason11]), 1062 ?line {failed_reading, _, _, _, {parse_error, _}} = Reason11, 1063 config_ensure_not_running(); 1064 OK_11 -> 1065 config_ensure_not_running(), 1066 exit({error, {unexpected_success, "11", OK_11}}) 1067 end, 1068 1069 %% -- 1070 ?IPRINT("[test 21] write agents config file with invalid target name (1)"), 1071 Agent21 = setelement(2, Agent0, "targ-hobbes"), 1072 write_agents_conf(ConfDir, [Agent21]), 1073 case config_start(Opts) of 1074 {error, Reason21} -> 1075 ?IPRINT("start failed (as expected): ~p", [Reason21]), 1076 ?line {failed_reading, _, _, _, {parse_error, _}} = Reason21, 1077 config_ensure_not_running(); 1078 OK_21 -> 1079 config_ensure_not_running(), 1080 exit({error, {unexpected_success, "21", OK_21}}) 1081 end, 1082 1083 %% -- 1084 ?IPRINT("[test 22] write agents config file with invalid target name (2)"), 1085 Agent22 = setelement(2, Agent0, "targ_hobbes"), 1086 write_agents_conf(ConfDir, [Agent22]), 1087 case config_start(Opts) of 1088 {error, Reason22} -> 1089 ?IPRINT("start failed (as expected): ~p", [Reason22]), 1090 ?line {failed_check, _, _, _, {invalid_string, _}} = Reason22, 1091 config_ensure_not_running(); 1092 OK_22 -> 1093 config_ensure_not_running(), 1094 exit({error, {unexpected_success, "22", OK_22}}) 1095 end, 1096 1097 %% -- 1098 ?IPRINT("[test 23] write agents config file with invalid target name (3)"), 1099 Agent23 = setelement(2, Agent0, "10101"), 1100 write_agents_conf(ConfDir, [Agent23]), 1101 case config_start(Opts) of 1102 {error, Reason23} -> 1103 ?IPRINT("start failed (as expected): ~p", [Reason23]), 1104 ?line {failed_check, _, _, _, {invalid_string, _}} = Reason23, 1105 config_ensure_not_running(); 1106 OK_23 -> 1107 config_ensure_not_running(), 1108 exit({error, {unexpected_success, "23", OK_23}}) 1109 end, 1110 1111 %% -- 1112 ?IPRINT("[test 31] write agents config file with invalid community (1)"), 1113 Agent31 = setelement(3, Agent0, "targ-hobbes"), 1114 write_agents_conf(ConfDir, [Agent31]), 1115 case config_start(Opts) of 1116 {error, Reason31} -> 1117 ?IPRINT("start failed (as expected): ~p", [Reason31]), 1118 ?line {failed_reading, _, _, _, {parse_error, _}} = Reason31, 1119 config_ensure_not_running(); 1120 OK_31 -> 1121 config_ensure_not_running(), 1122 exit({error, {unexpected_success, "31", OK_31}}) 1123 end, 1124 1125 %% -- 1126 ?IPRINT("[test 32] write agents config file with invalid community (2)"), 1127 Agent32 = setelement(3, Agent0, "targ_hobbes"), 1128 write_agents_conf(ConfDir, [Agent32]), 1129 case config_start(Opts) of 1130 {error, Reason32} -> 1131 ?IPRINT("start failed (as expected): ~p", [Reason32]), 1132 ?line {failed_check, _, _, _, {invalid_string, _}} = Reason32, 1133 config_ensure_not_running(); 1134 OK_32 -> 1135 config_ensure_not_running(), 1136 exit({error, {unexpected_success, "32", OK_32}}) 1137 end, 1138 1139 %% -- 1140 ?IPRINT("[test 33] write agents config file with invalid community (3)"), 1141 Agent33 = setelement(3, Agent0, "10101"), 1142 write_agents_conf(ConfDir, [Agent33]), 1143 case config_start(Opts) of 1144 {error, Reason33} -> 1145 ?IPRINT("start failed (as expected): ~p", [Reason33]), 1146 ?line {failed_check, _, _, _, {invalid_string, _}} = Reason33, 1147 config_ensure_not_running(); 1148 OK_33 -> 1149 config_ensure_not_running(), 1150 exit({error, {unexpected_success, "33", OK_33}}) 1151 end, 1152 1153 %% -- 1154 ?IPRINT("[test 51] write agents config file with invalid ip (1)"), 1155 Agent51 = setelement(4, Agent0, "kalle_anka"), 1156 write_agents_conf(ConfDir, [Agent51]), 1157 case config_start(Opts) of 1158 {error, Reason51} -> 1159 ?IPRINT("start failed (as expected): ~p", [Reason51]), 1160 ?line {failed_check, _, _, _, {bad_domain, _}} = Reason51, 1161 config_ensure_not_running(); 1162 OK_51 -> 1163 config_ensure_not_running(), 1164 exit({error, {unexpected_success, "51", OK_51}}) 1165 end, 1166 1167 %% -- 1168 ?IPRINT("[test 52] write agents config file with invalid ip (2)"), 1169 Agent52 = setelement(4, Agent0, "10101"), 1170 write_agents_conf(ConfDir, [Agent52]), 1171 case config_start(Opts) of 1172 {error, Reason52} -> 1173 ?IPRINT("start failed (as expected): ~p", [Reason52]), 1174 ?line {failed_check, _, _, _, {bad_address, _}} = Reason52, 1175 config_ensure_not_running(); 1176 OK_52 -> 1177 config_ensure_not_running(), 1178 exit({error, {unexpected_success, "52", OK_52}}) 1179 end, 1180 1181 %% -- 1182 ?IPRINT("[test 53] write agents config file with invalid ip (3)"), 1183 Agent53 = setelement(4, Agent0, "[192,168,0]"), 1184 write_agents_conf(ConfDir, [Agent53]), 1185 case config_start(Opts) of 1186 {error, Reason53} -> 1187 ?IPRINT("start failed (as expected): ~p", [Reason53]), 1188 ?line {failed_check, _, _, _, {bad_address, _}} = Reason53, 1189 config_ensure_not_running(); 1190 OK_53 -> 1191 config_ensure_not_running(), 1192 exit({error, {unexpected_success, "53", OK_53}}) 1193 end, 1194 1195 %% -- 1196 ?IPRINT("[test 54] write agents config file with invalid ip (4)"), 1197 Agent54 = setelement(4, Agent0, "[192,168,0,100,99]"), 1198 write_agents_conf(ConfDir, [Agent54]), 1199 case config_start(Opts) of 1200 {error, Reason54} -> 1201 ?IPRINT("start failed (as expected): ~p", [Reason54]), 1202 ?line {failed_check, _, _, _, {bad_address, _}} = Reason54, 1203 config_ensure_not_running(); 1204 OK_54 -> 1205 config_ensure_not_running(), 1206 exit({error, {unexpected_success, "54", OK_54}}) 1207 end, 1208 1209 %% -- 1210 ?IPRINT("[test 55] write agents config file with invalid ip (5)"), 1211 Agent55 = setelement(4, Agent0, "[192,168,0,arne]"), 1212 write_agents_conf(ConfDir, [Agent55]), 1213 ?line {error, Reason55} = config_start(Opts), 1214 ?IPRINT("start failed (as expected): ~p", [Reason55]), 1215 ?line {failed_check, _, _, _, {bad_address, _}} = Reason55, 1216 config_ensure_not_running(), 1217 1218 %% -- 1219 ?IPRINT("[test 61] write agents config file with invalid port (1)"), 1220 Agent61 = setelement(5, Agent0, "kalle_anka"), 1221 write_agents_conf(ConfDir, [Agent61]), 1222 ?line {error, Reason61} = config_start(Opts), 1223 ?IPRINT("start failed (as expected): ~p", [Reason61]), 1224 ?line {failed_check, _, _, _, {bad_address, _}} = Reason61, 1225 config_ensure_not_running(), 1226 1227 %% -- 1228 ?IPRINT("[test 62] write agents config file with invalid port (2)"), 1229 Agent62 = setelement(5, Agent0, "-1"), 1230 write_agents_conf(ConfDir, [Agent62]), 1231 ?line {error, Reason62} = config_start(Opts), 1232 ?IPRINT("start failed (as expected): ~p", [Reason62]), 1233 ?line {failed_check, _, _, _, {bad_address, _}} = Reason62, 1234 config_ensure_not_running(), 1235 1236 %% -- 1237 ?IPRINT("[test 63] write agents config file with invalid port (3)"), 1238 Agent63 = setelement(5, Agent0, "\"100\""), 1239 write_agents_conf(ConfDir, [Agent63]), 1240 ?line {error, Reason63} = config_start(Opts), 1241 ?IPRINT("start failed (as expected): ~p", [Reason63]), 1242 ?line {failed_check, _, _, _, {bad_address, _}} = Reason63, 1243 config_ensure_not_running(), 1244 1245 %% -- 1246 ?IPRINT("[test 71] write agents config file with invalid engine-id (1)"), 1247 Agent71 = setelement(6, Agent0, "kalle_anka"), 1248 write_agents_conf(ConfDir, [Agent71]), 1249 ?line {error, Reason71} = config_start(Opts), 1250 ?IPRINT("start failed (as expected): ~p", [Reason71]), 1251 ?line {failed_check, _, _, _, {invalid_string, _}} = Reason71, 1252 config_ensure_not_running(), 1253 1254 %% -- 1255 ?IPRINT("[test 72] write agents config file with invalid engine-id (2)"), 1256 Agent72 = setelement(6, Agent0, "10101"), 1257 write_agents_conf(ConfDir, [Agent72]), 1258 ?line {error, Reason72} = config_start(Opts), 1259 ?IPRINT("start failed (as expected): ~p", [Reason72]), 1260 ?line {failed_check, _, _, _, {invalid_string, _}} = Reason72, 1261 config_ensure_not_running(), 1262 1263 %% -- 1264 ?IPRINT("[test 81] write agents config file with invalid timeout (1)"), 1265 Agent81 = setelement(7, Agent0, "kalle_anka"), 1266 write_agents_conf(ConfDir, [Agent81]), 1267 ?line {error, Reason81} = config_start(Opts), 1268 ?IPRINT("start failed (as expected): ~p", [Reason81]), 1269 ?line {failed_check, _, _, _, {invalid_timer, _}} = Reason81, 1270 config_ensure_not_running(), 1271 1272 %% -- 1273 ?IPRINT("[test 82] write agents config file with invalid timeout (2)"), 1274 Agent82 = setelement(7, Agent0, "-1"), 1275 write_agents_conf(ConfDir, [Agent82]), 1276 ?line {error, Reason82} = config_start(Opts), 1277 ?IPRINT("start failed (as expected): ~p", [Reason82]), 1278 ?line {failed_check, _, _, _, {invalid_timer, _}} = Reason82, 1279 config_ensure_not_running(), 1280 1281 %% -- 1282 ?IPRINT("[test 83] write agents config file with invalid timeout (3)"), 1283 Agent83 = setelement(7, Agent0, "{1000, 1, 10, kalle}"), 1284 write_agents_conf(ConfDir, [Agent83]), 1285 ?line {error, Reason83} = config_start(Opts), 1286 ?IPRINT("start failed (as expected): ~p", [Reason83]), 1287 ?line {failed_check, _, _, _, {invalid_timer, _}} = Reason83, 1288 config_ensure_not_running(), 1289 1290 %% -- 1291 ?IPRINT("[test 84] write agents config file with invalid timeout (4)"), 1292 Agent84 = setelement(7, Agent0, "{1000, -1, 10, 10}"), 1293 write_agents_conf(ConfDir, [Agent84]), 1294 ?line {error, Reason84} = config_start(Opts), 1295 ?IPRINT("start failed (as expected): ~p", [Reason84]), 1296 ?line {failed_check, _, _, _, {invalid_timer, _}} = Reason84, 1297 config_ensure_not_running(), 1298 1299 %% -- 1300 ?IPRINT("[test 85] write agents config file with invalid timeout (5)"), 1301 Agent85 = setelement(7, Agent0, "{1000, 1, -100, 10}"), 1302 write_agents_conf(ConfDir, [Agent85]), 1303 ?line {error, Reason85} = config_start(Opts), 1304 ?IPRINT("start failed (as expected): ~p", [Reason85]), 1305 ?line {failed_check, _, _, _, {invalid_timer, _}} = Reason85, 1306 config_ensure_not_running(), 1307 1308 %% -- 1309 ?IPRINT("[test 86] write agents config file with invalid timeout (6)"), 1310 Agent86 = setelement(7, Agent0, "{1000, 1, 100, -1}"), 1311 write_agents_conf(ConfDir, [Agent86]), 1312 ?line {error, Reason86} = config_start(Opts), 1313 ?IPRINT("start failed (as expected): ~p", [Reason86]), 1314 ?line {failed_check, _, _, _, {invalid_timer, _}} = Reason86, 1315 config_ensure_not_running(), 1316 1317 %% -- 1318 ?IPRINT("[test 91] write agents config file with invalid max-message-size (1)"), 1319 Agent91 = setelement(8, Agent0, "483"), 1320 write_agents_conf(ConfDir, [Agent91]), 1321 ?line {error, Reason91} = config_start(Opts), 1322 ?IPRINT("start failed (as expected): ~p", [Reason91]), 1323 ?line {failed_check, _, _, _, {invalid_packet_size, _}} = Reason91, 1324 config_ensure_not_running(), 1325 1326 %% -- 1327 ?IPRINT("[test 92] write agents config file with invalid max-message-size (2)"), 1328 Agent92 = setelement(8, Agent0, "kalle_anka"), 1329 write_agents_conf(ConfDir, [Agent92]), 1330 ?line {error, Reason92} = config_start(Opts), 1331 ?IPRINT("start failed (as expected): ~p", [Reason92]), 1332 ?line {failed_check, _, _, _, {invalid_packet_size, _}} = Reason92, 1333 config_ensure_not_running(), 1334 1335 %% -- 1336 ?IPRINT("[test A1] write agents config file with invalid version (1)"), 1337 AgentA1 = setelement(9, Agent0, "1"), 1338 write_agents_conf(ConfDir, [AgentA1]), 1339 ?line {error, ReasonA1} = config_start(Opts), 1340 ?IPRINT("start failed (as expected): ~p", [ReasonA1]), 1341 ?line {failed_check, _, _, _, {bad_version, _}} = ReasonA1, 1342 config_ensure_not_running(), 1343 1344 %% -- 1345 ?IPRINT("[test A2] write agents config file with invalid version (2)"), 1346 AgentA2 = setelement(9, Agent0, "v30"), 1347 write_agents_conf(ConfDir, [AgentA2]), 1348 ?line {error, ReasonA2} = config_start(Opts), 1349 ?IPRINT("start failed (as expected): ~p", [ReasonA2]), 1350 ?line {failed_check, _, _, _, {bad_version, _}} = ReasonA2, 1351 config_ensure_not_running(), 1352 1353 %% -- 1354 ?IPRINT("[test B1] write agents config file with invalid sec-model (1)"), 1355 AgentB1 = setelement(10, Agent0, "\"any\""), 1356 write_agents_conf(ConfDir, [AgentB1]), 1357 ?line {error, ReasonB1} = config_start(Opts), 1358 ?IPRINT("start failed (as expected): ~p", [ReasonB1]), 1359 ?line {failed_check, _, _, _, {invalid_sec_model, _}} = ReasonB1, 1360 config_ensure_not_running(), 1361 1362 %% -- 1363 ?IPRINT("[test B2] write agents config file with invalid sec-model (2)"), 1364 AgentB2 = setelement(10, Agent0, "v3"), 1365 write_agents_conf(ConfDir, [AgentB2]), 1366 ?line {error, ReasonB2} = config_start(Opts), 1367 ?IPRINT("start failed (as expected): ~p", [ReasonB2]), 1368 ?line {failed_check, _, _, _, {invalid_sec_model, _}} = ReasonB2, 1369 config_ensure_not_running(), 1370 1371 %% -- 1372 ?IPRINT("[test C1] write agents config file with invalid sec-name (1)"), 1373 AgentC1 = setelement(11, Agent0, "initial"), 1374 write_agents_conf(ConfDir, [AgentC1]), 1375 case config_start(Opts) of 1376 {error, ReasonC1} -> 1377 ?IPRINT("start failed (as expected): ~p", [ReasonC1]), 1378 ?line {failed_check, _, _, _, {bad_sec_name, _}} = ReasonC1, 1379 config_ensure_not_running(); 1380 OK_C1 -> 1381 config_ensure_not_running(), 1382 exit({error, {unexpected_success, "C1", OK_C1}}) 1383 end, 1384 1385 %% -- 1386 ?IPRINT("[test C2] write agents config file with invalid sec-name (2)"), 1387 AgentC2 = setelement(11, Agent0, "10101"), 1388 write_agents_conf(ConfDir, [AgentC2]), 1389 case config_start(Opts) of 1390 {error, ReasonC2} -> 1391 ?IPRINT("start failed (as expected): ~p", [ReasonC2]), 1392 ?line {failed_check, _, _, _, {bad_sec_name, _}} = ReasonC2, 1393 config_ensure_not_running(); 1394 OK_C2 -> 1395 config_ensure_not_running(), 1396 exit({error, {unexpected_success, "C2", OK_C2}}) 1397 end, 1398 1399 %% -- 1400 ?IPRINT("[test D1] write agents config file with invalid sec-level (1)"), 1401 AgentD1 = setelement(12, Agent0, "\"noAuthNoPriv\""), 1402 write_agents_conf(ConfDir, [AgentD1]), 1403 case config_start(Opts) of 1404 {error, ReasonD1} -> 1405 ?IPRINT("start failed (as expected): ~p", [ReasonD1]), 1406 ?line {failed_check, _, _, _, {invalid_sec_level, _}} = ReasonD1, 1407 config_ensure_not_running(); 1408 OK_D1 -> 1409 config_ensure_not_running(), 1410 exit({error, {unexpected_success, "D1", OK_D1}}) 1411 end, 1412 1413 %% -- 1414 ?IPRINT("[test D2] write agents config file with invalid sec-level (2)"), 1415 AgentD2 = setelement(12, Agent0, "99"), 1416 write_agents_conf(ConfDir, [AgentD2]), 1417 case config_start(Opts) of 1418 {error, ReasonD2} -> 1419 ?IPRINT("start failed (as expected): ~p", [ReasonD2]), 1420 ?line {failed_check, _, _, _, {invalid_sec_level, _}} = ReasonD2, 1421 config_ensure_not_running(); 1422 OK_D2 -> 1423 config_ensure_not_running(), 1424 exit({error, {unexpected_success, "D2", OK_D2}}) 1425 end, 1426 1427 %% -- 1428 ?IPRINT("[test E1] write agents config file with invalid agent (1)"), 1429 write_agents_conf2(ConfDir, "{swiacf, \"targ-hobbes\"}."), 1430 case config_start(Opts) of 1431 {error, ReasonE1} -> 1432 ?IPRINT("start failed (as expected): ~p", [ReasonE1]), 1433 ?line {failed_check, _, _, _, {bad_agent_config, _}} = ReasonE1, 1434 config_ensure_not_running(); 1435 OK_E1 -> 1436 config_ensure_not_running(), 1437 exit({error, {unexpected_success, "E1", OK_E1}}) 1438 end, 1439 1440 ?IPRINT("done"), 1441 ok. 1442 1443 1444%% 1445%% --- 1446%% 1447 1448start_with_invalid_usm_conf_file1(suite) -> []; 1449start_with_invalid_usm_conf_file1(doc) -> 1450 "Start with invalid usm config file."; 1451start_with_invalid_usm_conf_file1(Conf) when is_list(Conf) -> 1452 put(tname, "START-W-INV-USM-CONF-FILE-1"), 1453 ?IPRINT("start"), 1454 process_flag(trap_exit, true), 1455 1456 case ?CRYPTO_START() of 1457 ok -> 1458 case ?CRYPTO_SUPPORT() of 1459 {no, Reason} -> 1460 ?SKIP({unsupported_encryption, Reason}); 1461 yes -> 1462 ok 1463 end; 1464 {error, Reason} -> 1465 ?SKIP({failed_starting_crypto, Reason}) 1466 end, 1467 1468 ConfDir = ?config(manager_conf_dir, Conf), 1469 DbDir = ?config(manager_db_dir, Conf), 1470 1471 Opts = [{versions, [v1,v2,v3]}, 1472 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 1473 1474 write_manager_conf(ConfDir), 1475 1476 write_users_conf(ConfDir, [{"swiacf", "snmpm_user_default", "dummy"}]), 1477 1478 Usm0 = {"\"bmkEngine\"", "\"swiusmcf\"", 1479 "usmNoAuthProtocol", "[]", 1480 "usmNoPrivProtocol", "[]"}, 1481 1482 Usm1 = {"\"bmkEngine\"", "\"swiusmcf\"", "\"kalle\"", 1483 "usmNoAuthProtocol", "[]", 1484 "usmNoPrivProtocol", "[]"}, 1485 1486 %% -- 1487 ?IPRINT("[test 11] write usm config file with invalid engine-id (1)"), 1488 Usm11 = setelement(1, Usm0, "kalle-anka"), 1489 write_usm_conf(ConfDir, [Usm11]), 1490 ?line {error, Reason11} = config_start(Opts), 1491 ?IPRINT("start failed (as expected): ~p", [Reason11]), 1492 ?line {failed_reading, _, _, _, {parse_error, _}} = Reason11, 1493 config_ensure_not_running(), 1494 1495 %% -- 1496 ?IPRINT("[test 12] write usm config file with invalid engine-id (2)"), 1497 Usm12 = setelement(1, Usm0, "kalle_anka"), 1498 write_usm_conf(ConfDir, [Usm12]), 1499 ?line {error, Reason12} = config_start(Opts), 1500 ?IPRINT("start failed (as expected): ~p", [Reason12]), 1501 ?line {failed_check, _, _, _, {bad_usm_engine_id, _}} = Reason12, 1502 config_ensure_not_running(), 1503 1504 %% -- 1505 ?IPRINT("[test 13] write usm config file with invalid engine-id (3)"), 1506 Usm13 = setelement(1, Usm1, "10101"), 1507 write_usm_conf(ConfDir, [Usm13]), 1508 ?line {error, Reason13} = config_start(Opts), 1509 ?IPRINT("start failed (as expected): ~p", [Reason13]), 1510 ?line {failed_check, _, _, _, {bad_usm_engine_id, _}} = Reason13, 1511 config_ensure_not_running(), 1512 1513 %% -- 1514 ?IPRINT("[test 21] write usm config file with invalid user-name (1)"), 1515 Usm21 = setelement(2, Usm0, "kalle_anka"), 1516 write_usm_conf(ConfDir, [Usm21]), 1517 ?line {error, Reason21} = config_start(Opts), 1518 ?IPRINT("start failed (as expected): ~p", [Reason21]), 1519 ?line {failed_check, _, _, _, {bad_usm_user_name, _}} = Reason21, 1520 config_ensure_not_running(), 1521 1522 %% -- 1523 ?IPRINT("[test 22] write usm config file with invalid user-name (1)"), 1524 Usm22 = setelement(2, Usm1, "10101"), 1525 write_usm_conf(ConfDir, [Usm22]), 1526 ?line {error, Reason22} = config_start(Opts), 1527 ?IPRINT("start failed (as expected): ~p", [Reason22]), 1528 ?line {failed_check, _, _, _, {bad_usm_user_name, _}} = Reason22, 1529 config_ensure_not_running(), 1530 1531 %% -- 1532 ?IPRINT("[test 31] write usm config file with invalid sec-name (1)"), 1533 Usm31 = setelement(3, Usm1, "kalle_anka"), 1534 write_usm_conf(ConfDir, [Usm31]), 1535 ?line {error, Reason31} = config_start(Opts), 1536 ?IPRINT("start failed (as expected): ~p", [Reason31]), 1537 ?line {failed_check, _, _, _, {bad_usm_sec_name, _}} = Reason31, 1538 config_ensure_not_running(), 1539 1540 %% -- 1541 ?IPRINT("[test 32] write usm config file with invalid sec-name (2)"), 1542 Usm32 = setelement(3, Usm1, "10101"), 1543 write_usm_conf(ConfDir, [Usm32]), 1544 ?line {error, Reason32} = config_start(Opts), 1545 ?IPRINT("start failed (as expected): ~p", [Reason32]), 1546 ?line {failed_check, _, _, _, {bad_usm_sec_name, _}} = Reason32, 1547 config_ensure_not_running(), 1548 1549 %% -- 1550 ?IPRINT("[test 41] write usm config file with invalid auth-protocol (1)"), 1551 Usm41 = setelement(3, Usm0, "\"usmNoAuthProtocol\""), 1552 write_usm_conf(ConfDir, [Usm41]), 1553 ?line {error, Reason41} = config_start(Opts), 1554 ?IPRINT("start failed (as expected): ~p", [Reason41]), 1555 ?line {failed_check, _, _, _, {invalid_auth_protocol, _}} = Reason41, 1556 config_ensure_not_running(), 1557 1558 %% -- 1559 ?IPRINT("[test 42] write usm config file with invalid auth-protocol (2)"), 1560 Usm42 = setelement(3, Usm0, "kalle"), 1561 write_usm_conf(ConfDir, [Usm42]), 1562 ?line {error, Reason42} = config_start(Opts), 1563 ?IPRINT("start failed (as expected): ~p", [Reason42]), 1564 ?line {failed_check, _, _, _, {invalid_auth_protocol, _}} = Reason42, 1565 config_ensure_not_running(), 1566 1567 %% -- 1568 ?IPRINT("[test 43] write usm config file with invalid auth-protocol (3)"), 1569 Usm43 = setelement(3, Usm0, "10101"), 1570 write_usm_conf(ConfDir, [Usm43]), 1571 ?line {error, Reason43} = config_start(Opts), 1572 ?IPRINT("start failed (as expected): ~p", [Reason43]), 1573 ?line {failed_check, _, _, _, {invalid_auth_protocol, _}} = Reason43, 1574 config_ensure_not_running(), 1575 1576 %% -- 1577 ?IPRINT("[test 51] write usm config file with invalid auth-key (1)"), 1578 Usm51 = setelement(3, Usm0, "usmHMACMD5AuthProtocol"), 1579 write_usm_conf(ConfDir, [Usm51]), 1580 ?line {error, Reason51} = config_start(Opts), 1581 ?IPRINT("start failed (as expected): ~p", [Reason51]), 1582 ?line {failed_check, _, _, _, {invalid_auth_key, _, _}} = Reason51, 1583 config_ensure_not_running(), 1584 1585 %% -- 1586 ?IPRINT("[test 52] write usm config file with invalid auth-key (2)"), 1587 Usm52 = setelement(4, Usm51, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5]"), 1588 write_usm_conf(ConfDir, [Usm52]), 1589 ?line {error, Reason52} = config_start(Opts), 1590 ?IPRINT("start failed (as expected): ~p", [Reason52]), 1591 ?line {failed_check, _, _, _, {invalid_auth_key, _, 15}} = Reason52, 1592 config_ensure_not_running(), 1593 1594 %% -- 1595 ?IPRINT("[test 53] write usm config file with invalid auth-key (3)"), 1596 Usm53 = setelement(4, Usm51, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7]"), 1597 write_usm_conf(ConfDir, [Usm53]), 1598 ?line {error, Reason53} = config_start(Opts), 1599 ?IPRINT("start failed (as expected): ~p", [Reason53]), 1600 ?line {failed_check, _, _, _, {invalid_auth_key, _, 17}} = Reason53, 1601 config_ensure_not_running(), 1602 1603 %% -- 1604 ?IPRINT("[test 54] write usm config file with invalid auth-key (4)"), 1605 Usm54 = setelement(4, Usm51, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,kalle]"), 1606 write_usm_conf(ConfDir, [Usm54]), 1607 ?line maybe_start_crypto(), %% Make sure it's started... 1608 ?line {error, Reason54} = config_start(Opts), 1609 ?line ok = maybe_stop_crypto(), 1610 ?IPRINT("start failed (as expected): ~p", [Reason54]), 1611 ?line {failed_check, _, _, _, {invalid_auth_key, _}} = Reason54, 1612 config_ensure_not_running(), 1613 1614 %% -- 1615 ?IPRINT("[test 55] write usm config file with invalid auth-key (5)"), 1616 Usm55 = setelement(4, Usm51, "arne_anka"), 1617 write_usm_conf(ConfDir, [Usm55]), 1618 ?line {error, Reason55} = config_start(Opts), 1619 ?IPRINT("start failed (as expected): ~p", [Reason55]), 1620 ?line {failed_check, _, _, _, {invalid_auth_key, _}} = Reason55, 1621 config_ensure_not_running(), 1622 1623 %% -- 1624 ?IPRINT("[test 56] write usm config file with invalid auth-key (6)"), 1625 Usm56 = setelement(4, Usm51, "10101"), 1626 write_usm_conf(ConfDir, [Usm56]), 1627 ?line {error, Reason56} = config_start(Opts), 1628 ?IPRINT("start failed (as expected): ~p", [Reason56]), 1629 ?line {failed_check, _, _, _, {invalid_auth_key, _}} = Reason56, 1630 config_ensure_not_running(), 1631 1632 %% -- 1633 ?IPRINT("[test 57] write usm config file with invalid auth-key (7)"), 1634 Usm57 = setelement(3, Usm0, "usmHMACSHAAuthProtocol"), 1635 write_usm_conf(ConfDir, [Usm57]), 1636 ?line {error, Reason57} = config_start(Opts), 1637 ?IPRINT("start failed (as expected): ~p", [Reason57]), 1638 ?line {failed_check, _, _, _, {invalid_auth_key, _, _}} = Reason57, 1639 config_ensure_not_running(), 1640 1641 %% -- 1642 ?IPRINT("[test 58] write usm config file with invalid auth-key (8)"), 1643 Usm58 = setelement(4, Usm57, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6]"), 1644 write_usm_conf(ConfDir, [Usm58]), 1645 ?line {error, Reason58} = config_start(Opts), 1646 ?IPRINT("start failed (as expected): ~p", [Reason58]), 1647 ?line {failed_check, _, _, _, {invalid_auth_key, _, 16}} = Reason58, 1648 config_ensure_not_running(), 1649 1650 %% -- 1651 ?IPRINT("[test 59] write usm config file with invalid auth-key (9)"), 1652 Usm59 = setelement(4, Usm57, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,ka]"), 1653 write_usm_conf(ConfDir, [Usm59]), 1654 ?line ok = maybe_start_crypto(), 1655 ?line {error, Reason59} = config_start(Opts), 1656 ?line ok = maybe_stop_crypto(), 1657 ?IPRINT("start failed (as expected): ~p", [Reason59]), 1658 ?line {failed_check, _, _, _, {invalid_auth_key, _}} = Reason59, 1659 config_ensure_not_running(), 1660 1661 %% -- 1662 %% <CRYPTO-MODIFICATIONS> 1663 %% The crypto application do no longer need to be started 1664 %% explicitly (all of it is as of R14 implemented with NIFs). 1665 case (catch crypto:version()) of 1666 {'EXIT', {undef, _}} -> 1667 ?IPRINT("[test 5A] write usm config file with valid auth-key " 1668 "when crypto not started (10)"), 1669 Usm5A = setelement(4, 1670 Usm57, 1671 "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]"), 1672 write_usm_conf(ConfDir, [Usm5A]), 1673 ?line {error, Reason5A} = config_start(Opts), 1674 ?IPRINT("start failed (as expected): ~p", [Reason5A]), 1675 ?line {failed_check, _, _, _, {unsupported_crypto, _}} = Reason5A, 1676 config_ensure_not_running(); 1677 _ -> 1678 %% This function is only present in version 2.0 or greater. 1679 %% The crypto app no longer needs to be explicitly started 1680 ok 1681 end, 1682 %% </CRYPTO-MODIFICATIONS> 1683 1684 %% -- 1685 ?IPRINT("[test 61] write usm config file with invalid priv-protocol (1)"), 1686 Usm61 = setelement(5, Usm0, "\"usmNoPrivProtocol\""), 1687 write_usm_conf(ConfDir, [Usm61]), 1688 ?line {error, Reason61} = config_start(Opts), 1689 ?IPRINT("start failed (as expected): ~p", [Reason61]), 1690 ?line {failed_check, _, _, _, {invalid_priv_protocol, _}} = Reason61, 1691 config_ensure_not_running(), 1692 1693 %% -- 1694 ?IPRINT("[test 62] write usm config file with invalid priv-protocol (2)"), 1695 Usm62 = setelement(5, Usm0, "kalle"), 1696 write_usm_conf(ConfDir, [Usm62]), 1697 ?line {error, Reason62} = config_start(Opts), 1698 ?IPRINT("start failed (as expected): ~p", [Reason62]), 1699 ?line {failed_check, _, _, _, {invalid_priv_protocol, _}} = Reason62, 1700 config_ensure_not_running(), 1701 1702 %% -- 1703 ?IPRINT("[test 63] write usm config file with invalid priv-protocol (3)"), 1704 Usm63 = setelement(5, Usm0, "10101"), 1705 write_usm_conf(ConfDir, [Usm63]), 1706 ?line {error, Reason63} = config_start(Opts), 1707 ?IPRINT("start failed (as expected): ~p", [Reason63]), 1708 ?line {failed_check, _, _, _, {invalid_priv_protocol, _}} = Reason63, 1709 config_ensure_not_running(), 1710 1711 %% -- 1712 ?IPRINT("[test 71] write usm config file with invalid priv-key (1)"), 1713 Usm71 = setelement(5, Usm0, "usmDESPrivProtocol"), 1714 write_usm_conf(ConfDir, [Usm71]), 1715 ?line {error, Reason71} = config_start(Opts), 1716 ?IPRINT("start failed (as expected): ~p", [Reason71]), 1717 ?line {failed_check, _, _, _, {invalid_priv_key, _, _}} = Reason71, 1718 config_ensure_not_running(), 1719 1720 %% -- 1721 ?IPRINT("[test 72] write usm config file with invalid priv-key (2)"), 1722 Usm72 = setelement(6, Usm71, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5]"), 1723 write_usm_conf(ConfDir, [Usm72]), 1724 ?line {error, Reason72} = config_start(Opts), 1725 ?IPRINT("start failed (as expected): ~p", [Reason72]), 1726 ?line {failed_check, _, _, _, {invalid_priv_key, _, 15}} = Reason72, 1727 config_ensure_not_running(), 1728 1729 %% -- 1730 ?IPRINT("[test 73] write usm config file with invalid priv-key (3)"), 1731 Usm73 = setelement(6, Usm71, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7]"), 1732 write_usm_conf(ConfDir, [Usm73]), 1733 ?line {error, Reason73} = config_start(Opts), 1734 ?IPRINT("start failed (as expected): ~p", [Reason73]), 1735 ?line {failed_check, _, _, _, {invalid_priv_key, _, 17}} = Reason73, 1736 config_ensure_not_running(), 1737 1738 %% -- 1739 ?IPRINT("[test 74] write usm config file with invalid priv-key (4)"), 1740 Usm74 = setelement(6, Usm71, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,kalle]"), 1741 write_usm_conf(ConfDir, [Usm74]), 1742 ?line ok = maybe_start_crypto(), 1743 ?line {error, Reason74} = config_start(Opts), 1744 ?line ok = maybe_stop_crypto(), 1745 ?IPRINT("start failed (as expected): ~p", [Reason74]), 1746 ?line {failed_check, _, _, _, {invalid_priv_key, _}} = Reason74, 1747 config_ensure_not_running(), 1748 1749 %% -- 1750 ?IPRINT("[test 75] write usm config file with invalid priv-key (5)"), 1751 Usm75 = setelement(6, Usm71, "arne_anka"), 1752 write_usm_conf(ConfDir, [Usm75]), 1753 ?line {error, Reason75} = config_start(Opts), 1754 ?IPRINT("start failed (as expected): ~p", [Reason75]), 1755 ?line {failed_check, _, _, _, {invalid_priv_key, _}} = Reason75, 1756 config_ensure_not_running(), 1757 1758 %% -- 1759 ?IPRINT("[test 76] write usm config file with invalid priv-key (6)"), 1760 Usm76 = setelement(6, Usm71, "10101"), 1761 write_usm_conf(ConfDir, [Usm76]), 1762 ?line {error, Reason76} = config_start(Opts), 1763 ?IPRINT("start failed (as expected): ~p", [Reason76]), 1764 ?line {failed_check, _, _, _, {invalid_priv_key, _}} = Reason76, 1765 config_ensure_not_running(), 1766 1767 %% -- 1768 %% <CRYPTO-MODIFICATIONS> 1769 %% The crypto application do no longer need to be started 1770 %% explicitly (all of it is as of R14 implemented with NIFs). 1771 case (catch crypto:version()) of 1772 {'EXIT', {undef, _}} -> 1773 ?IPRINT("[test 77] write usm config file with valid priv-key " 1774 "when crypto not started (7)"), 1775 Usm77 = setelement(6, Usm71, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6]"), 1776 write_usm_conf(ConfDir, [Usm77]), 1777 ?line {error, Reason77} = config_start(Opts), 1778 ?IPRINT("start failed (as expected): ~p", [Reason77]), 1779 ?line {failed_check, _, _, _, {unsupported_crypto, _}} = Reason77, 1780 config_ensure_not_running(); 1781 _ -> 1782 %% This function is only present in version 2.0 or greater. 1783 %% The crypto app no longer needs to be explicitly started 1784 ok 1785 end, 1786 %% </CRYPTO-MODIFICATIONS> 1787 1788 %% -- 1789 ?IPRINT("[test 78] write usm config file with invalid usm (1)"), 1790 write_usm_conf2(ConfDir, "{\"bmkEngine\", \"swiusmcf\"}."), 1791 ?line {error, Reason81} = config_start(Opts), 1792 ?IPRINT("start failed (as expected): ~p", [Reason81]), 1793 ?line {failed_check, _, _, _, {bad_usm_config, _}} = Reason81, 1794 config_ensure_not_running(), 1795 1796 ?IPRINT("done"), 1797 ok. 1798 1799 1800%% 1801%% --- 1802%% 1803 1804start_with_create_db_and_dir_opt(suite) -> []; 1805start_with_create_db_and_dir_opt(doc) -> 1806 "Start the snmp manager config process with the\n" 1807 "create_db_and_dir option."; 1808start_with_create_db_and_dir_opt(Conf) when is_list(Conf) -> 1809 put(tname, "START-W-CRE-DB-AND-DIR-OPT"), 1810 ?IPRINT("start"), 1811 process_flag(trap_exit, true), 1812 ConfDir = ?config(manager_conf_dir, Conf), 1813 DbDir = ?config(manager_db_dir, Conf), 1814 true = not filelib:is_dir(DbDir) and not filelib:is_file(DbDir), 1815 write_manager_conf(ConfDir), 1816 1817 ?IPRINT("verify nonexistent db_dir"), 1818 ConfigOpts01 = [{verbosity,trace}, {dir, ConfDir}, {db_dir, DbDir}], 1819 {error, Reason01} = config_start([{config, ConfigOpts01}]), 1820 ?IPRINT("nonexistent db_dir res: ~p", [Reason01]), 1821 {invalid_conf_db_dir, _, not_found} = Reason01, 1822 1823 ?IPRINT("verify nonexistent db_dir gets created"), 1824 ConfigOpts02 = [{db_init_error, create_db_and_dir} | ConfigOpts01], 1825 {ok, _Pid} = config_start([{config, ConfigOpts02}]), 1826 true = filelib:is_dir(DbDir), 1827 ?IPRINT("verified: nonexistent db_dir was correctly created"), 1828 ok = config_stop(), 1829 1830 ?IPRINT("done"), 1831 ok. 1832 1833%% 1834%% --- 1835%% 1836 1837 1838simple_system_op(suite) -> []; 1839simple_system_op(doc) -> 1840 "Access some of the known system info and some \n" 1841 "system info that does not exist."; 1842simple_system_op(Conf) when is_list(Conf) -> 1843 put(tname, "SIMPLE-SYS-OP"), 1844 ?IPRINT("start"), 1845 ConfDir = ?config(manager_conf_dir, Conf), 1846 DbDir = ?config(manager_db_dir, Conf), 1847 1848 write_manager_conf(ConfDir), 1849 1850 Opts = [{versions, [v1]}, 1851 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 1852 1853 ?IPRINT("start config"), 1854 ?line {ok, _Pid} = config_start(Opts), 1855 1856 ?IPRINT("retreive various configs"), 1857 ?line {ok, _Time} = snmpm_config:system_start_time(), 1858 ?line {ok, _EngineId} = snmpm_config:get_engine_id(), 1859 ?line {ok, _MMS} = snmpm_config:get_engine_max_message_size(), 1860 1861 ?IPRINT("attempt to retreive nonexisting"), 1862 ?line {error, not_found} = snmpm_config:system_info(kalle), 1863 1864 ?line ok = config_stop(), 1865 config_ensure_not_running(), 1866 1867 ?IPRINT("done"), 1868 ok. 1869 1870 1871%% 1872%% --- 1873%% 1874 1875 1876 1877%% 1878%% --- 1879%% 1880 1881register_user_using_file(suite) -> []; 1882register_user_using_file(doc) -> 1883 "Register user using the 'users.conf' file."; 1884register_user_using_file(Conf) when is_list(Conf) -> 1885 put(tname, "REG-USER-USING-FILE"), 1886 ?IPRINT("start"), 1887 process_flag(trap_exit, true), 1888 _ConfDir = ?config(manager_conf_dir, Conf), 1889 _DbDir = ?config(manager_db_dir, Conf), 1890 ?SKIP(not_yet_implemented). 1891 1892 1893%% 1894%% --- 1895%% 1896 1897register_user_using_function(suite) -> []; 1898register_user_using_function(doc) -> 1899 "Register user using the API (function)."; 1900register_user_using_function(Conf) when is_list(Conf) -> 1901 put(tname, "REG-USER-USING-FUNC"), 1902 ?IPRINT("start"), 1903 process_flag(trap_exit, true), 1904 _ConfDir = ?config(manager_conf_dir, Conf), 1905 _DbDir = ?config(manager_db_dir, Conf), 1906 ?SKIP(not_yet_implemented). 1907 1908 1909%% 1910%% --- 1911%% 1912 1913register_user_failed_using_function1(suite) -> []; 1914register_user_failed_using_function1(doc) -> 1915 "Register user failed using incorrect arguments to API (function)."; 1916register_user_failed_using_function1(Conf) when is_list(Conf) -> 1917 put(tname, "REG-USER-FAIL-USING-FUNC-1"), 1918 ?IPRINT("start"), 1919 process_flag(trap_exit, true), 1920 _ConfDir = ?config(manager_conf_dir, Conf), 1921 _DbDir = ?config(manager_db_dir, Conf), 1922 ?SKIP(not_yet_implemented). 1923 1924 1925%% 1926%% --- 1927%% 1928 1929 1930 1931%% 1932%% --- 1933%% 1934 1935%% This test case tests that we can "register" agents using a config file. 1936%% So, starting the config process is part of the actual test, but even 1937%% if the test fails, we want to make sure the config process is actually 1938%% stop'ed. So, we put config stop in the post. 1939 1940register_agent_using_file(suite) -> []; 1941register_agent_using_file(doc) -> 1942 "Register agents using the 'agents'conf' file."; 1943register_agent_using_file(Conf) when is_list(Conf) -> 1944 put(tname, "REG-AG-USING-FILE"), 1945 process_flag(trap_exit, true), 1946 Pre = fun() -> ok end, 1947 Case = fun(_) -> do_register_agent_using_file(Conf) end, 1948 Post = fun(_) -> 1949 ?IPRINT("stop config process"), 1950 ?line ok = snmpm_config:stop(), 1951 config_ensure_not_running(), 1952 ok 1953 end, 1954 ?TC_TRY(register_agent_using_file, Pre, Case, Post). 1955 1956do_register_agent_using_file(Conf) -> 1957 ?IPRINT("start"), 1958 ConfDir = ?config(manager_conf_dir, Conf), 1959 DbDir = ?config(manager_db_dir, Conf), 1960 1961 Opts = [{versions, [v1]}, 1962 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 1963 1964 1965 %% -- 1966 ?IPRINT("write manager config file"), 1967 write_manager_conf(ConfDir), 1968 1969 %% -- 1970 ?IPRINT("write users config file"), 1971 UserId1 = raufi1, 1972 UserId1Str = str(UserId1), 1973 UserId2 = raufi2, 1974 UserId2Str = str(UserId2), 1975 User1 = {UserId1Str, "snmpm_user_default", "dummy1"}, 1976 User2 = {UserId2Str, "snmpm_user_default", "dummy2", "[{version, v1}]"}, 1977 write_users_conf(ConfDir, [User1, User2]), 1978 1979 %% -- 1980 ?IPRINT("write agents config file"), 1981 AgentAddr1 = [192,168,0,101], 1982 AgentAddr1Str = str(AgentAddr1), 1983 AgentPort1 = 162, 1984 AgentPort1Str = str(AgentPort1), 1985 EngineID1 = "bmkEngine1", 1986 EngineID1Str = str(EngineID1), 1987 MMS1 = 1024, 1988 MMS1Str = str(MMS1), 1989 AgentAddr2 = [192,168,0,102], 1990 AgentAddr2Str = str(AgentAddr2), 1991 AgentPort2 = 162, 1992 AgentPort2Str = str(AgentPort2), 1993 EngineID2 = "bmkEngine2", 1994 EngineID2Str = str(EngineID2), 1995 MMS2 = 512, 1996 MMS2Str = str(MMS2), 1997 Agent1Str = {UserId1Str, "\"targ-hobbes1\"", "\"comm\"", 1998 AgentAddr1Str, AgentPort1Str, EngineID1Str, 1999 "1000", MMS1Str, "v1", 2000 "any", "\"initial\"", "noAuthNoPriv"}, 2001 Agent2Str = {UserId2Str, "\"targ-hobbes2\"", "\"comm\"", 2002 AgentAddr2Str, AgentPort2Str, EngineID2Str, 2003 "1500", MMS2Str, "v1", 2004 "any", "\"initial\"", "noAuthNoPriv"}, 2005 write_agents_conf(ConfDir, [Agent1Str, Agent2Str]), 2006 2007 %% -- 2008 ?IPRINT("start the config process"), 2009 ?line {ok, _Pid} = config_start(Opts), 2010 2011 %% -- 2012 ?IPRINT("which agents"), 2013 ?line [_, _] = All = snmpm_config:which_agents(), 2014 ?IPRINT("all agents: ~n ~p", [All]), 2015 ?line [A1] = snmpm_config:which_agents(UserId1), 2016 ?IPRINT("agents belonging to ~w: ~n ~p", [UserId1, A1]), 2017 ?line [A2] = snmpm_config:which_agents(UserId2), 2018 ?IPRINT("agents belonging to ~w: ~n ~p", [UserId2, A2]), 2019 2020 %% -- 2021 ?IPRINT("All info for agent <~w,~w>", [AgentAddr1, AgentPort1]), 2022 ?line {ok, AllInfo1} = 2023 snmpm_config:agent_info(AgentAddr1, AgentPort1, all), 2024 ?IPRINT("all agent info for agent: ~n ~p", [AllInfo1]), 2025 2026 %% -- 2027 ?IPRINT("EngineID (~p) for agent <~w,~w>", [EngineID1, AgentAddr1, AgentPort1]), 2028 ?line {ok, EngineID1} = 2029 snmpm_config:agent_info(AgentAddr1, AgentPort1, engine_id), 2030 2031 2032 %% -- 2033 ?IPRINT("All info for agent <~w,~w>", [AgentAddr2, AgentPort2]), 2034 ?line {ok, AllInfo2} = 2035 snmpm_config:agent_info(AgentAddr2, AgentPort2, all), 2036 ?IPRINT("all agent info for agent: ~n ~p", [AllInfo2]), 2037 2038 %% -- 2039 ?IPRINT("EngineID (~p) for agent <~w,~w>", [EngineID2, AgentAddr2, AgentPort2]), 2040 ?line {ok, EngineID2} = 2041 snmpm_config:agent_info(AgentAddr2, AgentPort2, engine_id), 2042 2043 %% -- 2044 ?line {ok, MMS2} = 2045 snmpm_config:agent_info(AgentAddr2, AgentPort2, max_message_size), 2046 NewMMS21 = 2048, 2047 ?IPRINT("try update agent info max-message-size to ~w for agent <~w,~w>", 2048 [NewMMS21, AgentAddr2, AgentPort2]), 2049 ?line ok = snmpm_config:update_agent_info(UserId2, AgentAddr2, AgentPort2, 2050 max_message_size, NewMMS21), 2051 ?line {ok, NewMMS21} = 2052 snmpm_config:agent_info(AgentAddr2, AgentPort2, max_message_size), 2053 2054 %% -- 2055 ?IPRINT("try (and fail) to update agent info max-message-size to ~w " 2056 "for agent <~w,~w> " 2057 "with user ~w (not owner)", 2058 [NewMMS21, AgentAddr2, AgentPort2, UserId1]), 2059 ?line {error, Reason01} = 2060 snmpm_config:update_agent_info(UserId1, AgentAddr2, AgentPort2, 2061 max_message_size, NewMMS21), 2062 ?IPRINT("expected failure. Reason01: ~p", [Reason01]), 2063 ?line {ok, NewMMS21} = 2064 snmpm_config:agent_info(AgentAddr2, AgentPort2, max_message_size), 2065 2066 %% -- 2067 NewMMS22 = 400, 2068 ?IPRINT("try (and fail) to update agent info max-message-size to ~w " 2069 "for agent <~w,~w>", 2070 [NewMMS22, AgentAddr2, AgentPort2]), 2071 ?line {error, Reason02} = 2072 snmpm_config:update_agent_info(UserId1, AgentAddr2, AgentPort2, 2073 max_message_size, NewMMS22), 2074 ?IPRINT("expected failure. Reason02: ~p", [Reason02]), 2075 2076 %% -- 2077 ?IPRINT("done"), 2078 ok. 2079 2080 2081%% 2082%% --- 2083%% 2084 2085register_agent_using_function(suite) -> []; 2086register_agent_using_function(doc) -> 2087 "Register agents using the API (function)."; 2088register_agent_using_function(Conf) when is_list(Conf) -> 2089 put(tname, "REG-AG-USING-FUNC"), 2090 ?IPRINT("start"), 2091 process_flag(trap_exit, true), 2092 _ConfDir = ?config(manager_conf_dir, Conf), 2093 _DbDir = ?config(manager_db_dir, Conf), 2094 ?SKIP(not_yet_implemented). 2095 2096 2097%% 2098%% --- 2099%% 2100 2101register_agent_failed_using_function1(suite) -> []; 2102register_agent_failed_using_function1(doc) -> 2103 "Register agents failng using the API (function) with incorrect " 2104 "config (1)."; 2105register_agent_failed_using_function1(Conf) when is_list(Conf) -> 2106 put(tname, "REG-AG-FAIL-USING-FUNC-1"), 2107 ?IPRINT("start"), 2108 process_flag(trap_exit, true), 2109 _ConfDir = ?config(manager_conf_dir, Conf), 2110 _DbDir = ?config(manager_db_dir, Conf), 2111 ?SKIP(not_yet_implemented). 2112 2113 2114%% 2115%% --- 2116%% 2117 2118 2119 2120%% 2121%% --- 2122%% 2123 2124register_usm_user_using_file(suite) -> []; 2125register_usm_user_using_file(doc) -> 2126 "Register usm user using the 'usm.conf' file."; 2127register_usm_user_using_file(Conf) when is_list(Conf) -> 2128 put(tname, "REG-USM-USER-USING-FILE"), 2129 ?IPRINT("start"), 2130 process_flag(trap_exit, true), 2131 2132 case ?CRYPTO_START() of 2133 ok -> 2134 case ?CRYPTO_SUPPORT() of 2135 {no, Reason} -> 2136 ?SKIP({unsupported_encryption, Reason}); 2137 yes -> 2138 ok 2139 end; 2140 {error, Reason} -> 2141 ?SKIP({failed_starting_crypto, Reason}) 2142 end, 2143 2144 ConfDir = ?config(manager_conf_dir, Conf), 2145 DbDir = ?config(manager_db_dir, Conf), 2146 2147 Opts = [{versions, [v3]}, 2148 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 2149 2150 %% -- 2151 ?IPRINT("write manager config file"), 2152 write_manager_conf(ConfDir), 2153 2154 %% -- 2155 ?IPRINT("write usm user config file"), 2156 SecEngineID = "loctzp's engine", 2157 SecName1 = "samu_auth1", 2158 UserName1 = SecName1, 2159 UsmUser1 = {"\"" ++ SecEngineID ++ "\"", 2160 "\"" ++ UserName1 ++ "\"", 2161 "\"" ++ SecName1 ++ "\"", 2162 "usmHMACMD5AuthProtocol", "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6]", 2163 "usmNoPrivProtocol", "[]"}, 2164 2165 SecName2 = "samu_auth2", 2166 UserName2 = "samu", 2167 UsmUser2 = {"\"" ++ SecEngineID ++ "\"", 2168 "\"" ++ UserName2 ++ "\"", 2169 "\"" ++ SecName2 ++ "\"", 2170 "usmHMACMD5AuthProtocol", "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6]", 2171 "usmNoPrivProtocol", "[]"}, 2172 write_usm_conf(ConfDir, [UsmUser1, UsmUser2]), 2173 2174 %% -- 2175 ?IPRINT("start the config process"), 2176 ?line {ok, _Pid} = config_start(Opts), 2177 2178 %% -- 2179 ?IPRINT("lookup 1 (ok)"), 2180 ?line {ok, #usm_user{name = UserName1} = User1} = 2181 snmpm_config:get_usm_user_from_sec_name(SecEngineID, SecName1), 2182 ?IPRINT("User: ~p", [User1]), 2183 2184 ?IPRINT("lookup 2 (ok)"), 2185 ?line {ok, #usm_user{name = UserName2} = User2} = 2186 snmpm_config:get_usm_user_from_sec_name(SecEngineID, SecName2), 2187 ?IPRINT("User: ~p", [User2]), 2188 2189 ?IPRINT("lookup 3 (error)"), 2190 ?line {error, not_found} = 2191 snmpm_config:get_usm_user_from_sec_name(SecEngineID, SecName2 ++ "_1"), 2192 2193 %% -- 2194 ?IPRINT("stop config process"), 2195 ?line ok = snmpm_config:stop(), 2196 config_ensure_not_running(), 2197 2198 %% -- 2199 ?IPRINT("done"), 2200 ok. 2201 2202 2203%% 2204%% --- 2205%% 2206 2207register_usm_user_using_function(suite) -> []; 2208register_usm_user_using_function(doc) -> 2209 "Register usm user using the API (function)."; 2210register_usm_user_using_function(Conf) when is_list(Conf) -> 2211 put(tname, "REG-USM-USER-USING-FUNC"), 2212 ?IPRINT("start"), 2213 process_flag(trap_exit, true), 2214 2215 case ?CRYPTO_START() of 2216 ok -> 2217 case ?CRYPTO_SUPPORT() of 2218 {no, Reason} -> 2219 ?SKIP({unsupported_encryption, Reason}); 2220 yes -> 2221 ok 2222 end; 2223 {error, Reason} -> 2224 ?SKIP({failed_starting_crypto, Reason}) 2225 end, 2226 2227 ConfDir = ?config(manager_conf_dir, Conf), 2228 DbDir = ?config(manager_db_dir, Conf), 2229 2230 Opts = [{versions, [v3]}, 2231 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 2232 2233 %% -- 2234 ?IPRINT("write manager config file"), 2235 write_manager_conf(ConfDir), 2236 2237 %% -- 2238 ?IPRINT("start the config process"), 2239 ?line {ok, _Pid} = config_start(Opts), 2240 2241 %% -- 2242 ?IPRINT("register usm user's"), 2243 EngineID = "loctzp's engine", 2244 2245 ?IPRINT("register user 1 (ok)"), 2246 UserName1 = "samu_auth1", 2247 SecName1 = UserName1, 2248 UsmConfig1 = [{sec_name, SecName1}, 2249 {auth, usmHMACMD5AuthProtocol}, 2250 {auth_key, [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6]}, 2251 {priv, usmNoPrivProtocol}], 2252 ?line ok = snmpm_config:register_usm_user(EngineID, UserName1, UsmConfig1), 2253 ?IPRINT("try register user 1 again (error)"), 2254 ?line {error, {already_registered, EngineID, UserName1}} = 2255 snmpm_config:register_usm_user(EngineID, UserName1, UsmConfig1), 2256 2257 ?IPRINT("register user 2 (ok)"), 2258 UserName2 = "samu_auth2", 2259 SecName2 = UserName2, 2260 UsmConfig2 = [{auth, usmHMACMD5AuthProtocol}, 2261 {auth_key, [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6]}, 2262 {priv, usmNoPrivProtocol}], 2263 ?line ok = snmpm_config:register_usm_user(EngineID, UserName2, UsmConfig2), 2264 2265 ?IPRINT("register user 3 (ok)"), 2266 UserName3 = "samu3", 2267 SecName3 = "samu_auth3", 2268 UsmConfig3 = [{sec_name, SecName3}, 2269 {auth, usmHMACMD5AuthProtocol}, 2270 {auth_key, [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6]}, 2271 {priv, usmNoPrivProtocol}], 2272 ?line ok = snmpm_config:register_usm_user(EngineID, UserName3, UsmConfig3), 2273 2274 ?IPRINT("lookup 1 (ok)"), 2275 ?line {ok, #usm_user{name = UserName1} = User1} = 2276 snmpm_config:get_usm_user_from_sec_name(EngineID, SecName1), 2277 ?IPRINT("User: ~p", [User1]), 2278 2279 ?IPRINT("lookup 2 (ok)"), 2280 ?line {ok, #usm_user{name = UserName2} = User2} = 2281 snmpm_config:get_usm_user_from_sec_name(EngineID, SecName2), 2282 ?IPRINT("User: ~p", [User2]), 2283 2284 ?IPRINT("lookup 3 (ok)"), 2285 ?line {ok, #usm_user{name = UserName3} = User3} = 2286 snmpm_config:get_usm_user_from_sec_name(EngineID, SecName3), 2287 ?IPRINT("User: ~p", [User3]), 2288 2289 ?IPRINT("lookup 4 (error)"), 2290 ?line {error, not_found} = 2291 snmpm_config:get_usm_user_from_sec_name(EngineID, SecName3 ++ "_1"), 2292 2293 %% -- 2294 ?IPRINT("stop config process"), 2295 ?line ok = snmpm_config:stop(), 2296 config_ensure_not_running(), 2297 2298 %% -- 2299 ?IPRINT("done"), 2300 ok. 2301 2302 2303%% 2304%% --- 2305%% 2306 2307register_usm_user_failed_using_function1(suite) -> []; 2308register_usm_user_failed_using_function1(doc) -> 2309 "Register usm user failed using incorrect arguments to API (function)."; 2310register_usm_user_failed_using_function1(Conf) when is_list(Conf) -> 2311 put(tname, "REG-USM-USER-FAIL-USING-FUNC"), 2312 ?IPRINT("start"), 2313 process_flag(trap_exit, true), 2314 2315 case ?CRYPTO_START() of 2316 ok -> 2317 case ?CRYPTO_SUPPORT() of 2318 {no, Reason} -> 2319 ?SKIP({unsupported_encryption, Reason}); 2320 yes -> 2321 ok 2322 end; 2323 {error, Reason} -> 2324 ?SKIP({failed_starting_crypto, Reason}) 2325 end, 2326 2327 _ConfDir = ?config(manager_conf_dir, Conf), 2328 _DbDir = ?config(manager_db_dir, Conf), 2329 ?SKIP(not_yet_implemented). 2330 2331 2332%% 2333%% --- 2334%% 2335 2336update_usm_user_info(suite) -> []; 2337update_usm_user_info(doc) -> 2338 "Update usm user info."; 2339update_usm_user_info(Conf) when is_list(Conf) -> 2340 put(tname, "UPD-USM-USER-INFO"), 2341 ?IPRINT("start"), 2342 process_flag(trap_exit, true), 2343 2344 case ?CRYPTO_START() of 2345 ok -> 2346 case ?CRYPTO_SUPPORT() of 2347 {no, Reason} -> 2348 ?SKIP({unsupported_encryption, Reason}); 2349 yes -> 2350 ok 2351 end; 2352 {error, Reason} -> 2353 ?SKIP({failed_starting_crypto, Reason}) 2354 end, 2355 2356 _ConfDir = ?config(manager_conf_dir, Conf), 2357 _DbDir = ?config(manager_db_dir, Conf), 2358 ?SKIP(not_yet_implemented). 2359 2360 2361%% 2362%% --- 2363%% 2364 2365 2366 2367%% 2368%% --- 2369%% 2370 2371create_and_increment(suite) -> []; 2372create_and_increment(doc) -> 2373 "Craete and increment counters."; 2374create_and_increment(Conf) when is_list(Conf) -> 2375 put(tname, "CRE-AND-INC"), 2376 ?IPRINT("start"), 2377 process_flag(trap_exit, true), 2378 2379 ConfDir = ?config(manager_conf_dir, Conf), 2380 DbDir = ?config(manager_db_dir, Conf), 2381 2382 write_manager_conf(ConfDir), 2383 2384 Opts = [{versions, [v1]}, 2385 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 2386 2387 ?line {ok, _Pid} = snmpm_config:start_link(Opts), 2388 2389 %% Random init 2390 ?SNMP_RAND_SEED(), 2391 2392 StartVal = rand:uniform(2147483647), 2393 IncVal = 42, 2394 EndVal = StartVal + IncVal, 2395 2396 ?line StartVal = snmpm_config:cre_counter(test_id, StartVal), 2397 ?line EndVal = snmpm_config:incr_counter(test_id, IncVal), 2398 2399 ?line ok = snmpm_config:stop(), 2400 config_ensure_not_running(), 2401 ok. 2402 2403 2404%% 2405%% --- 2406%% 2407 2408 2409 2410%% 2411%% --- 2412%% 2413 2414stats_create_and_increment(suite) -> []; 2415stats_create_and_increment(doc) -> 2416 "Create and increment statistics counters."; 2417stats_create_and_increment(Conf) when is_list(Conf) -> 2418 put(tname, "STATS-CRE-AND-INC"), 2419 ?IPRINT("start"), 2420 process_flag(trap_exit, true), 2421 2422 ConfDir = ?config(manager_conf_dir, Conf), 2423 DbDir = ?config(manager_db_dir, Conf), 2424 2425 write_manager_conf(ConfDir), 2426 2427 Opts = [{versions, [v1]}, 2428 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 2429 2430 ?line {ok, _Pid} = snmpm_config:start_link(Opts), 2431 2432 ?IPRINT("stats table (1): ~p", [ets:tab2list(snmpm_stats_table)]), 2433 ?line 0 = snmpm_config:maybe_cre_stats_counter(stats1, 0), 2434 ?IPRINT("stats table (2): ~p", [ets:tab2list(snmpm_stats_table)]), 2435 ?line ok = snmpm_config:maybe_cre_stats_counter(stats1, 0), 2436 ?IPRINT("stats table (3): ~p", [ets:tab2list(snmpm_stats_table)]), 2437 ?line 1 = snmpm_config:maybe_cre_stats_counter(stats2, 1), 2438 ?IPRINT("stats table (4): ~p", [ets:tab2list(snmpm_stats_table)]), 2439 ?line 10 = snmpm_config:cre_stats_counter(stats3, 10), 2440 ?IPRINT("stats table (5): ~p", [ets:tab2list(snmpm_stats_table)]), 2441 2442 Stats1Inc = fun() -> snmpm_config:incr_stats_counter(stats1, 1) end, 2443 ?line 10 = loop(10, -1, Stats1Inc), 2444 ?IPRINT("stats table (6): ~p", [ets:tab2list(snmpm_stats_table)]), 2445 2446 ?line ok = snmpm_config:reset_stats_counter(stats1), 2447 2448 ?line 10 = loop(10, -1, Stats1Inc), 2449 2450 ?line ok = snmpm_config:stop(), 2451 config_ensure_not_running(), 2452 ok. 2453 2454 2455loop(0, Acc, _) -> 2456 Acc; 2457loop(N, _, F) when (N > 0) andalso is_function(F) -> 2458 Acc = F(), 2459 loop(N-1, Acc, F). 2460 2461 2462%%====================================================================== 2463%% Ticket test-cases 2464%%====================================================================== 2465 2466 2467 2468otp_7219(suite) -> 2469 []; 2470otp_7219(doc) -> 2471 "Test-case for ticket OTP-7219"; 2472otp_7219(Config) when is_list(Config) -> 2473 put(tname, "OTP-7219"), 2474 ?IPRINT("start"), 2475 process_flag(trap_exit, true), 2476 2477 ConfDir = ?config(manager_conf_dir, Config), 2478 DbDir = ?config(manager_db_dir, Config), 2479 2480 ?IPRINT("write manager configuration"), 2481 write_manager_conf(ConfDir), 2482 2483 Opts1 = [{versions, [v1]}, 2484 {inform_request_behaviour, user}, 2485 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 2486 2487 ?IPRINT("start manager config"), 2488 ?line {ok, _Pid1} = snmpm_config:start_link(Opts1), 2489 2490 ?IPRINT("get some manager config"), 2491 {ok, {user, _}} = snmpm_config:system_info(net_if_irb), 2492 2493 ?IPRINT("stop manager config"), 2494 ?line ok = snmpm_config:stop(), 2495 config_ensure_not_running(), 2496 2497 IRB_TO = 15322, 2498 Opts2 = [{versions, [v1]}, 2499 {inform_request_behaviour, {user, IRB_TO}}, 2500 {config, [{verbosity, trace}, {dir, ConfDir}, {db_dir, DbDir}]}], 2501 2502 ?IPRINT("start manager config"), 2503 ?line {ok, _Pid2} = snmpm_config:start_link(Opts2), 2504 2505 ?IPRINT("get some manager config"), 2506 {ok, {user, IRB_TO}} = snmpm_config:system_info(net_if_irb), 2507 2508 ?IPRINT("stop manager config"), 2509 ?line ok = snmpm_config:stop(), 2510 config_ensure_not_running(), 2511 2512 ?IPRINT("done"), 2513 ok. 2514 2515 2516 2517 2518otp_8395_1(suite) -> []; 2519otp_8395_1(doc) -> 2520 "OTP-8395(1)"; 2521otp_8395_1(Conf) when is_list(Conf) -> 2522 put(tname, "OTP-8395-1"), 2523 ?IPRINT("start"), 2524 process_flag(trap_exit, true), 2525 otp8395(Conf, false, ok), 2526 ok. 2527 2528otp_8395_2(suite) -> []; 2529otp_8395_2(doc) -> 2530 "OTP-8395(2)"; 2531otp_8395_2(Conf) when is_list(Conf) -> 2532 put(tname, "OTP-8395-2"), 2533 ?IPRINT("start"), 2534 process_flag(trap_exit, true), 2535 otp8395(Conf, true, ok), 2536 ok. 2537 2538otp_8395_3(suite) -> []; 2539otp_8395_3(doc) -> 2540 "OTP-8395(3)"; 2541otp_8395_3(Conf) when is_list(Conf) -> 2542 put(tname, "OTP-8395-3"), 2543 ?IPRINT("start"), 2544 process_flag(trap_exit, true), 2545 otp8395(Conf, gurka, error), 2546 ok. 2547 2548otp8395(Conf, SeqNoVal, Expect) -> 2549 ConfDir = ?config(manager_conf_dir, Conf), 2550 DbDir = ?config(manager_db_dir, Conf), 2551 LogDir = ?config(manager_log_dir, Conf), 2552 StdMibDir = filename:join(code:priv_dir(snmp), "mibs") ++ "/", 2553 2554 write_manager_conf(ConfDir), 2555 2556 %% Third set of options (no versions): 2557 ?IPRINT("all options"), 2558 NetIfOpts = [{module, snmpm_net_if}, 2559 {verbosity, trace}, 2560 {options, [{recbuf, 30000}, 2561 {bind_to, false}, 2562 {no_reuse, false}]}], 2563 ServerOpts = [{timeout, 10000}, {verbosity, trace}], 2564 NoteStoreOpts = [{timeout, 20000}, {verbosity, trace}], 2565 ConfigOpts = [{dir, ConfDir}, {verbosity, trace}, {db_dir, DbDir}], 2566 Mibs = [join(StdMibDir, "SNMP-NOTIFICATION-MIB"), 2567 join(StdMibDir, "SNMP-USER-BASED-SM-MIB")], 2568 Prio = normal, 2569 ATL = [{type, read_write}, 2570 {dir, LogDir}, 2571 {size, {10,10240}}, 2572 {repair, true}, 2573 {seqno, SeqNoVal}], 2574 Vsns = [v1,v2,v3], 2575 Opts = [{config, ConfigOpts}, 2576 {net_if, NetIfOpts}, 2577 {server, ServerOpts}, 2578 {note_store, NoteStoreOpts}, 2579 {audit_trail_log, ATL}, 2580 {priority, Prio}, 2581 {mibs, Mibs}, 2582 {versions, Vsns}], 2583 2584 case config_start(Opts) of 2585 {ok, _Pid} when (Expect =:= ok) -> 2586 ?line ok = config_stop(), 2587 ok; 2588 {ok, _Pid} when (Expect =/= ok) -> 2589 config_stop(), 2590 exit({unexpected_started_config, SeqNoVal}); 2591 _Error when (Expect =/= ok) -> 2592 ok; 2593 Error when (Expect =:= ok) -> 2594 exit({unexpected_failed_starting_config, SeqNoVal, Error}) 2595 end, 2596 ?IPRINT("done"), 2597 ok. 2598 2599 2600otp_8395_4(suite) -> []; 2601otp_8395_4(doc) -> 2602 "OTP-8395(4)"; 2603otp_8395_4(Conf) when is_list(Conf) -> 2604 put(tname, "OTP-8395-4"), 2605 ?IPRINT("start"), 2606 process_flag(trap_exit, true), 2607 2608 snmp:print_version_info(), 2609 2610 ConfDir = ?config(manager_conf_dir, Conf), 2611 DbDir = ?config(manager_db_dir, Conf), 2612 LogDir = ?config(manager_log_dir, Conf), 2613 StdMibDir = filename:join(code:priv_dir(snmp), "mibs") ++ "/", 2614 2615 write_manager_conf(ConfDir), 2616 2617 %% Third set of options (no versions): 2618 ?IPRINT("all options"), 2619 NetIfOpts = [{module, snmpm_net_if}, 2620 {verbosity, trace}, 2621 {options, [{recbuf, 30000}, 2622 {bind_to, false}, 2623 {no_reuse, false}]}], 2624 ServerOpts = [{timeout, 10000}, {verbosity, trace}], 2625 NoteStoreOpts = [{timeout, 20000}, {verbosity, trace}], 2626 ConfigOpts = [{dir, ConfDir}, {verbosity, trace}, {db_dir, DbDir}], 2627 Mibs = [join(StdMibDir, "SNMP-NOTIFICATION-MIB"), 2628 join(StdMibDir, "SNMP-USER-BASED-SM-MIB")], 2629 Prio = normal, 2630 ATL = [{type, read_write}, 2631 {dir, LogDir}, 2632 {size, {10,10240}}, 2633 {repair, true}, 2634 {seqno, true}], 2635 Vsns = [v1,v2,v3], 2636 Opts = [{config, ConfigOpts}, 2637 {net_if, NetIfOpts}, 2638 {server, ServerOpts}, 2639 {note_store, NoteStoreOpts}, 2640 {audit_trail_log, ATL}, 2641 {priority, Prio}, 2642 {mibs, Mibs}, 2643 {versions, Vsns}], 2644 2645 ?line {ok, _Pid} = config_start(Opts), 2646 2647 Counter = otp_8395_4, 2648 Initial = 10, 2649 Increment = 2, 2650 Max = 20, 2651 2652 %% At this call the counter does *not* exist. The call creates 2653 %% it with the initial value! 2654 2655 Val1 = Initial, 2656 Val1 = otp8395_incr_counter(Counter, Initial, Increment, Max), 2657 2658 %% Now it exist, make sure another call does the expected increment 2659 2660 Val2 = Initial + Increment, 2661 Val2 = otp8395_incr_counter(Counter, Initial, Increment, Max), 2662 2663 ?line ok = config_stop(), 2664 2665 ?IPRINT("done"), 2666 ok. 2667 2668 2669otp8395_incr_counter(Counter, Initial, Increment, Max) -> 2670 snmpm_config:increment_counter(Counter, Initial, Increment, Max). 2671 2672 2673%%====================================================================== 2674%% Internal functions 2675%%====================================================================== 2676 2677config_start(Opts) -> 2678 (catch snmpm_config:start_link(Opts)). 2679 2680config_stop() -> 2681 (catch snmpm_config:stop()). 2682 2683config_ensure_not_running() -> 2684 ?ENSURE_NOT_RUNNING(snmpm_config, 2685 fun() -> snmpm_config:stop() end, 2686 1000). 2687 2688 2689%% ------ 2690 2691join(Dir, File) -> 2692 filename:join(Dir, File). 2693 2694 2695%% ------ 2696 2697write_manager_conf(Dir) -> 2698 Port = "5000", 2699 MMS = "484", 2700 EngineID = "\"mgrEngine\"", 2701 Str = lists:flatten( 2702 io_lib:format("%% Minimum manager config file\n" 2703 "{port, ~s}.\n" 2704 "{max_message_size, ~s}.\n" 2705 "{engine_id, ~s}.\n", 2706 [Port, MMS, EngineID])), 2707 write_manager_conf(Dir, Str). 2708 2709write_manager_conf(Dir, IP, Port, MMS, EngineID) -> 2710 Str = lists:flatten( 2711 io_lib:format("{address, ~s}.\n" 2712 "{port, ~s}.\n" 2713 "{max_message_size, ~s}.\n" 2714 "{engine_id, ~s}.\n", 2715 [IP, Port, MMS, EngineID])), 2716 write_manager_conf(Dir, Str). 2717 2718write_manager_conf(Dir, Str) -> 2719 write_conf_file(Dir, "manager.conf", Str). 2720 2721 2722write_users_conf(Dir, Users) -> 2723 F = fun({UserId, UserMod, UserData}) -> %% Old format 2724 lists:flatten( 2725 io_lib:format("{~s, ~s, ~s, ~s}.~n", 2726 [UserId, UserMod, UserData, "[]"])); 2727 ({UserId, UserMod, UserData, DefaultAgentConfig}) -> %% New format 2728 lists:flatten( 2729 io_lib:format("{~s, ~s, ~s, ~s}.~n", 2730 [UserId, UserMod, UserData, DefaultAgentConfig])) 2731 end, 2732 Str = lists:flatten([F(User) || User <- Users]), 2733 write_conf_file(Dir, "users.conf", Str). 2734 2735write_users_conf2(Dir, Str) -> 2736 write_conf_file(Dir, "users.conf", Str). 2737 2738 2739write_agents_conf(Dir, Agents) -> 2740 F = fun({UserId, 2741 TargetName, Comm, 2742 Ip, Port, EngineID, 2743 Timeout, MMS, 2744 Version, SecModel, SecName, SecLevel}) -> 2745 lists:flatten( 2746 io_lib:format("{~s, ~n" 2747 " ~s, ~s, ~n" 2748 " ~s, ~s, ~s, ~n" 2749 " ~s, ~s, ~n" 2750 " ~s, ~s, ~s, ~s}.~n", 2751 [UserId, 2752 TargetName, Comm, 2753 Ip, Port, EngineID, 2754 Timeout, MMS, 2755 Version, SecModel, SecName, SecLevel])) 2756 end, 2757 Str = lists:flatten([F(Agent) || Agent <- Agents]), 2758 write_conf_file(Dir, "agents.conf", Str). 2759 2760write_agents_conf2(Dir, Str) -> 2761 write_conf_file(Dir, "agents.conf", Str). 2762 2763 2764write_usm_conf(Dir, Usms) -> 2765 F = fun({EngineID, UserName, SecName, AuthP, AuthKey, PrivP, PrivKey}) -> 2766 lists:flatten( 2767 io_lib:format("{~s, ~s, ~s, ~n" 2768 " ~s, ~s, ~n" 2769 " ~s, ~s}.~n", 2770 [EngineID, UserName, SecName, 2771 AuthP, AuthKey, 2772 PrivP, PrivKey])); 2773 ({EngineID, UserName, AuthP, AuthKey, PrivP, PrivKey}) -> 2774 lists:flatten( 2775 io_lib:format("{~s, ~s, ~n" 2776 " ~s, ~s, ~n" 2777 " ~s, ~s}.~n", 2778 [EngineID, UserName, 2779 AuthP, AuthKey, 2780 PrivP, PrivKey])); 2781 (Usm) -> 2782 exit({invalid_usm, Usm}) 2783 end, 2784 Str = lists:flatten([F(Usm) || Usm <- Usms]), 2785 write_conf_file(Dir, "usm.conf", Str). 2786 2787write_usm_conf2(Dir, Str) -> 2788 write_conf_file(Dir, "usm.conf", Str). 2789 2790 2791write_conf_file(Dir, File, Str) -> 2792 case file:open(filename:join(Dir, File), write) of 2793 {ok, Fd} -> 2794 ?line ok = io:format(Fd, "~s", [Str]), 2795 file:close(Fd); 2796 {error, Reason} -> 2797 Info = 2798 [{dir, Dir, case (catch file:read_file_info(Dir)) of 2799 {ok, FI} -> 2800 FI; 2801 _ -> 2802 undefined 2803 end}, 2804 {file, File}], 2805 exit({failed_writing_conf_file, Info, Reason}) 2806 end. 2807 2808 2809maybe_start_crypto() -> 2810 case (catch crypto:version()) of 2811 {'EXIT', {undef, _}} -> 2812 %% This is the version of crypto before the NIFs... 2813 ?CRYPTO_START(); 2814 _ -> 2815 %% No need to start this version of crypto.. 2816 ok 2817 end. 2818 2819maybe_stop_crypto() -> 2820 case (catch crypto:version()) of 2821 {'EXIT', {undef, _}} -> 2822 %% This is the version of crypto before the NIFs... 2823 crypto:stop(); 2824 _ -> 2825 %% There is nothing to stop in this version of crypto.. 2826 ok 2827 end. 2828 2829 2830%% ------ 2831 2832verify_dir_existing(DirName, Dir) -> 2833 case file:read_file_info(Dir) of 2834 {ok, _} -> 2835 ok; 2836 {error, Reason} -> 2837 exit({non_existing_dir, DirName, Dir, Reason}) 2838 end. 2839 2840 2841%% ------ 2842 2843str(X) -> 2844 ?F("~w", [X]). 2845 2846