From bf96d11df3bbff8f3906c5b0d66f53fbb781e521 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Thu, 14 Mar 2019 22:13:01 -0500 Subject: [PATCH 1/3] Fix device missing from traps/new Log::event() --- app/Models/Eventlog.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ---- From 2386c61624bf3a2297a6859df9a2866d2438f491 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 15 Mar 2019 00:55:10 -0500 Subject: [PATCH 2/3] working on tests --- LibreNMS/Snmptrap/Dispatcher.php | 2 +- tests/Feature/SnmpTraps/CommonTrapTest.php | 26 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) 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/tests/Feature/SnmpTraps/CommonTrapTest.php b/tests/Feature/SnmpTraps/CommonTrapTest.php index 5577ac1e0065..9cd91adb2b00 100644 --- a/tests/Feature/SnmpTraps/CommonTrapTest.php +++ b/tests/Feature/SnmpTraps/CommonTrapTest.php @@ -26,6 +26,7 @@ namespace LibreNMS\Tests; use App\Models\Device; +use App\Models\Eventlog; use App\Models\Ipv4Address; use App\Models\Port; use Illuminate\Foundation\Testing\DatabaseTransactions; @@ -58,6 +59,9 @@ 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()->with("SNMP trap received: ", $device, 'trap'); + $trap = new Trap($trapText); $this->assertFalse(Dispatcher::handle($trap), 'Found handler for trap with no snmpTrapOID'); @@ -65,6 +69,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(); From 502a53687cc0a99ccf38b51ff7868c3d1d1bc318 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 15 Mar 2019 20:11:38 -0500 Subject: [PATCH 3/3] tests working --- tests/Feature/SnmpTraps/CommonTrapTest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/Feature/SnmpTraps/CommonTrapTest.php b/tests/Feature/SnmpTraps/CommonTrapTest.php index 9cd91adb2b00..e13e5772cf0c 100644 --- a/tests/Feature/SnmpTraps/CommonTrapTest.php +++ b/tests/Feature/SnmpTraps/CommonTrapTest.php @@ -32,7 +32,6 @@ 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 @@ -60,7 +59,11 @@ public function testFindByIp() 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()->with("SNMP trap received: ", $device, 'trap'); + 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');