* Reorganize trap tests * Testing db DRIVER to prevent .env from interfering * New code to detect if Laravel is booted. Hopefully more reliable. * WIP external test process * revert module test helper * Use .env in Eloquent::boot() * Fix test database settings loading * fix undefined classes (didn't find the one I needed) * Fix incorrect Config usages And RrdDefinition return type * fix .env loading * use the right DB * slightly more accurate isConnected * Move db_name to DBSetupTest specifically * restore $_SERVER in AuthSSOTest * missed item * WIP * tear down in the correct order. * some testing cleanups * remove check for duplicate event listener, it's not working right * Don't need this change anymore * Implement Log::event to replace legacy function log_event() * fix port tests * fix up tests * remove pointless TrapTestCase class * fix style * Fix db config not being merged... * skip env check for tests * defer database operations until after Laravel is booted. * don't include dbFaciale... * redundant use
This commit is contained in:
parent
17b5d7f0a3
commit
cb005210d2
|
@ -26,9 +26,9 @@
|
||||||
namespace LibreNMS\Authentication;
|
namespace LibreNMS\Authentication;
|
||||||
|
|
||||||
use LibreNMS\Config;
|
use LibreNMS\Config;
|
||||||
use LibreNMS\Util\IP;
|
|
||||||
use LibreNMS\Exceptions\AuthenticationException;
|
use LibreNMS\Exceptions\AuthenticationException;
|
||||||
use LibreNMS\Exceptions\InvalidIpException;
|
use LibreNMS\Exceptions\InvalidIpException;
|
||||||
|
use LibreNMS\Util\IP;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some functionality in this mechanism is inspired by confluence_http_authenticator (@chauth) and graylog-plugin-auth-sso (@Graylog)
|
* Some functionality in this mechanism is inspired by confluence_http_authenticator (@chauth) and graylog-plugin-auth-sso (@Graylog)
|
||||||
|
|
|
@ -533,19 +533,14 @@ class Config
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for testing database
|
// Check for testing database
|
||||||
if (getenv('DBTEST')) {
|
if (isset($config['test_db_name'])) {
|
||||||
if (isset($config['test_db_name'])) {
|
putenv('DB_TEST_DATABASE=' . $config['test_db_name']);
|
||||||
putenv('DB_DATABASE=' . $config['test_db_name']);
|
}
|
||||||
$config['db_name'] = $config['test_db_name'];
|
if (isset($config['test_db_user'])) {
|
||||||
}
|
putenv('DB_TEST_USERNAME=' . $config['test_db_user']);
|
||||||
if (isset($config['test_db_user'])) {
|
}
|
||||||
putenv('DB_USERNAME=' . $config['test_db_user']);
|
if (isset($config['test_db_pass'])) {
|
||||||
$config['db_user'] = $config['test_db_user'];
|
putenv('DB_TEST_PASSWORD=' . $config['test_db_pass']);
|
||||||
}
|
|
||||||
if (isset($config['test_db_pass'])) {
|
|
||||||
putenv('DB_PASSWORD=' . $config['test_db_pass']);
|
|
||||||
$config['db_pass'] = $config['test_db_pass'];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_intersect_key($config, $keys); // return only the db settings
|
return array_intersect_key($config, $keys); // return only the db settings
|
||||||
|
|
|
@ -25,22 +25,25 @@
|
||||||
|
|
||||||
namespace LibreNMS\DB;
|
namespace LibreNMS\DB;
|
||||||
|
|
||||||
|
use Dotenv\Dotenv;
|
||||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||||
use Illuminate\Database\Events\StatementPrepared;
|
use Illuminate\Database\Events\StatementPrepared;
|
||||||
use Illuminate\Events\Dispatcher;
|
use Illuminate\Events\Dispatcher;
|
||||||
|
use LibreNMS\Util\Laravel;
|
||||||
|
|
||||||
class Eloquent
|
class Eloquent
|
||||||
{
|
{
|
||||||
/** @var Capsule static reference to capsule */
|
/** @var Capsule static reference to capsule */
|
||||||
private static $capsule;
|
private static $capsule;
|
||||||
private static $legacy_listener_installed = false;
|
|
||||||
|
|
||||||
public static function boot($options = [])
|
public static function boot($options = [])
|
||||||
{
|
{
|
||||||
// boot Eloquent outside of Laravel
|
// boot Eloquent outside of Laravel
|
||||||
if (!defined('LARAVEL_START') && class_exists(Capsule::class) && is_null(self::$capsule)) {
|
if (!Laravel::isBooted() && is_null(self::$capsule)) {
|
||||||
$install_dir = realpath(__DIR__ . '/../../');
|
$install_dir = realpath(__DIR__ . '/../../');
|
||||||
|
|
||||||
|
(new Dotenv($install_dir))->load();
|
||||||
|
|
||||||
$db_config = include($install_dir . '/config/database.php');
|
$db_config = include($install_dir . '/config/database.php');
|
||||||
$settings = $db_config['connections'][$db_config['default']];
|
$settings = $db_config['connections'][$db_config['default']];
|
||||||
|
|
||||||
|
@ -75,7 +78,7 @@ class Eloquent
|
||||||
|
|
||||||
public static function initLegacyListeners()
|
public static function initLegacyListeners()
|
||||||
{
|
{
|
||||||
if (self::isConnected() && !self::$legacy_listener_installed) {
|
if (self::isConnected()) {
|
||||||
// set FETCH_ASSOC for queries that required by setting the global variable $PDO_FETCH_ASSOC (for dbFacile)
|
// set FETCH_ASSOC for queries that required by setting the global variable $PDO_FETCH_ASSOC (for dbFacile)
|
||||||
self::DB()->getEventDispatcher()->listen(StatementPrepared::class, function ($event) {
|
self::DB()->getEventDispatcher()->listen(StatementPrepared::class, function ($event) {
|
||||||
global $PDO_FETCH_ASSOC;
|
global $PDO_FETCH_ASSOC;
|
||||||
|
@ -83,7 +86,6 @@ class Eloquent
|
||||||
$event->statement->setFetchMode(\PDO::FETCH_ASSOC);
|
$event->statement->setFetchMode(\PDO::FETCH_ASSOC);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
self::$legacy_listener_installed = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,8 +109,7 @@ class Eloquent
|
||||||
try {
|
try {
|
||||||
$conn = self::DB();
|
$conn = self::DB();
|
||||||
if ($conn) {
|
if ($conn) {
|
||||||
$conn->getPdo();
|
return !is_null($conn->getPdo());
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
} catch (\PDOException $e) {
|
} catch (\PDOException $e) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -125,7 +126,7 @@ class Eloquent
|
||||||
public static function DB()
|
public static function DB()
|
||||||
{
|
{
|
||||||
// check if Laravel is booted
|
// check if Laravel is booted
|
||||||
if (defined('LARAVEL_START') && class_exists('DB')) {
|
if (Laravel::isBooted()) {
|
||||||
return \DB::connection();
|
return \DB::connection();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ class RrdDefinition
|
||||||
* @param int $min Minimum allowed value. null means undefined.
|
* @param int $min Minimum allowed value. null means undefined.
|
||||||
* @param int $max Maximum allowed value. null means undefined.
|
* @param int $max Maximum allowed value. null means undefined.
|
||||||
* @param int $heartbeat Heartbeat for this dataset. Uses the global setting if null.
|
* @param int $heartbeat Heartbeat for this dataset. Uses the global setting if null.
|
||||||
* @return $this
|
* @return RrdDefinition
|
||||||
*/
|
*/
|
||||||
public function addDataset($name, $type, $min = null, $max = null, $heartbeat = null)
|
public function addDataset($name, $type, $min = null, $max = null, $heartbeat = null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,10 +28,10 @@ namespace LibreNMS\Snmptrap\Handlers;
|
||||||
use App\Models\Device;
|
use App\Models\Device;
|
||||||
use LibreNMS\Interfaces\SnmptrapHandler;
|
use LibreNMS\Interfaces\SnmptrapHandler;
|
||||||
use LibreNMS\Snmptrap\Trap;
|
use LibreNMS\Snmptrap\Trap;
|
||||||
|
use Log;
|
||||||
|
|
||||||
class AuthenticationFailure implements SnmptrapHandler
|
class AuthenticationFailure implements SnmptrapHandler
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle snmptrap.
|
* Handle snmptrap.
|
||||||
* Data is pre-parsed and delivered as a Trap.
|
* Data is pre-parsed and delivered as a Trap.
|
||||||
|
@ -42,8 +42,6 @@ class AuthenticationFailure implements SnmptrapHandler
|
||||||
*/
|
*/
|
||||||
public function handle(Device $device, Trap $trap)
|
public function handle(Device $device, Trap $trap)
|
||||||
{
|
{
|
||||||
//FIXME added device hostname format helper in some branch, use that when merged
|
Log::event('SNMP Trap: Authentication Failure: ' . $device->displayName(), $device->device_id, 'auth', 3);
|
||||||
$device_array = $device->toArray();
|
|
||||||
log_event('SNMP Trap: Authentication Failure: ' . format_hostname($device_array), $device_array, 'auth', 3, $device->hostname);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ class BgpBackwardTransition implements SnmptrapHandler
|
||||||
$bgpPeer->bgpPeerState = $trap->getOidData($state_oid);
|
$bgpPeer->bgpPeerState = $trap->getOidData($state_oid);
|
||||||
|
|
||||||
if ($bgpPeer->isDirty('bgpPeerState')) {
|
if ($bgpPeer->isDirty('bgpPeerState')) {
|
||||||
log_event('SNMP Trap: BGP Down ' . $bgpPeer->bgpPeerIdentifier . ' ' . get_astext($bgpPeer->bgpPeerRemoteAs) . ' is now ' . $bgpPeer->bgpPeerState, $device->toArray(), 'bgpPeer', 5, $bgpPeerIp);
|
\Log::event('SNMP Trap: BGP Down ' . $bgpPeer->bgpPeerIdentifier . ' ' . get_astext($bgpPeer->bgpPeerRemoteAs) . ' is now ' . $bgpPeer->bgpPeerState, $device->device_id, 'bgpPeer', 5, $bgpPeerIp);
|
||||||
}
|
}
|
||||||
|
|
||||||
$bgpPeer->save();
|
$bgpPeer->save();
|
||||||
|
|
|
@ -55,7 +55,7 @@ class BgpEstablished implements SnmptrapHandler
|
||||||
$bgpPeer->bgpPeerState = $trap->getOidData($state_oid);
|
$bgpPeer->bgpPeerState = $trap->getOidData($state_oid);
|
||||||
|
|
||||||
if ($bgpPeer->isDirty('bgpPeerState')) {
|
if ($bgpPeer->isDirty('bgpPeerState')) {
|
||||||
log_event('SNMP Trap: BGP Up ' . $bgpPeer->bgpPeerIdentifier . ' ' . get_astext($bgpPeer->bgpPeerRemoteAs) . ' is now ' . $bgpPeer->bgpPeerState, $device->toArray(), 'bgpPeer', 1, $bgpPeerIp);
|
Log::event('SNMP Trap: BGP Up ' . $bgpPeer->bgpPeerIdentifier . ' ' . get_astext($bgpPeer->bgpPeerRemoteAs) . ' is now ' . $bgpPeer->bgpPeerState, $device->device_id, 'bgpPeer', 1, $bgpPeerIp);
|
||||||
}
|
}
|
||||||
|
|
||||||
$bgpPeer->save();
|
$bgpPeer->save();
|
||||||
|
|
|
@ -28,10 +28,10 @@ namespace LibreNMS\Snmptrap\Handlers;
|
||||||
use App\Models\Device;
|
use App\Models\Device;
|
||||||
use LibreNMS\Interfaces\SnmptrapHandler;
|
use LibreNMS\Interfaces\SnmptrapHandler;
|
||||||
use LibreNMS\Snmptrap\Trap;
|
use LibreNMS\Snmptrap\Trap;
|
||||||
|
use Log;
|
||||||
|
|
||||||
class EquipStatusTrap implements SnmptrapHandler
|
class EquipStatusTrap implements SnmptrapHandler
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle snmptrap.
|
* Handle snmptrap.
|
||||||
* Data is pre-parsed and delivered as a Trap.
|
* Data is pre-parsed and delivered as a Trap.
|
||||||
|
@ -45,7 +45,7 @@ class EquipStatusTrap implements SnmptrapHandler
|
||||||
$state = $trap->getOidData('EQUIPMENT-MIB::equipStatus.0');
|
$state = $trap->getOidData('EQUIPMENT-MIB::equipStatus.0');
|
||||||
|
|
||||||
$severity = $this->getSeverity($state);
|
$severity = $this->getSeverity($state);
|
||||||
log_event('SNMP Trap: Equipment Status ' . $state, $device->toArray(), 'state', $severity);
|
Log::event('SNMP Trap: Equipment Status ' . $state, $device->device_id, 'state', $severity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getSeverity($state)
|
private function getSeverity($state)
|
||||||
|
|
|
@ -54,16 +54,14 @@ class LinkDown implements SnmptrapHandler
|
||||||
$port->ifOperStatus = $trap->getOidData("IF-MIB::ifOperStatus.$ifIndex");
|
$port->ifOperStatus = $trap->getOidData("IF-MIB::ifOperStatus.$ifIndex");
|
||||||
$port->ifAdminStatus = $trap->getOidData("IF-MIB::ifAdminStatus.$ifIndex");
|
$port->ifAdminStatus = $trap->getOidData("IF-MIB::ifAdminStatus.$ifIndex");
|
||||||
|
|
||||||
$device_array = $device->toArray();
|
Log::event("SNMP Trap: linkDown $port->ifAdminStatus/$port->ifOperStatus " . $port->ifDescr, $device->device_id, 'interface', 5, $port->port_id);
|
||||||
|
|
||||||
log_event("SNMP Trap: linkDown $port->ifAdminStatus/$port->ifOperStatus " . $port->ifDescr, $device_array, 'interface', 5, $port->port_id);
|
|
||||||
|
|
||||||
if ($port->isDirty('ifAdminStatus')) {
|
if ($port->isDirty('ifAdminStatus')) {
|
||||||
log_event("Interface Disabled : " . $port['ifDescr'] . " (TRAP)", $device_array, "interface", 3, $port['port_id']);
|
Log::event("Interface Disabled : $port->ifDescr (TRAP)", $device->device_id, "interface", 3, $port->port_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($port->isDirty('ifOperStatus')) {
|
if ($port->isDirty('ifOperStatus')) {
|
||||||
log_event("Interface went Down : " . $port['ifDescr'] . " (TRAP)", $device_array, "interface", 5, $port['port_id']);
|
Log::event("Interface went Down : $port->ifDescr (TRAP)", $device->device_id, "interface", 5, $port->port_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
$port->save();
|
$port->save();
|
||||||
|
|
|
@ -55,16 +55,14 @@ class LinkUp implements SnmptrapHandler
|
||||||
$port->ifOperStatus = $trap->getOidData("IF-MIB::ifAdminStatus.$ifIndex");
|
$port->ifOperStatus = $trap->getOidData("IF-MIB::ifAdminStatus.$ifIndex");
|
||||||
$port->ifAdminStatus = $trap->getOidData("IF-MIB::ifOperStatus.$ifIndex");
|
$port->ifAdminStatus = $trap->getOidData("IF-MIB::ifOperStatus.$ifIndex");
|
||||||
|
|
||||||
$device_array = $device->toArray();
|
Log::event("SNMP Trap: linkUp $port->ifAdminStatus/$port->ifOperStatus " . $port->ifDescr, $device->device_id, "interface", 1, $port->port_id);
|
||||||
|
|
||||||
log_event("SNMP Trap: linkUp $port->ifAdminStatus/$port->ifOperStatus " . $port->ifDescr, $device_array, "interface", 1, $port->port_id);
|
|
||||||
|
|
||||||
if ($port->isDirty('ifAdminStatus')) {
|
if ($port->isDirty('ifAdminStatus')) {
|
||||||
log_event("Interface Enabled : $port->ifDescr (TRAP)", $device_array, "interface", 3, $port->port_id);
|
Log::event("Interface Enabled : $port->ifDescr (TRAP)", $device->device_id, "interface", 3, $port->port_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($port->isDirty('ifOperStatus')) {
|
if ($port->isDirty('ifOperStatus')) {
|
||||||
log_event("Interface went Up : $port->ifDescr (TRAP)", $device_array, "interface", 1, $port->port_id);
|
Log::event("Interface went Up : $port->ifDescr (TRAP)", $device->device_id, "interface", 1, $port->port_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
$port->save();
|
$port->save();
|
||||||
|
|
|
@ -28,6 +28,7 @@ namespace LibreNMS\Snmptrap\Handlers;
|
||||||
use App\Models\Device;
|
use App\Models\Device;
|
||||||
use LibreNMS\Interfaces\SnmptrapHandler;
|
use LibreNMS\Interfaces\SnmptrapHandler;
|
||||||
use LibreNMS\Snmptrap\Trap;
|
use LibreNMS\Snmptrap\Trap;
|
||||||
|
use Log;
|
||||||
|
|
||||||
class LogTrap implements SnmptrapHandler
|
class LogTrap implements SnmptrapHandler
|
||||||
{
|
{
|
||||||
|
@ -52,7 +53,7 @@ class LogTrap implements SnmptrapHandler
|
||||||
$state = $trap->getOidData('LOG-MIB::logEquipStatusV2.'.$index);
|
$state = $trap->getOidData('LOG-MIB::logEquipStatusV2.'.$index);
|
||||||
|
|
||||||
$severity = $this->getSeverity($state);
|
$severity = $this->getSeverity($state);
|
||||||
log_event('SNMP Trap: Log '.$logName.' '.$logEvent.' '.$logPC.' '.$logAI.' '.$state, $device->toArray(), 'log', $severity);
|
Log::event('SNMP Trap: Log '.$logName.' '.$logEvent.' '.$logPC.' '.$logAI.' '.$state, $device->device_id, 'log', $severity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getSeverity($state)
|
private function getSeverity($state)
|
||||||
|
|
|
@ -49,7 +49,6 @@ class UpsmgUtilityFailure implements SnmptrapHandler
|
||||||
}
|
}
|
||||||
$sensor->sensor_current = 1;
|
$sensor->sensor_current = 1;
|
||||||
$sensor->save();
|
$sensor->save();
|
||||||
$device_array = $device->toArray();
|
Log::event("UPS power failed, state sensor " . $sensor->sensor_descr . " has changed to ".$sensor->sensor_current . ".", $device->device_id, "Power", 5);
|
||||||
log_event("UPS power failed, state sensor " . $sensor->sensor_descr . " has changed to ".$sensor->sensor_current . ".", $device_array, "Power", 5);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,6 @@ class UpsmgUtilityRestored implements SnmptrapHandler
|
||||||
}
|
}
|
||||||
$sensor->sensor_current = 2;
|
$sensor->sensor_current = 2;
|
||||||
$sensor->save();
|
$sensor->save();
|
||||||
$device_array = $device->toArray();
|
Log::event("UPS power restored, state sensor " . $sensor->sensor_descr . " has changed to ".$sensor->sensor_current . ".", $device->device_id, "Power", 1);
|
||||||
log_event("UPS power restored, state sensor " . $sensor->sensor_descr . " has changed to ".$sensor->sensor_current . ".", $device_array, "Power", 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@ namespace LibreNMS\Util;
|
||||||
|
|
||||||
use App;
|
use App;
|
||||||
use Illuminate\Database\Events\QueryExecuted;
|
use Illuminate\Database\Events\QueryExecuted;
|
||||||
use LibreNMS\Config;
|
|
||||||
use LibreNMS\DB\Eloquent;
|
use LibreNMS\DB\Eloquent;
|
||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
|
@ -36,7 +35,7 @@ class Laravel
|
||||||
public static function bootCli()
|
public static function bootCli()
|
||||||
{
|
{
|
||||||
// make sure Laravel isn't already booted
|
// make sure Laravel isn't already booted
|
||||||
if (class_exists('App') && App::isBooted()) {
|
if (self::isBooted()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +46,11 @@ class Laravel
|
||||||
$kernel->bootstrap();
|
$kernel->bootstrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function isBooted()
|
||||||
|
{
|
||||||
|
return !empty(app()->isAlias('Illuminate\Foundation\Application')) && app()->isBooted();
|
||||||
|
}
|
||||||
|
|
||||||
public static function enableQueryDebug()
|
public static function enableQueryDebug()
|
||||||
{
|
{
|
||||||
$db = Eloquent::DB();
|
$db = Eloquent::DB();
|
||||||
|
@ -62,7 +66,7 @@ class Laravel
|
||||||
return $item;
|
return $item;
|
||||||
})->toJson();
|
})->toJson();
|
||||||
|
|
||||||
if (class_exists('Log')) {
|
if (self::isBooted()) {
|
||||||
Log::debug("SQL[%Y{$query->sql} %y$bindings%n {$query->time}ms] \n", ['color' => true]);
|
Log::debug("SQL[%Y{$query->sql} %y$bindings%n {$query->time}ms] \n", ['color' => true]);
|
||||||
} else {
|
} else {
|
||||||
c_echo("SQL[%Y{$query->sql} %y$bindings%n {$query->time}ms] \n");
|
c_echo("SQL[%Y{$query->sql} %y$bindings%n {$query->time}ms] \n");
|
||||||
|
@ -83,14 +87,14 @@ class Laravel
|
||||||
|
|
||||||
public static function enableCliDebugOutput()
|
public static function enableCliDebugOutput()
|
||||||
{
|
{
|
||||||
if (class_exists('\Log') && App::runningInConsole()) {
|
if (self::isBooted() && App::runningInConsole()) {
|
||||||
Log::setDefaultDriver('console');
|
Log::setDefaultDriver('console');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function disableCliDebugOutput()
|
public static function disableCliDebugOutput()
|
||||||
{
|
{
|
||||||
if (class_exists('Log')) {
|
if (self::isBooted()) {
|
||||||
Log::setDefaultDriver('logfile');
|
Log::setDefaultDriver('logfile');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Log.php
|
||||||
|
*
|
||||||
|
* Extending the built in logging to add an event logger function
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* @package LibreNMS
|
||||||
|
* @link http://librenms.org
|
||||||
|
* @copyright 2019 Tony Murray
|
||||||
|
* @author Tony Murray <murraytony@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Facades;
|
||||||
|
|
||||||
|
use Auth;
|
||||||
|
|
||||||
|
class LogManager extends \Illuminate\Log\LogManager
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Log events to the event table
|
||||||
|
*
|
||||||
|
* @param string $text message describing the event
|
||||||
|
* @param \App\Models\Device|int $device device array or device_id
|
||||||
|
* @param string $type brief category for this event. Examples: sensor, state, stp, system, temperature, interface
|
||||||
|
* @param int $severity 1: ok, 2: info, 3: notice, 4: warning, 5: critical, 0: unknown
|
||||||
|
* @param int $reference the id of the referenced entity. Supported types: interface
|
||||||
|
*/
|
||||||
|
public function event($text, $device = null, $type = null, $severity = 2, $reference = null)
|
||||||
|
{
|
||||||
|
(new \App\Models\Eventlog([
|
||||||
|
'device_id' => $device instanceof \App\Models\Device ? $device->device_id : $device,
|
||||||
|
'reference' => $reference,
|
||||||
|
'type' => $type,
|
||||||
|
'datetime' => \Carbon\Carbon::now(),
|
||||||
|
'severity' => $severity,
|
||||||
|
'message' => $text,
|
||||||
|
'username' => Auth::user() ? Auth::user()->username : '',
|
||||||
|
]))->save();
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,7 +26,7 @@
|
||||||
namespace App\Http\Controllers\Ajax;
|
namespace App\Http\Controllers\Ajax;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Config;
|
use \LibreNMS\Config;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||||
use Symfony\Component\Process\Process;
|
use Symfony\Component\Process\Process;
|
||||||
|
|
|
@ -2,15 +2,12 @@
|
||||||
|
|
||||||
namespace App\Listeners;
|
namespace App\Listeners;
|
||||||
|
|
||||||
use App\Checks;
|
|
||||||
use App\Events\Event;
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use DB;
|
use DB;
|
||||||
use Illuminate\Auth\Events\Login;
|
use Illuminate\Auth\Events\Login;
|
||||||
use Illuminate\Auth\Events\Logout;
|
use Illuminate\Auth\Events\Logout;
|
||||||
use LibreNMS\Authentication\LegacyAuth;
|
use LibreNMS\Authentication\LegacyAuth;
|
||||||
use Request;
|
use Request;
|
||||||
use Session;
|
|
||||||
use Toastr;
|
use Toastr;
|
||||||
|
|
||||||
class AuthEventListener
|
class AuthEventListener
|
||||||
|
|
|
@ -25,9 +25,7 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use App\Util;
|
|
||||||
use DB;
|
use DB;
|
||||||
use Settings;
|
|
||||||
|
|
||||||
class DeviceGroup extends BaseModel
|
class DeviceGroup extends BaseModel
|
||||||
{
|
{
|
||||||
|
@ -116,7 +114,7 @@ class DeviceGroup extends BaseModel
|
||||||
return $pattern;
|
return $pattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Settings::get('alert.macros.group', []) as $macro => $value) {
|
foreach (\LibreNMS\Config::get('alert.macros.group', []) as $macro => $value) {
|
||||||
$value = str_replace(['%', '&&', '||'], ['', 'AND', 'OR'], $value); // this might need something more complex
|
$value = str_replace(['%', '&&', '||'], ['', 'AND', 'OR'], $value); // this might need something more complex
|
||||||
if (!str_contains($macro, ' ')) {
|
if (!str_contains($macro, ' ')) {
|
||||||
$pattern = str_replace('macros.'.$macro, '('.$value.')', $pattern);
|
$pattern = str_replace('macros.'.$macro, '('.$value.')', $pattern);
|
||||||
|
@ -258,14 +256,14 @@ class DeviceGroup extends BaseModel
|
||||||
*
|
*
|
||||||
* @param array|string $params
|
* @param array|string $params
|
||||||
*/
|
*/
|
||||||
public function setParamsAttribute($params)
|
// public function setParamsAttribute($params)
|
||||||
{
|
// {
|
||||||
if (!Util::isJson($params)) {
|
// if (!Util::isJson($params)) {
|
||||||
$params = json_encode($params);
|
// $params = json_encode($params);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
$this->attributes['params'] = $params;
|
// $this->attributes['params'] = $params;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the stored pattern is v1
|
* Check if the stored pattern is v1
|
||||||
|
|
|
@ -6,16 +6,11 @@ use Illuminate\Database\Eloquent\Relations\Relation;
|
||||||
use Illuminate\Support\Facades\Blade;
|
use Illuminate\Support\Facades\Blade;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
use Illuminate\Validation\Rule;
|
|
||||||
use LibreNMS\Config;
|
use LibreNMS\Config;
|
||||||
use LibreNMS\Exceptions\DatabaseConnectException;
|
|
||||||
use LibreNMS\Util\IP;
|
use LibreNMS\Util\IP;
|
||||||
use LibreNMS\Util\Validate;
|
use LibreNMS\Util\Validate;
|
||||||
use Request;
|
|
||||||
use Validator;
|
use Validator;
|
||||||
|
|
||||||
include_once __DIR__ . '/../../includes/dbFacile.php';
|
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -25,11 +20,8 @@ class AppServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
// Install legacy dbFacile fetch mode listener
|
$this->app->booted('\LibreNMS\DB\Eloquent::initLegacyListeners');
|
||||||
\LibreNMS\DB\Eloquent::initLegacyListeners();
|
$this->app->booted('\LibreNMS\Config::load');
|
||||||
|
|
||||||
// load config
|
|
||||||
Config::load();
|
|
||||||
|
|
||||||
$this->bootCustomBladeDirectives();
|
$this->bootCustomBladeDirectives();
|
||||||
$this->bootCustomValidators();
|
$this->bootCustomValidators();
|
||||||
|
@ -43,6 +35,7 @@ class AppServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function register()
|
public function register()
|
||||||
{
|
{
|
||||||
|
$this->registerFacades();
|
||||||
$this->registerGeocoder();
|
$this->registerGeocoder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,6 +62,14 @@ class AppServiceProvider extends ServiceProvider
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function registerFacades()
|
||||||
|
{
|
||||||
|
// replace log manager so we can add the event function
|
||||||
|
$this->app->bind('log', function ($app) {
|
||||||
|
return new \App\Facades\LogManager($app);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private function registerGeocoder()
|
private function registerGeocoder()
|
||||||
{
|
{
|
||||||
$this->app->alias(\LibreNMS\Interfaces\Geocoder::class, 'geocoder');
|
$this->app->alias(\LibreNMS\Interfaces\Geocoder::class, 'geocoder');
|
||||||
|
|
|
@ -25,7 +25,7 @@ return [
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'default' => env('DB_CONNECTION', 'mysql'),
|
'default' => env('DB_CONNECTION', env('DBTEST') ? 'testing' : 'mysql'),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -68,6 +68,21 @@ return [
|
||||||
'engine' => null,
|
'engine' => null,
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'testing' => [
|
||||||
|
'driver' => env('DB_TEST_DRIVER', 'mysql'),
|
||||||
|
'host' => env('DB_TEST_HOST', 'localhost'),
|
||||||
|
'port' => env('DB_TEST_PORT', ''),
|
||||||
|
'database' => env('DB_TEST_DATABASE', 'librenms_phpunit_78hunjuybybh'),
|
||||||
|
'username' => env('DB_TEST_USERNAME', 'root'),
|
||||||
|
'password' => env('DB_TEST_PASSWORD', ''),
|
||||||
|
'unix_socket' => env('DB_TEST_SOCKET', ''),
|
||||||
|
'charset' => 'utf8',
|
||||||
|
'collation' => 'utf8_unicode_ci',
|
||||||
|
'prefix' => '',
|
||||||
|
'strict' => true,
|
||||||
|
'engine' => null,
|
||||||
|
],
|
||||||
|
|
||||||
'pgsql' => [
|
'pgsql' => [
|
||||||
'driver' => 'pgsql',
|
'driver' => 'pgsql',
|
||||||
'host' => env('DB_HOST', '127.0.0.1'),
|
'host' => env('DB_HOST', '127.0.0.1'),
|
||||||
|
|
|
@ -53,6 +53,7 @@ $factory->define(\App\Models\Port::class, function (Faker\Generator $faker) {
|
||||||
return [
|
return [
|
||||||
'ifIndex' => $faker->unique()->numberBetween(),
|
'ifIndex' => $faker->unique()->numberBetween(),
|
||||||
'ifName' => $faker->text(20),
|
'ifName' => $faker->text(20),
|
||||||
|
'ifDescr' => $faker->text(255),
|
||||||
'ifLastChange' => $faker->unixTime(),
|
'ifLastChange' => $faker->unixTime(),
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
|
@ -22,6 +22,7 @@ use LibreNMS\Exceptions\InvalidIpException;
|
||||||
use LibreNMS\Util\Git;
|
use LibreNMS\Util\Git;
|
||||||
use LibreNMS\Util\Html;
|
use LibreNMS\Util\Html;
|
||||||
use LibreNMS\Util\IP;
|
use LibreNMS\Util\IP;
|
||||||
|
use LibreNMS\Util\Laravel;
|
||||||
|
|
||||||
function generate_priority_label($priority)
|
function generate_priority_label($priority)
|
||||||
{
|
{
|
||||||
|
@ -663,7 +664,7 @@ if (!function_exists('d_echo')) {
|
||||||
{
|
{
|
||||||
global $debug;
|
global $debug;
|
||||||
|
|
||||||
if (class_exists('\Log')) {
|
if (Laravel::isBooted()) {
|
||||||
\Log::debug(is_string($text) ? rtrim($text) : $text);
|
\Log::debug(is_string($text) ? rtrim($text) : $text);
|
||||||
} elseif ($debug) {
|
} elseif ($debug) {
|
||||||
print_r($text);
|
print_r($text);
|
||||||
|
|
|
@ -21,6 +21,7 @@ use Illuminate\Database\QueryException;
|
||||||
use LibreNMS\Config;
|
use LibreNMS\Config;
|
||||||
use LibreNMS\Exceptions\DatabaseConnectException;
|
use LibreNMS\Exceptions\DatabaseConnectException;
|
||||||
use LibreNMS\DB\Eloquent;
|
use LibreNMS\DB\Eloquent;
|
||||||
|
use LibreNMS\Util\Laravel;
|
||||||
|
|
||||||
function dbIsConnected()
|
function dbIsConnected()
|
||||||
{
|
{
|
||||||
|
@ -463,11 +464,9 @@ function dbHandleException(QueryException $exception)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($exception->getTrace() as $trace) {
|
$message .= $exception->getTraceAsString();
|
||||||
$message .= "\n " . $trace['file'] . ':' . $trace['line'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (class_exists('Log')) {
|
if (Laravel::isBooted()) {
|
||||||
Log::error($message);
|
Log::error($message);
|
||||||
} else {
|
} else {
|
||||||
c_echo("%rSQL Error!%n ");
|
c_echo("%rSQL Error!%n ");
|
||||||
|
|
|
@ -998,7 +998,7 @@ function send_mail($emails, $subject, $message, $html = false)
|
||||||
}
|
}
|
||||||
$mail->send();
|
$mail->send();
|
||||||
return true;
|
return true;
|
||||||
} catch (phpmailerException $e) {
|
} catch (\PHPMailer\PHPMailer\Exception $e) {
|
||||||
return $e->errorMessage();
|
return $e->errorMessage();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
return $e->getMessage();
|
return $e->getMessage();
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
* @author Tony Murray <murraytony@gmail.com>
|
* @author Tony Murray <murraytony@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use LibreNMS\Util\Laravel;
|
||||||
|
|
||||||
if (!function_exists('d_echo')) {
|
if (!function_exists('d_echo')) {
|
||||||
/**
|
/**
|
||||||
* Legacy convenience function - please use this instead of 'if ($debug) { echo ...; }'
|
* Legacy convenience function - please use this instead of 'if ($debug) { echo ...; }'
|
||||||
|
@ -35,7 +37,7 @@ if (!function_exists('d_echo')) {
|
||||||
{
|
{
|
||||||
global $debug;
|
global $debug;
|
||||||
|
|
||||||
if (class_exists('\Log')) {
|
if (Laravel::isBooted()) {
|
||||||
\Log::debug(is_string($text) ? rtrim($text) : $text);
|
\Log::debug(is_string($text) ? rtrim($text) : $text);
|
||||||
} elseif ($debug) {
|
} elseif ($debug) {
|
||||||
print_r($text);
|
print_r($text);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use LibreNMS\Config;
|
||||||
use LibreNMS\RRD\RrdDefinition;
|
use LibreNMS\RRD\RrdDefinition;
|
||||||
|
|
||||||
$ipmi_rows = dbFetchRows("SELECT * FROM sensors WHERE device_id = ? AND poller_type='ipmi'", array($device['device_id']));
|
$ipmi_rows = dbFetchRows("SELECT * FROM sensors WHERE device_id = ? AND poller_type='ipmi'", array($device['device_id']));
|
||||||
|
|
|
@ -39,5 +39,6 @@
|
||||||
<env name="MAIL_DRIVER" value="array"/>
|
<env name="MAIL_DRIVER" value="array"/>
|
||||||
<env name="QUEUE_CONNECTION" value="sync"/>
|
<env name="QUEUE_CONNECTION" value="sync"/>
|
||||||
<env name="SESSION_DRIVER" value="array"/>
|
<env name="SESSION_DRIVER" value="array"/>
|
||||||
|
<env name="DB_CONNECTION" value="testing"/>
|
||||||
</php>
|
</php>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
|
|
@ -148,7 +148,7 @@
|
||||||
locationId = $btn.data('id');
|
locationId = $btn.data('id');
|
||||||
|
|
||||||
if (locationMap === null) {
|
if (locationMap === null) {
|
||||||
config = {"tile_url": "{{ Config::get('leaflet.tile_url', '{s}.tile.openstreetmap.org') }}"};
|
config = {"tile_url": "{{ \LibreNMS\Config::get('leaflet.tile_url', '{s}.tile.openstreetmap.org') }}"};
|
||||||
locationMap = init_map('location-edit-map', '{{ $maps_engine }}', '{{ $maps_api }}', config);
|
locationMap = init_map('location-edit-map', '{{ $maps_engine }}', '{{ $maps_api }}', config);
|
||||||
locationMarker = init_map_marker(locationMap, location);
|
locationMarker = init_map_marker(locationMap, location);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,11 +19,11 @@
|
||||||
rowCount: ['{{ $limit }}', 25,50,100,250,-1],
|
rowCount: ['{{ $limit }}', 25,50,100,250,-1],
|
||||||
formatters: {
|
formatters: {
|
||||||
"browserTime": function(column, row) {
|
"browserTime": function(column, row) {
|
||||||
@if(Config::get('graylog.timezone'))
|
@config('graylog.timezone')
|
||||||
return row.timestamp;
|
return row.timestamp;
|
||||||
@else
|
@else
|
||||||
return moment.parseZone(row.timestamp).local().format("YYYY-MM-DD HH:MM:SS");
|
return moment.parseZone(row.timestamp).local().format("YYYY-MM-DD HH:MM:SS");
|
||||||
@endif
|
@endconfig
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
post: function ()
|
post: function ()
|
||||||
|
|
|
@ -472,11 +472,10 @@ class AuthSSOTest extends DBTestCase
|
||||||
|
|
||||||
public function tearDown()
|
public function tearDown()
|
||||||
{
|
{
|
||||||
parent::tearDown();
|
|
||||||
Config::set('auth_mechanism', $this->original_auth_mech);
|
Config::set('auth_mechanism', $this->original_auth_mech);
|
||||||
Config::forget('sso');
|
Config::forget('sso');
|
||||||
$this->breakUser();
|
$this->breakUser();
|
||||||
|
|
||||||
$_SERVER = $this->server;
|
$_SERVER = $this->server;
|
||||||
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace LibreNMS\Tests;
|
||||||
use LibreNMS\Config;
|
use LibreNMS\Config;
|
||||||
use LibreNMS\DB\Eloquent;
|
use LibreNMS\DB\Eloquent;
|
||||||
|
|
||||||
class ConfigTest extends TestCase
|
class ConfigTest extends LaravelTestCase
|
||||||
{
|
{
|
||||||
public function testGetBasic()
|
public function testGetBasic()
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,6 +29,14 @@ use \PHPUnit\Framework\ExpectationFailedException as PHPUnitException;
|
||||||
|
|
||||||
class DBSetupTest extends DBTestCase
|
class DBSetupTest extends DBTestCase
|
||||||
{
|
{
|
||||||
|
protected $db_name;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->db_name = dbFetchCell('SELECT DATABASE()');
|
||||||
|
}
|
||||||
|
|
||||||
public function testSetupDB()
|
public function testSetupDB()
|
||||||
{
|
{
|
||||||
global $schema;
|
global $schema;
|
||||||
|
|
|
@ -25,15 +25,13 @@
|
||||||
|
|
||||||
namespace LibreNMS\Tests;
|
namespace LibreNMS\Tests;
|
||||||
|
|
||||||
abstract class DBTestCase extends TestCase
|
abstract class DBTestCase extends LaravelTestCase
|
||||||
{
|
{
|
||||||
protected $db_name;
|
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
$this->dbSetUp();
|
$this->dbSetUp();
|
||||||
$this->db_name = dbFetchCell('SELECT DATABASE()');
|
set_debug(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown()
|
public function tearDown()
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* BgpTrapTest.php
|
||||||
|
*
|
||||||
|
* -Description-
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* @package LibreNMS
|
||||||
|
* @link http://librenms.org
|
||||||
|
* @copyright 2019 Tony Murray
|
||||||
|
* @author Tony Murray <murraytony@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
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\LaravelTestCase;
|
||||||
|
|
||||||
|
class BgpTrapTest extends LaravelTestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
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');
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* CommonTrapTest.php
|
||||||
|
*
|
||||||
|
* -Description-
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* @package LibreNMS
|
||||||
|
* @link http://librenms.org
|
||||||
|
* @copyright 2019 Tony Murray
|
||||||
|
* @author Tony Murray <murraytony@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace LibreNMS\Tests;
|
||||||
|
|
||||||
|
use App\Models\Device;
|
||||||
|
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
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
public function testGarbage()
|
||||||
|
{
|
||||||
|
$trapText = "Garbage\n";
|
||||||
|
|
||||||
|
$trap = new Trap($trapText);
|
||||||
|
$this->assertFalse(Dispatcher::handle($trap), 'Found handler for trap with no snmpTrapOID');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFindByIp()
|
||||||
|
{
|
||||||
|
$device = factory(Device::class)->create();
|
||||||
|
$port = factory(Port::class)->make();
|
||||||
|
$device->ports()->save($port);
|
||||||
|
$ipv4 = factory(Ipv4Address::class)->make(); // test ipv4 lookup of device
|
||||||
|
$port->ipv4()->save($ipv4);
|
||||||
|
|
||||||
|
$trapText = "something
|
||||||
|
UDP: [$ipv4->ipv4_address]:64610->[192.168.5.5]:162
|
||||||
|
DISMAN-EVENT-MIB::sysUpTimeInstance 198:2:10:48.91\n";
|
||||||
|
|
||||||
|
$trap = new Trap($trapText);
|
||||||
|
$this->assertFalse(Dispatcher::handle($trap), 'Found handler for trap with no snmpTrapOID');
|
||||||
|
|
||||||
|
// check that the device was found
|
||||||
|
$this->assertEquals($device->hostname, $trap->getDevice()->hostname);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAuthorization()
|
||||||
|
{
|
||||||
|
$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::authenticationFailure\n";
|
||||||
|
|
||||||
|
Log::shouldReceive('event')->once()->with('SNMP Trap: Authentication Failure: ' . $device->displayName(), $device->device_id, 'auth', 3);
|
||||||
|
|
||||||
|
$trap = new Trap($trapText);
|
||||||
|
$this->assertTrue(Dispatcher::handle($trap));
|
||||||
|
|
||||||
|
// check that the device was found
|
||||||
|
$this->assertEquals($device->hostname, $trap->getDevice()->hostname);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,102 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PortsTrapTest.php
|
||||||
|
*
|
||||||
|
* -Description-
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* @package LibreNMS
|
||||||
|
* @link http://librenms.org
|
||||||
|
* @copyright 2019 Tony Murray
|
||||||
|
* @author Tony Murray <murraytony@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace LibreNMS\Tests\Feature\SnmpTraps;
|
||||||
|
|
||||||
|
use App\Models\Device;
|
||||||
|
use App\Models\Port;
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
use LibreNMS\Snmptrap\Dispatcher;
|
||||||
|
use LibreNMS\Snmptrap\Trap;
|
||||||
|
use LibreNMS\Tests\DBTestCase;
|
||||||
|
use LibreNMS\Tests\LaravelTestCase;
|
||||||
|
use Log;
|
||||||
|
use Mockery\Mock;
|
||||||
|
|
||||||
|
class PortsTrapTest extends LaravelTestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
public function testLinkDown()
|
||||||
|
{
|
||||||
|
// make a device and associate a port with it
|
||||||
|
$device = factory(Device::class)->create();
|
||||||
|
$port = factory(Port::class)->make(['ifAdminStatus' => 'up', 'ifOperStatus' => 'up']);
|
||||||
|
$device->ports()->save($port);
|
||||||
|
|
||||||
|
$trapText = "<UNKNOWN>
|
||||||
|
UDP: [$device->ip]:57123->[192.168.4.4]:162
|
||||||
|
DISMAN-EVENT-MIB::sysUpTimeInstance 2:15:07:12.87
|
||||||
|
SNMPv2-MIB::snmpTrapOID.0 IF-MIB::linkDown
|
||||||
|
IF-MIB::ifIndex.$port->ifIndex $port->ifIndex
|
||||||
|
IF-MIB::ifAdminStatus.$port->ifIndex down
|
||||||
|
IF-MIB::ifOperStatus.$port->ifIndex down
|
||||||
|
IF-MIB::ifDescr.$port->ifIndex GigabitEthernet0/5
|
||||||
|
IF-MIB::ifType.$port->ifIndex ethernetCsmacd
|
||||||
|
OLD-CISCO-INTERFACES-MIB::locIfReason.$port->ifIndex \"down\"\n";
|
||||||
|
|
||||||
|
Log::shouldReceive('event')->once()->with("SNMP Trap: linkDown down/down " . $port->ifDescr, $device->device_id, 'interface', 5, $port->port_id);
|
||||||
|
Log::shouldReceive('event')->once()->with("Interface Disabled : $port->ifDescr (TRAP)", $device->device_id, 'interface', 3, $port->port_id);
|
||||||
|
Log::shouldReceive('event')->once()->with("Interface went Down : $port->ifDescr (TRAP)", $device->device_id, 'interface', 5, $port->port_id);
|
||||||
|
|
||||||
|
$trap = new Trap($trapText);
|
||||||
|
$this->assertTrue(Dispatcher::handle($trap), 'Could not handle linkDown');
|
||||||
|
|
||||||
|
|
||||||
|
$port = $port->fresh(); // refresh from database
|
||||||
|
$this->assertEquals($port->ifAdminStatus, 'down');
|
||||||
|
$this->assertEquals($port->ifOperStatus, 'down');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testLinkUp()
|
||||||
|
{
|
||||||
|
// make a device and associate a port with it
|
||||||
|
$device = factory(Device::class)->create();
|
||||||
|
$port = factory(Port::class)->make(['ifAdminStatus' => 'down', 'ifOperStatus' => 'down']);
|
||||||
|
$device->ports()->save($port);
|
||||||
|
|
||||||
|
$trapText = "<UNKNOWN>
|
||||||
|
UDP: [$device->ip]:57123->[185.29.68.52]:162
|
||||||
|
DISMAN-EVENT-MIB::sysUpTimeInstance 2:15:07:18.21
|
||||||
|
SNMPv2-MIB::snmpTrapOID.0 IF-MIB::linkUp
|
||||||
|
IF-MIB::ifIndex.$port->ifIndex $port->ifIndex
|
||||||
|
IF-MIB::ifAdminStatus.$port->ifIndex up
|
||||||
|
IF-MIB::ifOperStatus.$port->ifIndex up
|
||||||
|
IF-MIB::ifDescr.$port->ifIndex GigabitEthernet0/5
|
||||||
|
IF-MIB::ifType.$port->ifIndex ethernetCsmacd
|
||||||
|
OLD-CISCO-INTERFACES-MIB::locIfReason.$port->ifIndex \"up\"\n";
|
||||||
|
|
||||||
|
Log::shouldReceive('event')->once()->with("SNMP Trap: linkUp up/up " . $port->ifDescr, $device->device_id, 'interface', 1, $port->port_id);
|
||||||
|
Log::shouldReceive('event')->once()->with("Interface Enabled : $port->ifDescr (TRAP)", $device->device_id, 'interface', 3, $port->port_id);
|
||||||
|
Log::shouldReceive('event')->once()->with("Interface went Up : $port->ifDescr (TRAP)", $device->device_id, 'interface', 1, $port->port_id);
|
||||||
|
|
||||||
|
$trap = new Trap($trapText);
|
||||||
|
$this->assertTrue(Dispatcher::handle($trap), 'Could not handle linkUp');
|
||||||
|
|
||||||
|
$port = $port->fresh(); // refresh from database
|
||||||
|
$this->assertEquals($port->ifAdminStatus, 'up');
|
||||||
|
$this->assertEquals($port->ifOperStatus, 'up');
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,4 +8,22 @@ abstract class LaravelTestCase extends BaseTestCase
|
||||||
{
|
{
|
||||||
use CreatesApplication;
|
use CreatesApplication;
|
||||||
use SnmpsimHelpers;
|
use SnmpsimHelpers;
|
||||||
|
|
||||||
|
public function dbSetUp()
|
||||||
|
{
|
||||||
|
if (getenv('DBTEST')) {
|
||||||
|
\LibreNMS\DB\Eloquent::boot();
|
||||||
|
\LibreNMS\DB\Eloquent::setStrictMode();
|
||||||
|
\LibreNMS\DB\Eloquent::DB()->beginTransaction();
|
||||||
|
} else {
|
||||||
|
$this->markTestSkipped('Database tests not enabled. Set DBTEST=1 to enable.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dbTearDown()
|
||||||
|
{
|
||||||
|
if (getenv('DBTEST')) {
|
||||||
|
\LibreNMS\DB\Eloquent::DB()->rollBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
namespace LibreNMS\Tests;
|
namespace LibreNMS\Tests;
|
||||||
|
|
||||||
use LibreNMS\Config;
|
use LibreNMS\Config;
|
||||||
use PHPUnit_Framework_ExpectationFailedException as PHPUnitException;
|
|
||||||
|
|
||||||
class OSDiscoveryTest extends TestCase
|
class OSDiscoveryTest extends TestCase
|
||||||
{
|
{
|
||||||
|
@ -69,7 +68,7 @@ class OSDiscoveryTest extends TestCase
|
||||||
});
|
});
|
||||||
|
|
||||||
if (empty($files)) {
|
if (empty($files)) {
|
||||||
throw new PHPUnitException("No snmprec files found for $os_name!");
|
$this->fail("No snmprec files found for $os_name!");
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
|
|
|
@ -60,6 +60,7 @@ class OSModulesTest extends DBTestCase
|
||||||
{
|
{
|
||||||
$this->requireSnmpsim(); // require snmpsim for tests
|
$this->requireSnmpsim(); // require snmpsim for tests
|
||||||
global $snmpsim;
|
global $snmpsim;
|
||||||
|
load_all_os(); // wiped out by application refresh
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$helper = new ModuleTestHelper($modules, $os, $variant);
|
$helper = new ModuleTestHelper($modules, $os, $variant);
|
||||||
|
@ -112,7 +113,6 @@ class OSModulesTest extends DBTestCase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function dumpedDataProvider()
|
public function dumpedDataProvider()
|
||||||
{
|
{
|
||||||
$modules = array();
|
$modules = array();
|
||||||
|
|
|
@ -1,179 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* SnmpTrapTest.php
|
|
||||||
*
|
|
||||||
* -Description-
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* @package LibreNMS
|
|
||||||
* @link http://librenms.org
|
|
||||||
* @copyright 2018 Tony Murray
|
|
||||||
* @author Tony Murray <murraytony@gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace LibreNMS\Tests;
|
|
||||||
|
|
||||||
use App\Models\BgpPeer;
|
|
||||||
use App\Models\Device;
|
|
||||||
use App\Models\Ipv4Address;
|
|
||||||
use App\Models\Port;
|
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use LibreNMS\Snmptrap\Dispatcher;
|
|
||||||
use LibreNMS\Snmptrap\Trap;
|
|
||||||
|
|
||||||
class SnmpTrapTest extends LaravelTestCase
|
|
||||||
{
|
|
||||||
use DatabaseTransactions;
|
|
||||||
|
|
||||||
public function testGarbage()
|
|
||||||
{
|
|
||||||
$trapText = "Garbage\n";
|
|
||||||
|
|
||||||
$trap = new Trap($trapText);
|
|
||||||
$this->assertFalse(Dispatcher::handle($trap), 'Found handler for trap with no snmpTrapOID');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testFindByIp()
|
|
||||||
{
|
|
||||||
$device = factory(Device::class)->create();
|
|
||||||
$port = factory(Port::class)->make();
|
|
||||||
$device->ports()->save($port);
|
|
||||||
$ipv4 = factory(Ipv4Address::class)->make(); // test ipv4 lookup of device
|
|
||||||
$port->ipv4()->save($ipv4);
|
|
||||||
|
|
||||||
$trapText = "something
|
|
||||||
UDP: [$ipv4->ipv4_address]:64610->[192.168.5.5]:162
|
|
||||||
DISMAN-EVENT-MIB::sysUpTimeInstance 198:2:10:48.91\n";
|
|
||||||
|
|
||||||
$trap = new Trap($trapText);
|
|
||||||
$this->assertFalse(Dispatcher::handle($trap), 'Found handler for trap with no snmpTrapOID');
|
|
||||||
|
|
||||||
// check that the device was found
|
|
||||||
$this->assertEquals($device->hostname, $trap->getDevice()->hostname);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testAuthorization()
|
|
||||||
{
|
|
||||||
$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::authenticationFailure\n";
|
|
||||||
|
|
||||||
$trap = new Trap($trapText);
|
|
||||||
$this->assertTrue(Dispatcher::handle($trap));
|
|
||||||
|
|
||||||
// check that the device was found
|
|
||||||
$this->assertEquals($device->hostname, $trap->getDevice()->hostname);
|
|
||||||
|
|
||||||
// $event = \App\Models\LogEvent::orderBy('datetime', 'desc')->first();
|
|
||||||
|
|
||||||
// dd($event);
|
|
||||||
}
|
|
||||||
|
|
||||||
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";
|
|
||||||
|
|
||||||
$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";
|
|
||||||
|
|
||||||
$trap = new Trap($trapText);
|
|
||||||
$this->assertTrue(Dispatcher::handle($trap), 'Could not handle bgpBackwardTransition');
|
|
||||||
|
|
||||||
$bgppeer = $bgppeer->fresh(); // refresh from database
|
|
||||||
$this->assertEquals($bgppeer->bgpPeerState, 'idle');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLinkDown()
|
|
||||||
{
|
|
||||||
// make a device and associate a port with it
|
|
||||||
$device = factory(Device::class)->create();
|
|
||||||
$port = factory(Port::class)->make(['ifAdminStatus' => 'up', 'ifOperStatus' => 'up']);
|
|
||||||
$device->ports()->save($port);
|
|
||||||
|
|
||||||
$trapText = "<UNKNOWN>
|
|
||||||
UDP: [$device->ip]:57123->[192.168.4.4]:162
|
|
||||||
DISMAN-EVENT-MIB::sysUpTimeInstance 2:15:07:12.87
|
|
||||||
SNMPv2-MIB::snmpTrapOID.0 IF-MIB::linkDown
|
|
||||||
IF-MIB::ifIndex.$port->ifIndex $port->ifIndex
|
|
||||||
IF-MIB::ifAdminStatus.$port->ifIndex down
|
|
||||||
IF-MIB::ifOperStatus.$port->ifIndex down
|
|
||||||
IF-MIB::ifDescr.$port->ifIndex GigabitEthernet0/5
|
|
||||||
IF-MIB::ifType.$port->ifIndex ethernetCsmacd
|
|
||||||
OLD-CISCO-INTERFACES-MIB::locIfReason.$port->ifIndex \"down\"\n";
|
|
||||||
|
|
||||||
$trap = new Trap($trapText);
|
|
||||||
$this->assertTrue(Dispatcher::handle($trap), 'Could not handle linkDown');
|
|
||||||
|
|
||||||
|
|
||||||
$port = $port->fresh(); // refresh from database
|
|
||||||
$this->assertEquals($port->ifAdminStatus, 'down');
|
|
||||||
$this->assertEquals($port->ifOperStatus, 'down');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLinkUp()
|
|
||||||
{
|
|
||||||
// make a device and associate a port with it
|
|
||||||
$device = factory(Device::class)->create();
|
|
||||||
$port = factory(Port::class)->make(['ifAdminStatus' => 'down', 'ifOperStatus' => 'down']);
|
|
||||||
$device->ports()->save($port);
|
|
||||||
|
|
||||||
$trapText = "<UNKNOWN>
|
|
||||||
UDP: [$device->ip]:57123->[185.29.68.52]:162
|
|
||||||
DISMAN-EVENT-MIB::sysUpTimeInstance 2:15:07:18.21
|
|
||||||
SNMPv2-MIB::snmpTrapOID.0 IF-MIB::linkUp
|
|
||||||
IF-MIB::ifIndex.$port->ifIndex $port->ifIndex
|
|
||||||
IF-MIB::ifAdminStatus.$port->ifIndex up
|
|
||||||
IF-MIB::ifOperStatus.$port->ifIndex up
|
|
||||||
IF-MIB::ifDescr.$port->ifIndex GigabitEthernet0/5
|
|
||||||
IF-MIB::ifType.$port->ifIndex ethernetCsmacd
|
|
||||||
OLD-CISCO-INTERFACES-MIB::locIfReason.$port->ifIndex \"up\"\n";
|
|
||||||
|
|
||||||
$trap = new Trap($trapText);
|
|
||||||
$this->assertTrue(Dispatcher::handle($trap), 'Could not handle linkUp');
|
|
||||||
|
|
||||||
$port = $port->fresh(); // refresh from database
|
|
||||||
$this->assertEquals($port->ifAdminStatus, 'up');
|
|
||||||
$this->assertEquals($port->ifOperStatus, 'up');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -42,6 +42,12 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
|
||||||
$this->snmpsim = $snmpsim;
|
$this->snmpsim = $snmpsim;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
set_debug(false); // prevent warnings from stopping execution for legacy code
|
||||||
|
}
|
||||||
|
|
||||||
public function dbSetUp()
|
public function dbSetUp()
|
||||||
{
|
{
|
||||||
if (getenv('DBTEST')) {
|
if (getenv('DBTEST')) {
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace LibreNMS\Tests;
|
||||||
use JsonSchema\Constraints\Constraint;
|
use JsonSchema\Constraints\Constraint;
|
||||||
use JsonSchema\Exception\JsonDecodingException;
|
use JsonSchema\Exception\JsonDecodingException;
|
||||||
use LibreNMS\Config;
|
use LibreNMS\Config;
|
||||||
use PHPUnit_Framework_ExpectationFailedException as PHPUnitException;
|
use PHPUnit\Framework\ExpectationFailedException;
|
||||||
use Symfony\Component\Yaml\Exception\ParseException;
|
use Symfony\Component\Yaml\Exception\ParseException;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
use Symfony\Component\Yaml\Yaml;
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ class YamlTest extends TestCase
|
||||||
try {
|
try {
|
||||||
$data = Yaml::parse(file_get_contents($path));
|
$data = Yaml::parse(file_get_contents($path));
|
||||||
} catch (ParseException $e) {
|
} catch (ParseException $e) {
|
||||||
throw new PHPUnitException("$path Could not be parsed", null, $e);
|
throw new ExpectationFailedException("$path Could not be parsed", null, $e);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
1.3.6.1.2.1.1.2.0|4|FC5022 16Gb SAN Scalable Switch:IBM Flex System FC5022 24-port 16Gb ESB SAN Scalable Switch
|
1.3.6.1.2.1.1.1.0|4|FC5022 16Gb SAN Scalable Switch:IBM Flex System FC5022 24-port 16Gb ESB SAN Scalable Switch
|
||||||
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.1588.2.1.1.117
|
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.1588.2.1.1.117
|
||||||
|
|
Loading…
Reference in New Issue