Files
Deep-Package-Inspection/backend/tests/netify.test.js
T

126 lines
3.4 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert');
const axios = require('axios');
// Save the original axios get method
const originalGet = axios.get;
// Helper to mock axios.get response
function mockAxiosGet(mockFn) {
axios.get = mockFn;
}
// Restore original axios get
function restoreAxiosGet() {
axios.get = originalGet;
}
test.afterEach(() => {
restoreAxiosGet();
});
test('fetchEvents parses raw events successfully', async () => {
const netify = require('../netify');
// Mock API response
mockAxiosGet(async (url, config) => {
if (url.endsWith('/event/events')) {
return {
data: {
status_code: 0,
status_message: 'Success.',
data: [
{
id: 254,
basename: 'new.device',
severity: 10,
label: 'New device detected',
description: JSON.stringify({
default: 'New device {{ device_label }} discovered',
tags: {
device_label: 'Linux Device',
device_ip: '192.168.1.100'
}
}),
created_at: {
date: '2026-06-29 10:46:20'
}
}
]
}
};
}
throw new Error(`Unexpected mock URL: ${url}`);
});
const parsed = await netify.fetchEvents(50);
assert.ok(Array.isArray(parsed));
assert.strictEqual(parsed.length, 1);
const event = parsed[0];
assert.strictEqual(event.event_id, 254);
assert.strictEqual(event.event_type, 'new.device');
assert.strictEqual(event.severity, 'Warning');
assert.strictEqual(event.description, 'New device Linux Device discovered');
assert.strictEqual(event.ip_address, '192.168.1.100');
assert.strictEqual(event.event_at, '2026-06-29 10:46:20');
});
test('fetchDiscoveredDevices merges devices and flows successfully', async () => {
const netify = require('../netify');
mockAxiosGet(async (url, config) => {
if (url.endsWith('/intelligence/discovery/devices')) {
return {
data: {
status_code: 0,
data: [
{
ip: { address: '10.250.192.226' },
mac_address: 'b2:87:41:96:a7:7b',
mac_vendor: 'Local',
discovery_mac: {
address: 'b2:87:41:96:a7:7b',
discovery_hardware: 'Linux Device'
},
discovery_type: { label: 'Computer' },
discovery_os: { label: 'Linux' }
}
]
}
};
}
if (url.endsWith('/data/stats/top/local_ip/download')) {
return {
data: {
status_code: 0,
data: [
{ local_ip: { address: '10.250.192.226' }, download: 1000000 }
]
}
};
}
if (url.endsWith('/data/stats/top/local_ip/upload')) {
return {
data: {
status_code: 0,
data: [
{ local_ip: { address: '10.250.192.226' }, upload: 500000 }
]
}
};
}
throw new Error(`Unexpected mock URL: ${url}`);
});
const devices = await netify.fetchDiscoveredDevices(1440, 50);
assert.ok(Array.isArray(devices));
assert.strictEqual(devices.length, 1);
const dev = devices[0];
assert.strictEqual(dev.ip_address, '10.250.192.226');
assert.strictEqual(dev.mac_address, 'b2:87:41:96:a7:7b');
assert.strictEqual(dev.download, 1000000);
assert.strictEqual(dev.upload, 500000);
});