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