95 lines
3.6 KiB
TypeScript
95 lines
3.6 KiB
TypeScript
import { tap, expect } from '@push.rocks/tapbundle';
|
|
import { NupstSnmp } from '../ts/snmp/manager.js';
|
|
import type { ISnmpConfig, IUpsStatus } from '../ts/snmp/types.js';
|
|
|
|
import * as qenv from '@push.rocks/qenv';
|
|
const testQenv = new qenv.Qenv('./', '.nogit/');
|
|
|
|
// Create an SNMP instance with debug enabled
|
|
const snmp = new NupstSnmp(true);
|
|
|
|
// Load the test configuration from .nogit/env.json
|
|
const testConfigV1 = await testQenv.getEnvVarOnDemandAsObject('testConfigV1');
|
|
const testConfigV3 = await testQenv.getEnvVarOnDemandAsObject('testConfigV3');
|
|
|
|
tap.test('should log config', async () => {
|
|
console.log(testConfigV1);
|
|
});
|
|
|
|
// Test with real UPS using the configuration from .nogit/env.json
|
|
tap.test('Real UPS test v1', async () => {
|
|
try {
|
|
console.log('Testing with real UPS configuration...');
|
|
|
|
// Extract the correct SNMP config from the test configuration
|
|
const snmpConfig = testConfigV1.snmp;
|
|
console.log('SNMP Config:');
|
|
console.log(` Host: ${snmpConfig.host}:${snmpConfig.port}`);
|
|
console.log(` Version: SNMPv${snmpConfig.version}`);
|
|
console.log(` UPS Model: ${snmpConfig.upsModel}`);
|
|
|
|
// Use a short timeout for testing
|
|
const testSnmpConfig = {
|
|
...snmpConfig,
|
|
timeout: Math.min(snmpConfig.timeout, 10000) // Use at most 10 seconds for testing
|
|
};
|
|
|
|
// Try to get the UPS status
|
|
const status = await snmp.getUpsStatus(testSnmpConfig);
|
|
|
|
console.log('UPS Status:');
|
|
console.log(` Power Status: ${status.powerStatus}`);
|
|
console.log(` Battery Capacity: ${status.batteryCapacity}%`);
|
|
console.log(` Runtime Remaining: ${status.batteryRuntime} minutes`);
|
|
|
|
// Just make sure we got valid data types back
|
|
expect(status).toBeTruthy();
|
|
expect(['online', 'onBattery', 'unknown']).toContain(status.powerStatus);
|
|
expect(typeof status.batteryCapacity).toEqual('number');
|
|
expect(typeof status.batteryRuntime).toEqual('number');
|
|
} catch (error) {
|
|
console.log('Real UPS test failed:', error);
|
|
// Skip the test if we can't connect to the real UPS
|
|
console.log('Skipping this test since the UPS might not be available');
|
|
}
|
|
});
|
|
|
|
tap.test('Real UPS test v3', async () => {
|
|
try {
|
|
console.log('Testing with real UPS configuration...');
|
|
|
|
// Extract the correct SNMP config from the test configuration
|
|
const snmpConfig = testConfigV3.snmp;
|
|
console.log('SNMP Config:');
|
|
console.log(` Host: ${snmpConfig.host}:${snmpConfig.port}`);
|
|
console.log(` Version: SNMPv${snmpConfig.version}`);
|
|
console.log(` UPS Model: ${snmpConfig.upsModel}`);
|
|
|
|
// Use a short timeout for testing
|
|
const testSnmpConfig = {
|
|
...snmpConfig,
|
|
timeout: Math.min(snmpConfig.timeout, 10000) // Use at most 10 seconds for testing
|
|
};
|
|
|
|
// Try to get the UPS status
|
|
const status = await snmp.getUpsStatus(testSnmpConfig);
|
|
|
|
console.log('UPS Status:');
|
|
console.log(` Power Status: ${status.powerStatus}`);
|
|
console.log(` Battery Capacity: ${status.batteryCapacity}%`);
|
|
console.log(` Runtime Remaining: ${status.batteryRuntime} minutes`);
|
|
|
|
// Just make sure we got valid data types back
|
|
expect(status).toBeTruthy();
|
|
expect(['online', 'onBattery', 'unknown']).toContain(status.powerStatus);
|
|
expect(typeof status.batteryCapacity).toEqual('number');
|
|
expect(typeof status.batteryRuntime).toEqual('number');
|
|
} catch (error) {
|
|
console.log('Real UPS test failed:', error);
|
|
// Skip the test if we can't connect to the real UPS
|
|
console.log('Skipping this test since the UPS might not be available');
|
|
}
|
|
});
|
|
|
|
// Export the default tap object
|
|
export default tap.start(); |