2021-11-11 17:08:36 +01:00
<? php
/**
* UpsTrapOnBatteryTest.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 <https://www.gnu.org/licenses/>.
*
* @link https://www.librenms.org
*
* @author TheGreatDoc
*/
namespace LibreNMS\Tests\Feature\SnmpTraps ;
use App\Models\Device ;
use App\Models\Sensor ;
2022-11-05 14:43:54 -05:00
use Illuminate\Foundation\Testing\DatabaseTransactions ;
2023-08-05 12:12:36 -05:00
use LibreNMS\Enum\Severity ;
2022-11-05 14:43:54 -05:00
use LibreNMS\Tests\Traits\RequiresDatabase ;
2021-11-11 17:08:36 +01:00
class UpsTrapOnBatteryTest extends SnmpTrapTestCase
{
2022-11-05 14:43:54 -05:00
use RequiresDatabase ;
use DatabaseTransactions ;
2021-11-11 17:08:36 +01:00
public function testOnBattery () : void
{
$device = Device :: factory () -> create (); /** @var Device $device */
$state = Sensor :: factory () -> make ([ 'sensor_class' => 'state' , 'sensor_type' => 'upsOutputSourceState' , 'sensor_current' => '2' ]); /** @var Sensor $state */
$time = Sensor :: factory () -> make ([ 'sensor_class' => 'runtime' , 'sensor_index' => '100' , 'sensor_type' => 'rfc1628' , 'sensor_current' => '0' ]); /** @var Sensor $time */
$remaining = Sensor :: factory () -> make ([ 'sensor_class' => 'runtime' , 'sensor_index' => '200' , 'sensor_type' => 'rfc1628' , 'sensor_current' => '371' ]); /** @var Sensor $remaining */
$device -> sensors () -> save ( $state );
$device -> sensors () -> save ( $time );
$device -> sensors () -> save ( $remaining );
2022-11-05 14:43:54 -05:00
\Log :: shouldReceive ( 'warning' ) -> never () -> with ( "Snmptrap upsTrapOnBattery: Could not find matching sensor \'Estimated battery time remaining\' for device: " . $device -> hostname );
\Log :: shouldReceive ( 'warning' ) -> never () -> with ( "Snmptrap upsTrapOnBattery: Could not find matching sensor \'Time on battery\' for device: " . $device -> hostname );
\Log :: shouldReceive ( 'warning' ) -> never () -> with ( "Snmptrap upsTrapOnBattery: Could not find matching sensor \'upsOutputSourceState\' for device: " . $device -> hostname );
$this -> assertTrapLogsMessage ( " $device->hostname
2021-11-11 17:08:36 +01:00
UDP: [ $device->ip ]:161->[192.168.5.5]:162
DISMAN-EVENT-MIB::sysUpTimeInstance 9:22:15:00.01
SNMPv2-MIB::snmpTrapOID.0 UPS-MIB::upsTrapOnBattery
UPS-MIB::upsEstimatedMinutesRemaining 100 minutes
UPS-MIB::upsSecondsOnBattery 120 seconds
2022-11-05 14:43:54 -05:00
UPS-MIB::upsConfigLowBattTime 1 minutes" ,
'UPS running on battery for 120 seconds. Estimated 100 minutes remaining' ,
'Could not handle UPS-MIB::upsTrapOnBattery trap' ,
2023-08-05 12:12:36 -05:00
[ Severity :: Error ],
2022-11-05 14:43:54 -05:00
$device ,
);
2021-11-11 17:08:36 +01:00
$state = $state -> fresh ();
$time = $time -> fresh ();
$remaining = $remaining -> fresh ();
$this -> assertEquals ( $state -> sensor_current , '5' );
$this -> assertEquals ( $time -> sensor_current , '120' );
$this -> assertEquals ( $remaining -> sensor_current , '100' );
}
}