async.t
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:3k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #!./perl
  2. BEGIN {
  3.     unless(grep /blib/, @INC) {
  4.         chdir 't' if -d 't';
  5.         @INC = '../lib' if -d '../lib';
  6.     }
  7. }
  8. use Test;
  9. BEGIN {plan tests => 20}
  10. use SNMP;
  11. use vars qw($agent_port $comm $agent_host);
  12. if ($^O =~ /win32/i) {
  13.   warn "Win32 detected - skipping and failing async callsn";
  14.   for (my $i=1;$i <= 20; $i++) {
  15.     ok(0);
  16.   }
  17.   exit;
  18. }
  19. require "t/startagent.pl";
  20. sub cb1; # forward reference
  21. sub cb2;
  22. sub cb3;
  23. sub cb4;
  24. sub cb5;
  25. sub cb6;
  26. sub cb7;
  27. sub cbDummy;
  28. $SNMP::verbose = 0;
  29. $SNMP::dump_packet = 0;
  30. my $sess = new SNMP::Session(DestHost => $agent_host, 
  31.   Version => 1, 
  32.   Community => $comm, 
  33.   RemotePort => $agent_port);
  34. # try getting unregistered OID.
  35. my $result = $sess->get([["HooHaaHooHaa","0"]], [&cbDummy, $sess]);
  36. ok(!defined($result));
  37. # this get should work
  38. $result = $sess->get([["sysDescr","0"]], [&cb1, $sess]);
  39. ok($result);
  40. SNMP::MainLoop();
  41. sub cb1{
  42.     my $sess = shift;
  43.     my $vlist = shift;
  44.     ok(defined($vlist));
  45.     my $tag = $vlist->[0]->tag;
  46.     ok($tag eq 'sysDescr');
  47.     my $val = $vlist->[0]->val;
  48.     ok(defined $val);
  49.     my $iid = $vlist->[0]->iid;
  50.     my $type = $vlist->[0]->type;
  51.     ok($type eq 'OCTETSTR');
  52.     my $res = $sess->getnext([["sysDescr",0]], [&cb2, $sess]);
  53.     ok ($res);
  54. } # end of cb1
  55. sub cb2{
  56.     my $sess = shift;
  57.     my $vlist = shift;
  58.     ok(defined($vlist));
  59.     ok(ref($vlist->[0]) =~ /Varbind/);
  60.     ok($vlist->[0][0] eq 'sysObjectID');
  61.     my $res = $sess->get([[".1.3.6.1.2.1.1.1.0"]], [&cb3, $sess]);
  62.     ok($res);
  63. } # end of cb2
  64. sub cb3{
  65.     my $sess = shift;
  66.     my $vlist = shift;
  67.     ok(defined($vlist));
  68.     ok($vlist->[0][0] eq 'sysDescr');
  69.     my $res = $sess->getnext([["sysDescr",0]], [&cb4, $sess]);
  70.     ok($res);
  71. } # end of cb3
  72. sub cb4{
  73.     my $sess = shift;
  74.     my $vlist = shift;
  75.     ok(defined $vlist);
  76.     my $res = $sess->set("sysDescr.0", "hahaha", [&cb5, $sess]);
  77. } # end of cb4
  78. sub cb5{
  79.     my $sess = shift;
  80.     my $vlist = shift;
  81.     ok(defined($vlist));
  82.     my $res = $sess->set("sysORID.1", ".1.3.6.1.2.1.1.1", [&cb6, $sess]);
  83.     ok(defined $res);
  84. } # end of cb5
  85. sub cb6{
  86.     my $sess = shift;
  87.     my $vlist = shift;
  88.     my $tag = $vlist->[0]->tag;
  89.     my $val = $vlist->[0]->val;
  90.     ok($tag =~ /^sysORID/);
  91. # create list of varbinds for GETS, val field can be null or omitted
  92.     my $vars =
  93. new SNMP::VarList (
  94.    ['sysDescr', '0', ''],
  95.    ['sysObjectID', '0'],
  96.    ['sysUpTime', '0'],
  97.    ['sysContact', '0'],
  98.    ['sysName', '0'],
  99.    ['sysLocation', '0'],
  100.    ['sysServices', '0'],
  101.    ['ifNumber', '0'],
  102.    ['ifDescr', '1'],
  103.    ['ifSpeed', '1'],
  104.    ['snmpInPkts', '0'],
  105.    ['snmpInBadVersions', '0'],
  106.    ['snmpInBadCommunityNames', '0'],
  107.    ['snmpInBadCommunityUses', '0'],
  108.    ['snmpInASNParseErrs', '0'],
  109.    ['snmpEnableAuthenTraps', '0'],
  110.    ['sysORID', '1'],
  111.    ['sysORDescr', '1'],
  112.    ['sysORUpTime', '1'],
  113.    ['sysORLastChange', '0'],
  114.    ['ipInHdrErrors', '0'],
  115.    ['ipDefaultTTL', '0'],
  116.    ['ipInHdrErrors', '0'],
  117.    );
  118.     my $res = $sess->get($vars, [&cb7, $sess]);
  119.     ok(defined $res);
  120. } # end of cb6
  121. sub cb7{
  122.     my $sess = shift;
  123.     my $vlist = shift;
  124.     my $tag = $vlist->[0]->tag;
  125.     my $val = $vlist->[0]->val;
  126.     ok(@{$vlist} == 23);
  127.     snmptest_cleanup();
  128.     exit(0);
  129. } # end of cb7
  130. sub cbDummy {
  131.     warn("error: this should not get called");
  132. }