. * * @package LibreNMS * @link http://librenms.org * @copyright 2019 Tony Murray * @author Tony Murray */ namespace LibreNMS\Tests\Feature\SnmpTraps; use App\Models\BgpPeer; use App\Models\Device; use Illuminate\Foundation\Testing\DatabaseTransactions; use LibreNMS\Snmptrap\Dispatcher; use LibreNMS\Snmptrap\Trap; use LibreNMS\Tests\DBTestCase; class BgpTrapTest extends SnmpTrapTestCase { public function testBgpUp() { $device = factory(Device::class)->create(); $bgppeer = factory(BgpPeer::class)->make(['bgpPeerState' => 'idle']); $device->bgppeers()->save($bgppeer); $trapText = "$device->hostname UDP: [$device->ip]:57602->[192.168.5.5]:162 DISMAN-EVENT-MIB::sysUpTimeInstance 302:12:56:24.81 SNMPv2-MIB::snmpTrapOID.0 BGP4-MIB::bgpEstablished BGP4-MIB::bgpPeerLastError.$bgppeer->bgpPeerIdentifier \"04 00 \" BGP4-MIB::bgpPeerState.$bgppeer->bgpPeerIdentifier established\n"; $message = "SNMP Trap: BGP Up $bgppeer->bgpPeerIdentifier " . get_astext($bgppeer->bgpPeerRemoteAs) . " is now established"; \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'bgpPeer', 1, $bgppeer->bgpPeerIdentifier); $trap = new Trap($trapText); $this->assertTrue(Dispatcher::handle($trap), 'Could not handle bgpEstablished'); $bgppeer = $bgppeer->fresh(); // refresh from database $this->assertEquals($bgppeer->bgpPeerState, 'established'); } public function testBgpDown() { $device = factory(Device::class)->create(); $bgppeer = factory(BgpPeer::class)->make(['bgpPeerState' => 'established']); $device->bgppeers()->save($bgppeer); $trapText = "$device->hostname UDP: [$device->ip]:57602->[185.29.68.52]:162 DISMAN-EVENT-MIB::sysUpTimeInstance 302:12:55:33.47 SNMPv2-MIB::snmpTrapOID.0 BGP4-MIB::bgpBackwardTransition BGP4-MIB::bgpPeerLastError.$bgppeer->bgpPeerIdentifier \"04 00 \" BGP4-MIB::bgpPeerState.$bgppeer->bgpPeerIdentifier idle\n"; $message = "SNMP Trap: BGP Down $bgppeer->bgpPeerIdentifier " . get_astext($bgppeer->bgpPeerRemoteAs) . " is now idle"; \Log::shouldReceive('event')->once()->with($message, $device->device_id, 'bgpPeer', 5, $bgppeer->bgpPeerIdentifier); $trap = new Trap($trapText); $this->assertTrue(Dispatcher::handle($trap), 'Could not handle bgpBackwardTransition'); $bgppeer = $bgppeer->fresh(); // refresh from database $this->assertEquals($bgppeer->bgpPeerState, 'idle'); } }