#!/usr/bin/env bash # SNMP "smoketest" Basic snmpget test for a scalar # Magic line must be first in script (see README.md) s="$_" ; . ./lib.sh || if [ "$s" = $0 ]; then exit 0; else return 0; fi # Re-use main example backend state callbacks APPNAME=example if [ ${ENABLE_NETSNMP} != "yes" ]; then echo "Skipping test, Net-SNMP support not enabled." if [ "$s" = $0 ]; then exit 0; else return 0; fi fi snmpd=$(type -p snmpd) snmpget="$(type -p snmpget) -On -c public -v2c localhost " snmpgetnext="$(type -p snmpgetnext) -On -c public -v2c localhost " snmptable="$(type -p snmptable) -c public -v2c localhost " cfg=$dir/conf_startup.xml fyang=$dir/clixon-example.yang fstate=$dir/state.xml # AgentX unix socket SOCK=/var/run/snmp.sock # Relies on example_backend.so for $fstate file handling cat < $cfg $cfg ${YANG_INSTALLDIR} ${YANG_STANDARD_DIR} ${MIB_GENERATED_YANG_DIR} $fyang $dir/$APPNAME.sock /usr/local/lib/$APPNAME/backend /var/tmp/$APPNAME.pidfile $dir unix:$SOCK ENTITY-MIB EOF cat < $fyang module clixon-example{ yang-version 1.1; namespace "urn:example:clixon"; prefix ex; import ENTITY-MIB { prefix "entity-mib"; } } EOF # This is state data written to file that backend reads from (on request) # integer and string have values, sleeper does not and uses default (=1) cat < $fstate 1 Entity 1 9 123 ABCD1234 REV 099 REV 123 Clixon Version XXX.YYY year ZZZ 1234-1234-ABCD-ABCD Olof Hagsand Datakonsult AB Model AA.BB Alias 123 Asset 123 true 2 Entity 2 4 999 XXZZ11994 REV 100 REV 234 Clixon Version XXX.YYY year ZZZ 2345-2345-ABCD-ABCD Olof Hagsand Datakonsult AB Model CC.DD Alias 456 Asset 456 false EOF function testinit(){ new "test params: -f $cfg -- -sS $fstate" if [ $BE -ne 0 ]; then # Kill old backend and start a new one new "kill old backend" sudo clixon_backend -zf $cfg if [ $? -ne 0 ]; then err "Failed to start backend" fi sudo pkill -f clixon_backend new "Starting backend" start_backend -s init -f $cfg -- -sS $fstate fi new "wait backend" wait_backend if [ $CS -ne 0 ]; then # Kill old clixon_snmp, if any new "Terminating any old clixon_snmp processes" sudo killall -q clixon_snmp new "Starting clixon_snmp" start_snmp $cfg & fi new "wait snmp" wait_snmp } function testexit(){ stop_snmp } ENTITY_OID=".1.3.6.1.2.1.47.1.1.1" OID_INDEX_1="${ENTITY_OID}.1.1.1" OID_INDEX_2="${ENTITY_OID}.1.1.2" OID_DESCR_1="${ENTITY_OID}.1.2.1" OID_DESCR_2="${ENTITY_OID}.1.2.2" OID_CONTAINED_1="${ENTITY_OID}.1.4.1" OID_CONTAINED_2="${ENTITY_OID}.1.4.2" OID_PARENT_1="${ENTITY_OID}.1.6.1" OID_PARENT_2="${ENTITY_OID}.1.6.2" OID_NAME_1="${ENTITY_OID}.1.7.1" OID_NAME_2="${ENTITY_OID}.1.7.2" OID_HWREV_1="${ENTITY_OID}.1.8.1" OID_HWREV_2="${ENTITY_OID}.1.8.2" OID_FWREV_1="${ENTITY_OID}.1.9.1" OID_FWREV_2="${ENTITY_OID}.1.9.2" OID_SWREV_1="${ENTITY_OID}.1.10.1" OID_SWREV_2="${ENTITY_OID}.1.10.2" OID_SERIAL_1="${ENTITY_OID}.1.11.1" OID_SERIAL_2="${ENTITY_OID}.1.11.2" OID_MFGNAME_1="${ENTITY_OID}.1.12.1" OID_MFGNAME_2="${ENTITY_OID}.1.12.2" OID_MODEL_1="${ENTITY_OID}.1.13.1" OID_MODEL_2="${ENTITY_OID}.1.13.2" OID_ALIAS_1="${ENTITY_OID}.1.14.1" OID_ALIAS_2="${ENTITY_OID}.1.14.2" OID_ASSET_1="${ENTITY_OID}.1.15.1" OID_ASSET_2="${ENTITY_OID}.1.15.2" OID_FRU_1="${ENTITY_OID}.1.16.1" OID_FRU_2="${ENTITY_OID}.1.16.2" new "SNMP system tests" testinit new "Get index, $OID_INDEX_1" expectpart "$($snmpget $OID_INDEX_1)" 0 "$OID_INDEX_1 = INTEGER: 1" new "Get next $OID_INDEX_1" expectpart "$($snmpgetnext $OID_INDEX_1)" 0 "$OID_INDEX_2 = INTEGER: 2" new "Get index, $OID_INDEX_2" expectpart "$($snmpget $OID_INDEX_2)" 0 "$OID_INDEX_2 = INTEGER: 2" # XXX: Why do we get a hex string? new "Get next $OID_INDEX_2" expectpart "$($snmpgetnext $OID_INDEX_2)" 0 "$OID_DESCR_1 = STRING: \"Entity 1\"" new "Get index, $OID_DESCR_1" expectpart "$($snmpget $OID_DESCR_1)" 0 "$OID_DESCR_1 = STRING: \"Entity 1\"" new "Get next $OID_DESCR_1" expectpart "$($snmpgetnext $OID_DESCR_1)" 0 "$OID_DESCR_2 = STRING: \"Entity 2\"" new "Get index, $OID_DESCR_2" expectpart "$($snmpget $OID_DESCR_2)" 0 "$OID_DESCR_2 = STRING: \"Entity 2\"" new "Get next $OID_DESCR_2" expectpart "$($snmpgetnext $OID_DESCR_2)" 0 "$OID_CONTAINER_1 = INTEGER: 9" new "Get container, $OID_CONTAINED_1" expectpart "$($snmpget $OID_CONTAINED_1)" 0 "$OID_CONTAINED_1 = INTEGER: 9" new "Get next container, $OID_CONTAINED_1" expectpart "$($snmpgetnext $OID_CONTAINED_1)" 0 "$OID_CONTAINED_2 = INTEGER: 4" new "Get container, $OID_CONTAINED_2" expectpart "$($snmpget $OID_CONTAINED_2)" 0 "$OID_CONTAINED_2 = INTEGER: 4" new "Get next container, $OID_CONTAINED_2" expectpart "$($snmpgetnext $OID_CONTAINED_2)" 0 "$OID_PARENT_1 = INTEGER: 123" new "Get container, $OID_PARENT_1" expectpart "$($snmpget $OID_PARENT_1)" 0 "$OID_PARENT_1 = INTEGER: 123" new "Get next container, $OID_PARENT_1" expectpart "$($snmpgetnext $OID_PARENT_1)" 0 "$OID_PARENT_2 = INTEGER: 999" new "Get container, $OID_PARENT_2" expectpart "$($snmpget $OID_PARENT_2)" 0 "$OID_PARENT_2 = INTEGER: 999" new "Get next container, $OID_PARENT_2" expectpart "$($snmpgetnext $OID_PARENT_2)" 0 "$OID_NAME_1 = STRING: \"ABCD1234\"" new "Get name, $OID_NAME_1" expectpart "$($snmpget $OID_NAME_1)" 0 "$OID_NAME_1 = STRING: \"ABCD1234\"" new "Get next container, $OID_NAME_1" expectpart "$($snmpgetnext $OID_NAME_1)" 0 "$OID_NAME_2 = STRING: \"XXZZ11994\"" new "Get name, $OID_NAME_2" expectpart "$($snmpget $OID_NAME_2)" 0 "$OID_NAME_2 = STRING: \"XXZZ11994\"" new "Get next, $OID_NAME_2" expectpart "$($snmpgetnext $OID_NAME_2)" 0 "$OID_HWREV_1 = STRING: \"REV 099\"" new "Get rev, $OID_HWREV_1" expectpart "$($snmpget $OID_HWREV_1)" 0 "$OID_HWREV_1 = STRING: \"REV 099\"" new "Get next hw rev, $OID_HWREV_1" expectpart "$($snmpgetnext $OID_HWREV_1)" 0 "$OID_HWREV_2 = STRING: \"REV 100\"" new "Get hw rev, $OID_HWREV_2" expectpart "$($snmpget $OID_HWREV_2)" 0 "$OID_HWREV_2 = STRING: \"REV 100\"" new "Get next hw rev, $OID_HWREV_2" expectpart "$($snmpgetnext $OID_HWREV_2)" 0 "$OID_FWREV_1 = STRING: \"REV 123\"" new "Get fw rev, $OID_FWREV_1" expectpart "$($snmpget $OID_FWREV_1)" 0 "$OID_FWREV_1 = STRING: \"REV 123\"" new "Get next fw rev, $OID_FWREV_1" expectpart "$($snmpgetnext $OID_FWREV_1)" 0 "$OID_FWREV_2 = STRING: \"REV 234\"" new "Get fw rev, $OID_FWREV_2" expectpart "$($snmpget $OID_FWREV_2)" 0 "$OID_FWREV_2 = STRING: \"REV 234\"" new "Get next fw rev, $OID_FWREV_2" expectpart "$($snmpgetnext $OID_FWREV_2)" 0 "$OID_SWREV_1 = STRING: \"Clixon Version XXX.YYY year ZZZ\"" new "Get sw rev, $OID_SWREV_1" expectpart "$($snmpget $OID_SWREV_1)" 0 "$OID_SWREV_1 = STRING: \"Clixon Version XXX.YYY year ZZZ\"" new "Get next sw rev, $OID_SWREV_1" expectpart "$($snmpgetnext $OID_SWREV_1)" 0 "$OID_SWREV_2 = STRING: \"Clixon Version XXX.YYY year ZZZ\"" new "Get sw rev, $OID_SWREV_2" expectpart "$($snmpget $OID_SWREV_2)" 0 "$OID_SWREV_2 = STRING: \"Clixon Version XXX.YYY year ZZZ\"" new "Get next sw rev, $OID_SWREV_2" expectpart "$($snmpgetnext $OID_SWREV_2)" 0 "$OID_SERIAL_1 = STRING: \"1234-1234-ABCD-ABCD\"" new "Get serial, $OID_SERIAL_1" expectpart "$($snmpget $OID_SERIAL_1)" 0 "$OID_SERIAL_1 = STRING: \"1234-1234-ABCD-ABCD\"" new "Get next serial, $OID_SERIAL_1" expectpart "$($snmpgetnext $OID_SERIAL_1)" 0 "$OID_SERIAL_2 = STRING: \"2345-2345-ABCD-ABCD\"" new "Get serial, $OID_SERIAL_2" expectpart "$($snmpget $OID_SERIAL_2)" 0 "$OID_SERIAL_2 = STRING: \"2345-2345-ABCD-ABCD\"" new "Get next serial, $OID_SERIAL_2" expectpart "$($snmpgetnext $OID_SERIAL_2)" 0 "$OID_MFGNAME_1 = STRING: \"Olof Hagsand Datakonsult AB\"" new "Get manufacturer, $OID_MFGNAME_1" expectpart "$($snmpget $OID_MFGNAME_1)" 0 "$OID_MFGNAME_1 = STRING: \"Olof Hagsand Datakonsult AB\"" new "Get next manufacturer, $OID_MFGNAME_1" expectpart "$($snmpgetnext $OID_MFGNAME_1)" 0 "$OID_MFGNAME_2 = STRING: \"Olof Hagsand Datakonsult AB\"" new "Get manufacturer, $OID_MFGNAME_2" expectpart "$($snmpget $OID_MFGNAME_2)" 0 "$OID_MFGNAME_2 = STRING: \"Olof Hagsand Datakonsult AB\"" new "Get next manufacturer, $OID_MFGNAME_2" expectpart "$($snmpgetnext $OID_MFGNAME_2)" 0 "$OID_MODEL_1 = STRING: \"Model AA.BB\"" new "Get model, $OID_MODEL_1" expectpart "$($snmpget $OID_MODEL_1)" 0 "$OID_MODEL_1 = STRING: \"Model AA.BB\"" new "Get next model, $OID_MODEL_1" expectpart "$($snmpgetnext $OID_MODEL_1)" 0 "$OID_MODEL_2 = STRING: \"Model CC.DD\"" new "Get model, $OID_MODEL_2" expectpart "$($snmpget $OID_MODEL_2)" 0 "$OID_MODEL_2 = STRING: \"Model CC.DD\"" new "Get next model, $OID_MODEL_2" expectpart "$($snmpgetnext $OID_MODEL_2)" 0 "$OID_ALIAS_1 = STRING: \"Alias 123\"" new "Get alias, $OID_ALIAS_1" expectpart "$($snmpget $OID_ALIAS_1)" 0 "$OID_ALIAS_1 = STRING: \"Alias 123\"" new "Get next alias, $OID_ALIAS_1" expectpart "$($snmpgetnext $OID_ALIAS_1)" 0 "$OID_ALIAS_2 = STRING: \"Alias 456\"" new "Get alias, $OID_ALIAS_2" expectpart "$($snmpgetnext $OID_ALIAS_2)" 0 "$OID_ASSET_1 = STRING: \"Asset 123\"" new "Get next alias, $OID_ALIAS_2" expectpart "$($snmpgetnext $OID_ALIAS_2)" 0 "$OID_ASSET_1 = STRING: \"Asset 123\"" new "Get asset, $OID_ASSET_1" expectpart "$($snmpget $OID_ASSET_1)" 0 "$OID_ASSET_1 = STRING: \"ASSET 123\"" new "Get next asset, $OID_ASSET_1" expectpart "$($snmpgetnext $OID_ASSET_1)" 0 "$OID_ASSET_2 = STRING: \"Asset 456\"" new "Get asset, $OID_ASSET_2" expectpart "$($snmpget $OID_ASSET_2)" 0 "$OID_ASSET_2 = STRING: \"ASSET 456\"" new "Get next asset, $OID_ASSET_2" expectpart "$($snmpgetnext $OID_ASSET_2)" 0 "$OID_FRU_1 = INTEGER: 1" new "Get fru, $OID_FRU_1" expectpart "$($snmpget $OID_FRU_1)" 0 "$OID_FRU_1 = INTEGER: 1" new "Get next fru, $OID_FRU_1" expectpart "$($snmpgetnext $OID_FRU_1)" 0 "$OID_FRU_2 = INTEGER: 0" new "Get fru, $OID_FRU_2" expectpart "$($snmpget $OID_FRU_2)" 0 "$OID_FRU_12= INTEGER: 0" new "Get ENTITY-MIB::entPhysicalTable" expectpart "$($snmptable ENTITY-MIB::entPhysicalTable)" 0 "Entity 2" "REV 234" "Model CC.DD" "999" new "Cleaning up" # testexit new "endtest" endtest