import { assert, assertEquals, assertExists } from 'jsr:@std/assert@^1.0.0'; import { NupstSnmp } from '../ts/snmp/manager.ts'; import type { ISnmpConfig } from '../ts/snmp/types.ts'; import * as qenv from 'npm:@push.rocks/qenv@^6.0.0'; 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'); Deno.test('should log config', () => { console.log(testConfigV1); assert(true); }); // Test with real UPS using the configuration from .nogit/env.json Deno.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 as ISnmpConfig; 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 assertExists(status); assert(['online', 'onBattery', 'unknown'].includes(status.powerStatus)); assertEquals(typeof status.batteryCapacity, 'number'); assertEquals(typeof status.batteryRuntime, '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'); } }); Deno.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 as ISnmpConfig; 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 assertExists(status); assert(['online', 'onBattery', 'unknown'].includes(status.powerStatus)); assertEquals(typeof status.batteryCapacity, 'number'); assertEquals(typeof status.batteryRuntime, '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'); } });