diff options
Diffstat (limited to 'testing/tests/T115agentxperl')
-rwxr-xr-x | testing/tests/T115agentxperl | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/testing/tests/T115agentxperl b/testing/tests/T115agentxperl new file mode 100755 index 0000000..9da24f6 --- /dev/null +++ b/testing/tests/T115agentxperl @@ -0,0 +1,133 @@ +#!/bin/sh + +. ../eval_tools.sh + +HEADER 'AgentX subagent in Perl (using NetSNMP::agent)' + +SKIPIF NETSNMP_DISABLE_SNMPV2C +SKIPIFNOT USING_AGENTX_MASTER_MODULE +SKIPIFNOT USING_AGENTX_SUBAGENT_MODULE +# make sure the toolkit has been configured --with-perl-modules +[ -d ${SNMP_UPDIR}/perl/blib/arch/auto/NetSNMP/agent ] || SKIP + +# +# Begin test +# + +snmp_version=v2c +TESTCOMMUNITY=testcommunity +. ./Sv2cconfig + +TESTOID=.1.3.6.1.4.1.8872.9999.9999.1.0 +TESTOID2=.1.3.6.1.4.1.8872.9999.9999.2.0 +AGENTX_SOCKET=${SNMP_TMPDIR}/agentx_socket +PERL_SUBAGENT=${SNMP_TMPDIR}/hello.pl +PERL_SUBAGENT_CONF=${SNMP_TMPDIR}/hello.conf + +cat >$PERL_SUBAGENT <<END +#!${SNMP_PERLPROG} +# minimal AgentX subagent in Perl + +use blib qw(${SNMP_UPDIR}/perl); +use NetSNMP::OID qw(:all); +use NetSNMP::agent qw(:all); +use NetSNMP::ASN qw(:all); +use NetSNMP::agent::default_store; +use NetSNMP::default_store qw(:all); +use SNMP; + +## double-fork daemon +my \$pid; +unless (\$pid = fork) { + unless (fork) { + ## start main code + my \$regat = '.1.3.6.1.4.1.8872.9999.9999'; # netSnmpPlayPen + my \$myoid = \$regat . ".1.0"; # the "hello world" OID + my \$myoid2 = \$regat . ".2.0"; # the "hello again world" OID + + my \$pidfile = shift; # take PID file as first argument + open(PIDFILE, ">\$pidfile") or die "Couldn't open \$pidfile"; + print PIDFILE \$\$; + close(PIDFILE); + +sub my_snmp_handler { + my (\$handler, \$registration_info, \$request_info, \$requests) = @_; + for(my \$request = \$requests; \$request; \$request = \$request->next()) { + if (\$request_info->getMode() == MODE_GET) { + if (\$request->getOID() == new NetSNMP::OID(\$myoid)) { + \$request->setValue(ASN_OCTET_STR, "hello world"); + last; + } elsif (\$request->getOID() == new NetSNMP::OID(\$myoid2)) { + \$request->setValue(ASN_OCTET_STR, "hello again world"); + last; + } + } + } +} +sub shut_it_down { \$running = 0; } + + netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, + NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1); + my \$agent = new NetSNMP::agent('Name' => 'hello', 'AgentX' => 1); + my \$regoid = new NetSNMP::OID(\$regat); + \$agent->register("hello", \$regoid, \&my_snmp_handler); + + \$SIG{'INT'} = \&shut_it_down; + \$SIG{'QUIT'} = \&shut_it_down; + \$running = 1; + while(\$running) { + \$agent->agent_check_and_process(1); + } + \$agent->shutdown(); + ## end main code + exit 0; + } + exit 0; +} +waitpid(\$pid, 0); +END + +echo "agentxsocket $AGENTX_SOCKET" > $PERL_SUBAGENT_CONF + +CONFIGAGENT master agentx +CONFIGAGENT agentxsocket $AGENTX_SOCKET + +STARTAGENT + +# make sure that we can fulfill all library dependencies +_ld_lib_path="${SNMP_UPDIR}/snmplib/.libs:${SNMP_UPDIR}/agent/.libs:${SNMP_UPDIR}/agent/helpers/.libs" +if [ "x$LD_LIBRARY_PATH" != "x" ]; then + LD_LIBRARY_PATH="${_ld_lib_path}:${LD_LIBRARY_PATH}" +else + LD_LIBRARY_PATH="${_ld_lib_path}" +fi +if [ "x$DYLD_LIBRARY_PATH" != "x" ]; then + DYLD_LIBRARY_PATH="${_ld_lib_path}:${DYLD_LIBRARY_PATH}" +else + DYLD_LIBRARY_PATH="${_ld_lib_path}" +fi +if [ "x$SHLIB_PATH" != "x" ]; then + SHLIB_PATH="${_ld_lib_path}:${SHLIB_PATH}" +else + SHLIB_PATH="${_ld_lib_path}" +fi +export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH + +# start perl subagent +/usr/bin/env SNMPCONFPATH="${SNMP_TMPDIR}${SNMP_ENV_SEPARATOR}${SNMP_TMP_PERSISTENTDIR}" $SNMP_PERLPROG $PERL_SUBAGENT $SNMP_AGENTX_PID_FILE >$SNMP_AGENTX_LOG_FILE 2>&1 +DELAY + +## 1) SNMP GET against mib object implemented by the perl subagent +CAPTURE "snmpget -$snmp_version -c $TESTCOMMUNITY $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT $TESTOID" +CHECK "hello world" + +## 2) persistency: reconfigure master agent (HUP), re-test +HUPAGENT +CAPTURE "snmpget -$snmp_version -c $TESTCOMMUNITY $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT $TESTOID2" +CHECK "hello again world" + +## stop +STOPAGENT +STOPPROG $SNMP_AGENTX_PID_FILE + +FINISHED |