summaryrefslogtreecommitdiff
path: root/testing/tests/T115agentxperl
diff options
context:
space:
mode:
Diffstat (limited to 'testing/tests/T115agentxperl')
-rwxr-xr-xtesting/tests/T115agentxperl133
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