diff --git a/LibreNMS/Snmptrap/Dispatcher.php b/LibreNMS/Snmptrap/Dispatcher.php index b988f1c36b6b..2975b5f8ffde 100644 --- a/LibreNMS/Snmptrap/Dispatcher.php +++ b/LibreNMS/Snmptrap/Dispatcher.php @@ -51,7 +51,7 @@ public static function handle(Trap $trap) $fallback = $handler instanceof Fallback; $logging = Config::get('snmptraps.eventlog', 'unhandled'); if ($logging == 'all' || ($fallback && $logging == 'unhandled')) { - log_event("SNMP trap received: " . $trap->getTrapOid(), $trap->getDevice()->toArray(), 'trap'); + Log::event("SNMP trap received: " . $trap->getTrapOid(), $trap->getDevice(), 'trap'); } return !$fallback; diff --git a/app/Models/Eventlog.php b/app/Models/Eventlog.php index 9e77b508b017..e57d5e4d8d51 100644 --- a/app/Models/Eventlog.php +++ b/app/Models/Eventlog.php @@ -32,7 +32,7 @@ class Eventlog extends DeviceRelatedModel protected $table = 'eventlog'; protected $primaryKey = 'event_id'; public $timestamps = false; - protected $fillable = ['datetime', 'message', 'type', 'reference', 'username', 'severity']; + protected $fillable = ['datetime', 'device_id', 'message', 'type', 'reference', 'username', 'severity']; // ---- Helper Functions ---- diff --git a/tests/Feature/SnmpTraps/CommonTrapTest.php b/tests/Feature/SnmpTraps/CommonTrapTest.php index 5577ac1e0065..e13e5772cf0c 100644 --- a/tests/Feature/SnmpTraps/CommonTrapTest.php +++ b/tests/Feature/SnmpTraps/CommonTrapTest.php @@ -26,12 +26,12 @@ namespace LibreNMS\Tests; use App\Models\Device; +use App\Models\Eventlog; use App\Models\Ipv4Address; use App\Models\Port; use Illuminate\Foundation\Testing\DatabaseTransactions; use LibreNMS\Snmptrap\Dispatcher; use LibreNMS\Snmptrap\Trap; -use LibreNMS\Tests\Feature\SnmpTraps\TrapTestCase; use Log; class CommonTrapTest extends LaravelTestCase @@ -58,6 +58,13 @@ public function testFindByIp() UDP: [$ipv4->ipv4_address]:64610->[192.168.5.5]:162 DISMAN-EVENT-MIB::sysUpTimeInstance 198:2:10:48.91\n"; + Log::shouldReceive('info')->once()->with('Unhandled trap snmptrap', ['device' => $device->hostname, 'oid' => null]); + Log::shouldReceive('event')->once()->withArgs(function ($e_message, $e_device, $e_type) use ($device) { + return $e_message == 'SNMP trap received: ' && + $device->is($e_device) && + $e_type == 'trap'; + }); + $trap = new Trap($trapText); $this->assertFalse(Dispatcher::handle($trap), 'Found handler for trap with no snmpTrapOID'); @@ -65,6 +72,28 @@ public function testFindByIp() $this->assertEquals($device->hostname, $trap->getDevice()->hostname); } + public function testGenericTrap() + { + $device = factory(Device::class)->create(); + + $trapText = "$device->hostname +UDP: [$device->ip]:64610->[192.168.5.5]:162 +DISMAN-EVENT-MIB::sysUpTimeInstance 198:2:10:48.91 +SNMPv2-MIB::snmpTrapOID.0 SNMPv2-MIB::someOid\n"; + + $trap = new Trap($trapText); + $this->assertFalse(Dispatcher::handle($trap)); + + $this->assertEquals([ + 'device_id' => $device->device_id, + 'message' => 'SNMP trap received: SNMPv2-MIB::someOid', + 'type' => 'trap', + 'reference' => null, + 'username' => '', + 'severity' => 2, + ], Eventlog::orderBy('event_id', 'asc')->select(['device_id', 'message', 'type', 'reference', 'username', 'severity'])->first()->toArray()); + } + public function testAuthorization() { $device = factory(Device::class)->create();