. * * @link https://www.librenms.org * * @copyright 2019 Tony Murray * @author Tony Murray */ namespace LibreNMS\Tests\Feature\SnmpTraps; use App\Models\BgpPeer; use App\Models\Device; use LibreNMS\Config; use LibreNMS\Snmptrap\Dispatcher; use LibreNMS\Snmptrap\Trap; class BgpTrapTest extends SnmpTrapTestCase { public function testBgpUp() { // Cache it to avoid DNS Lookup Config::set('astext.1', 'PHPUnit ASTEXT'); $device = Device::factory()->create(); /** @var Device $device */ $bgppeer = BgpPeer::factory()->make(['bgpPeerState' => 'idle', 'bgpPeerRemoteAs' => 1]); /** @var BgpPeer $bgppeer */ $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() { // Cache it to avoid DNS Lookup Config::set('astext.1', 'PHPUnit ASTEXT'); $device = Device::factory()->create(); /** @var Device $device */ $bgppeer = BgpPeer::factory()->make(['bgpPeerState' => 'established', 'bgpPeerRemoteAs' => 1]); /** @var BgpPeer $bgppeer */ $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'); } }