Files
harbor-net/test/server/dataplane-client.test.js
T
dokril ca53b671ee
Build and Deploy Gateway / build-and-push (push) Successful in 14s
Build and Deploy Gateway / deploy (push) Successful in 13s
Add domain traffic metrics and Grafana dashboard
2026-08-08 01:57:00 +03:00

68 lines
2.6 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { createDataplaneClient } from '../../src/server/dataplaneClient.js';
test('control uses the dataplane socket protocol', async () => {
const requests = [];
const send = async (socketPath, pathname, method, body, timeoutMs) => {
requests.push({ method, pathname, socketPath, body, timeoutMs });
return {
running: pathname !== '/stop',
startedAt: 'now',
gatewayBackendVersion: '0.1.0',
singBoxVersion: '1.12.13',
};
};
const client = createDataplaneClient('/run/dataplane.sock', send);
const status = await client.refresh();
assert.equal(status.running, true);
assert.equal(status.gatewayBackendVersion, '0.1.0');
assert.equal(status.singBoxVersion, '1.12.13');
await client.apply();
const devices = await client.observeDevices();
assert.equal(devices.running, true);
const traffic = await client.observeTraffic();
assert.equal(traffic.running, true);
const domainTraffic = await client.observeDomainTraffic();
assert.equal(domainTraffic.running, true);
await client.observeDevicePolicy();
await client.applyDevicePolicies([{ id: 'dev_0011223344556677' }]);
await client.runConnectivityDiagnostics(
[{ id: 'custom-test', url: 'https://example.com' }],
'site:custom-test',
);
assert.equal(client.running, true);
await client.restart();
assert.equal((await client.stop()).running, false);
assert.deepEqual(requests.map(({ method, pathname, socketPath }) => `${method} ${pathname} ${socketPath}`), [
'GET /status /run/dataplane.sock',
'POST /apply /run/dataplane.sock',
'GET /devices /run/dataplane.sock',
'GET /device-traffic /run/dataplane.sock',
'GET /domain-traffic /run/dataplane.sock',
'GET /device-policy /run/dataplane.sock',
'PUT /device-policy /run/dataplane.sock',
'POST /diagnostics/connectivity /run/dataplane.sock',
'POST /restart /run/dataplane.sock',
'POST /stop /run/dataplane.sock',
]);
assert.deepEqual(requests[6].body, { devices: [{ id: 'dev_0011223344556677' }] });
assert.deepEqual(requests[7].body, {
services: [{ id: 'custom-test', url: 'https://example.com' }],
target: 'site:custom-test',
});
assert.equal(requests[7].timeoutMs, 25_000);
});
test('connectivity diagnostics expose a retryable domain error', async () => {
const client = createDataplaneClient('/run/dataplane.sock', async () => {
throw new Error('Dataplane не ответил');
});
await assert.rejects(client.runConnectivityDiagnostics(), {
code: 'DIAGNOSTICS_FAILED',
retryable: true,
});
});