2020-06-05 11:48:22 +02:00
< ? php
/**
* UpsTrapsOnBatteryTest.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
2021-02-09 00:29:04 +01:00
* along with this program. If not, see <https://www.gnu.org/licenses/>.
2020-06-05 11:48:22 +02:00
*
2021-02-09 00:29:04 +01:00
* @link https://www.librenms.org
2021-09-10 20:09:53 +02:00
*
2020-06-05 11:48:22 +02:00
* @author TheGreatDoc
*/
namespace LibreNMS\Tests\Feature\SnmpTraps ;
use App\Models\Device ;
2020-06-07 11:21:14 +02:00
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 ;
2020-06-05 11:48:22 +02:00
class UpsTrapsOnBatteryTest extends SnmpTrapTestCase
{
2022-11-05 14:43:54 -05:00
use RequiresDatabase ;
use DatabaseTransactions ;
public function testOnBattery () : void
2020-06-05 11:48:22 +02:00
{
2021-07-13 16:35:43 -05:00
$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 */
2020-06-08 06:27:10 +02:00
$device -> sensors () -> save ( $state );
$device -> sensors () -> save ( $time );
$device -> sensors () -> save ( $remaining );
2020-06-05 11:48:22 +02:00
2022-11-05 14:43:54 -05:00
\Log :: shouldReceive ( 'warning' ) -> never () -> with ( " Snmptrap UpsTraps: Could not find matching sensor \ 'Estimated battery time remaining \ ' for device: " . $device -> hostname );
\Log :: shouldReceive ( 'warning' ) -> never () -> with ( " Snmptrap UpsTraps: Could not find matching sensor \ 'Time on battery \ ' for device: " . $device -> hostname );
\Log :: shouldReceive ( 'warning' ) -> never () -> with ( " Snmptrap UpsTraps: Could not find matching sensor \ 'upsOutputSourceState \ ' for device: " . $device -> hostname );
$this -> assertTrapLogsMessage ( " $device->hostname
2020-06-05 11:48:22 +02: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::upsTraps.0.1
UPS-MIB::upsEstimatedMinutesRemaining.0 100 minutes
UPS-MIB::upsSecondsOnBattery.0 120 seconds
2022-11-05 14:43:54 -05:00
UPS-MIB::upsConfigLowBattTime.0 1 minutes " ,
'UPS running on battery for 120 seconds. Estimated 100 minutes remaining' ,
'Could not handle UPS-MIB::upsTraps.0.1 trap' ,
2023-08-05 12:12:36 -05:00
[ Severity :: Error ],
2022-11-05 14:43:54 -05:00
$device ,
);
2020-06-07 11:21:14 +02: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' );
2020-06-05 11:48:22 +02:00
}
}