diff --git a/LibreNMS/Snmptrap/Handlers/RuckusAssocTrap.php b/LibreNMS/Snmptrap/Handlers/RuckusAssocTrap.php new file mode 100644 index 0000000000..d1e01009bb --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusAssocTrap.php @@ -0,0 +1,52 @@ +. + * + * ruckusEventAssocTrap is sent when a client associated to the AP. + * Contains the clients MAC addr. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart getOidData($trap->findOid('RUCKUS-EVENT-MIB::ruckusEventClientMacAddr')); + $mac = substr($macRaw, 0, 17); + Log::event("Client $mac associated", $device->device_id, 'trap', 2); + } +} diff --git a/LibreNMS/Snmptrap/Handlers/RuckusDiassocTrap.php b/LibreNMS/Snmptrap/Handlers/RuckusDiassocTrap.php new file mode 100644 index 0000000000..4654421f99 --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusDiassocTrap.php @@ -0,0 +1,52 @@ +. + * + * ruckusEventDiassocTrap is sent when a client disassociates from the AP. + * Contains the clients MAC addr. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart getOidData($trap->findOid('RUCKUS-EVENT-MIB::ruckusEventClientMacAddr')); + $mac = substr($macRaw, 0, 17); + Log::event("Client $mac disassociated", $device->device_id, 'trap', 2); + } +} diff --git a/LibreNMS/Snmptrap/Handlers/RuckusSetError.php b/LibreNMS/Snmptrap/Handlers/RuckusSetError.php new file mode 100644 index 0000000000..617096e0eb --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusSetError.php @@ -0,0 +1,52 @@ +. + * + * ruckusEventSetErrorTrap is sent when there is error setting a + * value via SNMP. Contains the OID that is errored. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart + */ + +namespace LibreNMS\Snmptrap\Handlers; + +use App\Models\Device; +use LibreNMS\Interfaces\SnmptrapHandler; +use LibreNMS\Snmptrap\Trap; +use Log; + +class RuckusSetError implements SnmptrapHandler +{ + /** + * Handle snmptrap. + * Data is pre-parsed and delivered as a Trap. + * + * @param Device $device + * @param Trap $trap + * @return void + */ + public function handle(Device $device, Trap $trap) + { + $errorOidDirty = $trap->getOidData($trap->findOid('RUCKUS-EVENT-MIB::ruckusEventSetErrorOID')); + $errorOid = substr($errorOidDirty, 43); + Log::event("SNMP set error on oid $errorOid", $device->device_id, 'trap', 2); + } +} diff --git a/LibreNMS/Snmptrap/Handlers/RuckusSzApConf.php b/LibreNMS/Snmptrap/Handlers/RuckusSzApConf.php new file mode 100644 index 0000000000..579a5b5251 --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusSzApConf.php @@ -0,0 +1,55 @@ +. + * + * ruckusSZAPConfUpdatedTrap is sent when the SmartZone updates the + * configuration of an access point. Contains a configuration ID + * number string. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart + */ + +namespace LibreNMS\Snmptrap\Handlers; + +use App\Models\Device; +use LibreNMS\Interfaces\SnmptrapHandler; +use LibreNMS\Snmptrap\Trap; +use LibreNMS\Snmptrap\Handlers\RuckusSzSeverity; +use Log; + +class RuckusSzApConf implements SnmptrapHandler +{ + /** + * Handle snmptrap. + * Data is pre-parsed and delivered as a Trap. + * + * @param Device $device + * @param Trap $trap + * @return void + */ + public function handle(Device $device, Trap $trap) + { + $location = $trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPLocation')); + $configId = $trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZAPConfigID')); + $severity = RuckusSzSeverity::getSeverity($trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity'))); + Log::event("AP at location $location configuration updated with config-id $configId", $device->device_id, 'trap', $severity); + } +} diff --git a/LibreNMS/Snmptrap/Handlers/RuckusSzApConnect.php b/LibreNMS/Snmptrap/Handlers/RuckusSzApConnect.php new file mode 100644 index 0000000000..ecc47dbeef --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusSzApConnect.php @@ -0,0 +1,54 @@ +. + * + * Ruckus ruckusSZAPConnectedTrap is sent when an access point connects + * to a Smartzone controller. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart + */ + +namespace LibreNMS\Snmptrap\Handlers; + +use App\Models\Device; +use LibreNMS\Interfaces\SnmptrapHandler; +use LibreNMS\Snmptrap\Trap; +use LibreNMS\Snmptrap\Handlers\RuckusSzSeverity; +use Log; + +class RuckusSzApConnect implements SnmptrapHandler +{ + /** + * Handle snmptrap. + * Data is pre-parsed and delivered as a Trap. + * + * @param Device $device + * @param Trap $trap + * @return void + */ + public function handle(Device $device, Trap $trap) + { + $location = $trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPLocation')); + $reason = $trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventReason')); + $severity = RuckusSzSeverity::getSeverity($trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity'))); + Log::event("AP at location $location has connected to the SmartZone with reason $reason", $device->device_id, 'trap', $severity); + } +} diff --git a/LibreNMS/Snmptrap/Handlers/RuckusSzApMiscEvent.php b/LibreNMS/Snmptrap/Handlers/RuckusSzApMiscEvent.php new file mode 100644 index 0000000000..29a72eb3fd --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusSzApMiscEvent.php @@ -0,0 +1,53 @@ +. + * + * Ruckus ruckusSZAPMiscEventTrap occurs when the SmartZone receives + * an event from a connected access point. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart + */ + +namespace LibreNMS\Snmptrap\Handlers; + +use App\Models\Device; +use LibreNMS\Interfaces\SnmptrapHandler; +use LibreNMS\Snmptrap\Trap; +use LibreNMS\Snmptrap\Handlers\RuckusSzSeverity; +use Log; + +class RuckusSzApMiscEvent implements SnmptrapHandler +{ + /** + * Handle snmptrap. + * Data is pre-parsed and delivered as a Trap. + * + * @param Device $device + * @param Trap $trap + * @return void + */ + public function handle(Device $device, Trap $trap) + { + $severity = RuckusSzSeverity::getSeverity($trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity'))); + $eventDescr = $trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventDescription')); + Log::event("AP event: $eventDescr", $device->device_id, 'trap', $severity); + } +} diff --git a/LibreNMS/Snmptrap/Handlers/RuckusSzApReboot.php b/LibreNMS/Snmptrap/Handlers/RuckusSzApReboot.php new file mode 100644 index 0000000000..43cb123524 --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusSzApReboot.php @@ -0,0 +1,54 @@ +. + * + * Ruckus ruckusSZAPRebootTrap occurs when an access point connected + * to the SmartZone reboots. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart + */ + +namespace LibreNMS\Snmptrap\Handlers; + +use App\Models\Device; +use LibreNMS\Interfaces\SnmptrapHandler; +use LibreNMS\Snmptrap\Trap; +use LibreNMS\Snmptrap\Handlers\RuckusSzSeverity; +use Log; + +class RuckusSzApReboot implements SnmptrapHandler +{ + /** + * Handle snmptrap. + * Data is pre-parsed and delivered as a Trap. + * + * @param Device $device + * @param Trap $trap + * @return void + */ + public function handle(Device $device, Trap $trap) + { + $location = $trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPLocation')); + $reason = $trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventReason')); + $severity = RuckusSzSeverity::getSeverity($trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity'))); + Log::event("AP at site $location rebooted with reason $reason", $device->device_id, 'trap', $severity); + } +} diff --git a/LibreNMS/Snmptrap/Handlers/RuckusSzClusterInMaintenance.php b/LibreNMS/Snmptrap/Handlers/RuckusSzClusterInMaintenance.php new file mode 100644 index 0000000000..0f1bdb2620 --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusSzClusterInMaintenance.php @@ -0,0 +1,54 @@ +. + * + * Ruckus ruckusSZClusterInMaintenanceStateTrap is sent whtn a + * Virtual Smartzone cluster state changed to "in service" * + * + * Ruckus ruckusSZClusterInMaintenanceStateTrap is sent when the + * Smartzone Cluster enters a maintenance state. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart + */ + +namespace LibreNMS\Snmptrap\Handlers; + +use App\Models\Device; +use LibreNMS\Interfaces\SnmptrapHandler; +use LibreNMS\Snmptrap\Trap; +use Log; + +class RuckusSzClusterInMaintenance implements SnmptrapHandler +{ + /** + * Handle snmptrap. + * Data is pre-parsed and delivered as a Trap. + * + * @param Device $device + * @param Trap $trap + * @return void + */ + public function handle(Device $device, Trap $trap) + { + $clusterName = $trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZClusterName')); + Log::event("Smartzone cluster $clusterName state changed to maintenance", $device->device_id, 'trap', 3); + } +} diff --git a/LibreNMS/Snmptrap/Handlers/RuckusSzClusterInService.php b/LibreNMS/Snmptrap/Handlers/RuckusSzClusterInService.php new file mode 100644 index 0000000000..c02e7fb95b --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusSzClusterInService.php @@ -0,0 +1,51 @@ +. + * + * Ruckus ruckusSZClusterInServiceStateTrap is sent whtn a + * Virtual Smartzone cluster state changed to "in service" + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart + */ + +namespace LibreNMS\Snmptrap\Handlers; + +use App\Models\Device; +use LibreNMS\Interfaces\SnmptrapHandler; +use LibreNMS\Snmptrap\Trap; +use Log; + +class RuckusSzClusterInService implements SnmptrapHandler +{ + /** + * Handle snmptrap. + * Data is pre-parsed and delivered as a Trap. + * + * @param Device $device + * @param Trap $trap + * @return void + */ + public function handle(Device $device, Trap $trap) + { + $clusterName = $trap->getOidData($trap->findOid('RUCKUS-SZ-EVENT-MIB::ruckusSZClusterName')); + Log::event("Smartzone cluster $clusterName is now in service", $device->device_id, 'trap', 2); + } +} diff --git a/LibreNMS/Snmptrap/Handlers/RuckusSzSeverity.php b/LibreNMS/Snmptrap/Handlers/RuckusSzSeverity.php new file mode 100644 index 0000000000..12a7d154e4 --- /dev/null +++ b/LibreNMS/Snmptrap/Handlers/RuckusSzSeverity.php @@ -0,0 +1,57 @@ +. + * + * Sets the LibreNMS alert level based on ruckusSZEventSeverity in the + * trap. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 KanREN, Inc. + * @author Heath Barnhart + */ + +namespace LibreNMS\Snmptrap\Handlers; + +class RuckusSzSeverity +{ + public static function getSeverity($severity) + { + switch ($severity) { + case 'Critical': + $severityNum = 5; + break; + case 'Major': + $severityNum = 4; + break; + case 'Minor': + $severityNum = 4; + break; + case 'Warning': + $severityNum = 3; + break; + case 'Informational': + $severityNum = 2; + break; + default: + $severityNum = 2; + break; + } + return $severityNum; + } +} diff --git a/config/snmptraps.php b/config/snmptraps.php index 24f55c09e4..a3f9fc756c 100644 --- a/config/snmptraps.php +++ b/config/snmptraps.php @@ -59,6 +59,15 @@ return [ 'PowerNet-MIB::outletOff' => \LibreNMS\Snmptrap\Handlers\ApcPduOutletOff::class, 'PowerNet-MIB::outletOn' => \LibreNMS\Snmptrap\Handlers\ApcPduOutletOn::class, 'PowerNet-MIB::outletReboot' => \LibreNMS\Snmptrap\Handlers\ApcPduOutletReboot::class, + 'RUCKUS-EVENT-MIB::ruckusEventAssocTrap' => \LibreNMS\Snmptrap\Handlers\RuckusAssocTrap::class, + 'RUCKUS-EVENT-MIB::ruckusEventDiassocTrap' => \LibreNMS\Snmptrap\Handlers\RuckusDiassocTrap::class, + 'RUCKUS-EVENT-MIB::ruckusEventSetErrorTrap' => \LibreNMS\Snmptrap\Handlers\RuckusSetError::class, + 'RUCKUS-SZ-EVENT-MIB::ruckusSZAPMiscEventTrap' => \LibreNMS\Snmptrap\Handlers\RuckusSzApMiscEvent::class, + 'RUCKUS-SZ-EVENT-MIB::ruckusSZAPConfUpdatedTrap' => \LibreNMS\Snmptrap\Handlers\RuckusSzApConf::class, + 'RUCKUS-SZ-EVENT-MIB::ruckusSZAPRebootTrap' => \LibreNMS\Snmptrap\Handlers\RuckusSzApReboot::class, + 'RUCKUS-SZ-EVENT-MIB::ruckusSZAPConnectedTrap' => \LibreNMS\Snmptrap\Handlers\RuckusSzApConnect::class, + 'RUCKUS-SZ-EVENT-MIB::ruckusSZClusterInMaintenanceStateTrap' => \LibreNMS\Snmptrap\Handlers\RuckusSzClusterInMaintenance::class, + 'RUCKUS-SZ-EVENT-MIB::ruckusSZClusterBackToInServiceTrap' => \LibreNMS\Snmptrap\Handlers\RuckusSzClusterInService::class, 'SNMPv2-MIB::authenticationFailure' => \LibreNMS\Snmptrap\Handlers\AuthenticationFailure::class, 'SNMPv2-MIB::coldStart' => \LibreNMS\Snmptrap\Handlers\ColdBoot::class, ] diff --git a/tests/Feature/SnmpTraps/RuckusEventTest.php b/tests/Feature/SnmpTraps/RuckusEventTest.php new file mode 100644 index 0000000000..5901518c0d --- /dev/null +++ b/tests/Feature/SnmpTraps/RuckusEventTest.php @@ -0,0 +1,90 @@ +. + * + * Tests generic Ruckus Wireless event trap handlers. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 Heath Barnhart + * @author Heath Barnhart + */ + +namespace LibreNMS\Tests\Feature\SnmpTraps; + +use App\Models\Device; +use LibreNMS\Snmptrap\Dispatcher; +use LibreNMS\Snmptrap\Trap; +use LibreNMS\Tests\LaravelTestCase; + +class RuckusEventTrap extends LaravelTestCase +{ + public function testRuckusAssocTrap() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:57602->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 26:19:43:37.24 +SNMPv2-MIB::snmpTrapOID.0 RUCKUS-EVENT-MIB::ruckusEventAssocTrap +RUCKUS-EVENT-MIB::ruckusEventClientMacAddr \"de:ad:be:ef:11:221.0.5.1.1.1.2.2\""; + + $trap = new Trap($trapText); + + $message = "Client de:ad:be:ef:11:22 associated"; + \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'trap', 2); + + $this->assertTrue(Dispatcher::handle($trap), 'Could not handle ruckusEventAssocTrap'); + } + + public function testRuckusDiassocTrap() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:57602->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 26:19:43:37.24 +SNMPv2-MIB::snmpTrapOID.0 RUCKUS-EVENT-MIB::ruckusEventDiassocTrap +RUCKUS-EVENT-MIB::ruckusEventClientMacAddr \"de:ad:be:ef:33:441.0.5.1.1.1.2.2\""; + + $trap = new Trap($trapText); + + $message = "Client de:ad:be:ef:33:44 disassociated"; + \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'trap', 2); + + $this->assertTrue(Dispatcher::handle($trap), 'Could not handle ruckusEventDiassocTrap'); + } + + public function testRuckusSetErrorTrap() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:57602->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 26:19:43:37.24 +SNMPv2-MIB::snmpTrapOID.0 RUCKUS-EVENT-MIB::ruckusEventSetErrorTrap +RUCKUS-EVENT-MIB::ruckusEventSetErrorOID Wrong Type (should be OBJECT IDENTIFIER): \"1.3.6.1.2.1.25.1.1.0.5.1.1.1.2.2\""; + + $trap = new Trap($trapText); + + $message = "SNMP set error on oid 1.3.6.1.2.1.25.1.1.0.5.1.1.1.2.2"; + \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'trap', 2); + + $this->assertTrue(Dispatcher::handle($trap), 'Could not handle ruckusEventSetErrorTrap'); + } +} diff --git a/tests/Feature/SnmpTraps/RuckusSzClusterStateTest.php b/tests/Feature/SnmpTraps/RuckusSzClusterStateTest.php new file mode 100644 index 0000000000..f9168c1565 --- /dev/null +++ b/tests/Feature/SnmpTraps/RuckusSzClusterStateTest.php @@ -0,0 +1,78 @@ +. + * + * Tests Ruckus Wireless SmartZone cluster state trap handlers.. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 Heath Barnhart + * @author Heath Barnhart + */ + +namespace LibreNMS\Tests\Feature\SnmpTraps; + +use App\Models\Device; +use LibreNMS\Snmptrap\Dispatcher; +use LibreNMS\Snmptrap\Trap; +use LibreNMS\Tests\LaravelTestCase; + +class RuckusSzClusterStateTest extends LaravelTestCase +{ + public function testClusterInMaintenance() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:57602->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 26:19:43:37.24 +SNMPv2-MIB::snmpTrapOID.0 RUCKUS-SZ-EVENT-MIB::ruckusSZClusterInMaintenanceStateTrap +RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity.0 \"Critical\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventCode.0 \"807\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventType.0 \"clusterInMaintenanceState\" +RUCKUS-SZ-EVENT-MIB::ruckusSZClusterName.0 \"$device->hostname\""; + + $trap = new Trap($trapText); + + $message = "Smartzone cluster $device->hostname state changed to maintenance"; + \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'trap', 3); + + $this->assertTrue(Dispatcher::handle($trap), 'Could not handle ruckusSZClusterInMaintenanceStateTrap'); + } + + public function testClusterInService() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:57602->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 26:19:43:37.24 +SNMPv2-MIB::snmpTrapOID.0 RUCKUS-SZ-EVENT-MIB::ruckusSZClusterBackToInServiceTrap +RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity.0 \"Informational\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventCode.0 \"808\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventType.0 \"clusterBackToInService\" +RUCKUS-SZ-EVENT-MIB::ruckusSZClusterName.0 \"$device->hostname\""; + + $trap = new Trap($trapText); + + $message = "Smartzone cluster $device->hostname is now in service"; + \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'trap', 2); + + $this->assertTrue(Dispatcher::handle($trap), 'Could not handle ruckusSZClusterBackToInServiceTrap'); + } +} diff --git a/tests/Feature/SnmpTraps/RuckusSzEventTest.php b/tests/Feature/SnmpTraps/RuckusSzEventTest.php new file mode 100644 index 0000000000..2d993a90e6 --- /dev/null +++ b/tests/Feature/SnmpTraps/RuckusSzEventTest.php @@ -0,0 +1,140 @@ +. + * + * Tests Ruckus Wireless SmartZone Event trap handlers. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2019 Heath Barnhart + * @author Heath Barnhart + */ + +namespace LibreNMS\Tests\Feature\SnmpTraps; + +use App\Models\Device; +use LibreNMS\Snmptrap\Dispatcher; +use LibreNMS\Snmptrap\Trap; +use LibreNMS\Tests\LaravelTestCase; + +class RuckusSzEventTest extends LaravelTestCase +{ + public function testSzApConf() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:57602->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 26:19:43:37.24 +SNMPv2-MIB::snmpTrapOID.0 RUCKUS-SZ-EVENT-MIB::ruckusSZAPConfUpdatedTrap +RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity.0 \"Informational\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventCode.0 \"110\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventType.0 \"apConfUpdated\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPName.0 \"$device->hostname\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPMacAddr.0 \"de:ad:be:ef:33:40\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPIP.0 \"$device->ip\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPLocation.0 \"$device->location\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPDescription.0 \"$device->sysDescr\" +RUCKUS-SZ-EVENT-MIB::ruckusSZAPConfigID.0 \"2f860f70-6b88-11e9-a3c5-000000937916\""; + + $trap = new Trap($trapText); + + $message = "AP at location $device->location configuration updated with config-id 2f860f70-6b88-11e9-a3c5-000000937916"; + \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'trap', 2); + + $this->assertTrue(Dispatcher::handle($trap), 'Could not handle ruckusSZAPConfUpdatedTrap'); + } + + public function testSzApConnect() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:57602->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 26:19:43:37.24 +SNMPv2-MIB::snmpTrapOID.0 RUCKUS-SZ-EVENT-MIB::ruckusSZAPConnectedTrap +RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity.0 \"Informational\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventCode.0 \"312\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventType.0 \"apConnected\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPName.0 \"$device->hostname\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPMacAddr.0 \"de:ad:be:ef:33:40\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPIP.0 \"$device->ip\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPLocation.0 \"$device->location\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPDescription.0 \"$device->sysDescr\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventReason.0 \"AP connected after rebooting\""; + + $trap = new Trap($trapText); + + $message = "AP at location $device->location has connected to the SmartZone with reason AP connected after rebooting"; + \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'trap', 2); + + $this->assertTrue(Dispatcher::handle($trap), 'Could not handle ruckusSZAPConnectedTrap'); + } + + public function testSzApMiscEvent() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:57602->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 26:19:43:37.24 +SNMPv2-MIB::snmpTrapOID.0 RUCKUS-SZ-EVENT-MIB::ruckusSZAPMiscEventTrap +RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity.0 \"Minor\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventCode.0 \"322\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventType.0 \"apWLANStateChanged\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPName.0 \"$device->hostname\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPMacAddr.0 \"de:ad:be:ef:33:40\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPIP.0 \"$device->ip\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPLocation.0 \"$device->location\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPDescription.0 \"$device->sysDescr\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventDescription.0 \"Test AP event has occured\""; + + $trap = new Trap($trapText); + + $message = "AP event: Test AP event has occured"; + \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'trap', 4); + + $this->assertTrue(Dispatcher::handle($trap), 'Could not handle ruckusSZAPMiscEventTrap'); + } + + public function testSzApRebooted() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:57602->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 26:19:43:37.24 +SNMPv2-MIB::snmpTrapOID.0 RUCKUS-SZ-EVENT-MIB::ruckusSZAPRebootTrap +RUCKUS-SZ-EVENT-MIB::ruckusSZEventSeverity.0 \"Critical\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventCode.0 \"301\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventType.0 \"apRebootByUser\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPName.0 \"$device->hostname\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPMacAddr.0 \"de:ad:be:ef:33:40\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPIP.0 \"$device->ip\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPLocation.0 \"$device->location\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventAPDescription.0 \"$device->sysDescr\" +RUCKUS-SZ-EVENT-MIB::ruckusSZEventReason.0 \"AP rebooted by controller user\""; + + $trap = new Trap($trapText); + + $message = "AP at site $device->location rebooted with reason AP rebooted by controller user"; + \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'trap', 5); + + $this->assertTrue(Dispatcher::handle($trap), 'Could not handle ruckusSZAPRebootTrap'); + } +}