Files
amnezia_web-PRO/scripts/test-clients-meta.mjs
Andrey 194ac8c742 fix: keep client names and dates when Amnezia app rewrites clientsTable
Приложение AmneziaVPN при переподключении пересобирает clientsTable из awg0.conf
и оставляет только clientId с именами «Client N» — имена, даты создания и last_config
пропадают. Панель теперь держит снимок этих полей в DATA_DIR и восстанавливает их
при следующем чтении состояния, попутно чиня файл в контейнере.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 02:10:36 +03:00

44 lines
2.0 KiB
JavaScript

// node scripts/test-clients-meta.mjs — самопроверка страховки clientsTable
import assert from "assert";
import { healClientsMeta, isPlaceholderName } from "./clients-meta.mjs";
const good = [
{ clientId: "A=", userData: { clientName: "Mama", creationDate: "Sat Jun 27 2026", last_config: "{...}" } },
{ clientId: "B=", userData: { clientName: "teplici", creationDate: "Sat Jul 04 2026" } },
];
// 1. Снимок берёт живые значения.
const snap = healClientsMeta(good, {});
assert.equal(snap.restored, 0);
assert.equal(snap.meta["A="].clientName, "Mama");
assert.equal(snap.metaChanged, true);
// 2. Приложение затёрло таблицу — имена и даты возвращаются, новый клиент не трогается.
const wiped = [
{ clientId: "A=", userData: { clientName: "Client 0" } },
{ clientId: "B=", userData: { clientName: "Client 1" } },
{ clientId: "C=", userData: { clientName: "Client 2" } },
];
const fixed = healClientsMeta(wiped, snap.meta);
assert.equal(fixed.clients[0].userData.clientName, "Mama");
assert.equal(fixed.clients[0].userData.last_config, "{...}");
assert.equal(fixed.clients[1].userData.creationDate, "Sat Jul 04 2026");
assert.equal(fixed.clients[2].userData.clientName, "Client 2");
assert.equal(fixed.restored, 5);
// 3. Повторный прогон уже целой таблицы ничего не чинит и не переписывает снимок.
const again = healClientsMeta(fixed.clients, fixed.meta);
assert.equal(again.restored, 0);
assert.equal(again.metaChanged, false);
// 4. Переименование в панели побеждает старый снимок.
const renamed = healClientsMeta(
[{ clientId: "A=", userData: { clientName: "Мама новая" } }],
snap.meta
);
assert.equal(renamed.clients[0].userData.clientName, "Мама новая");
assert.equal(renamed.meta["A="].clientName, "Мама новая");
assert.ok(isPlaceholderName("Client 17") && !isPlaceholderName("Vorot2"));
console.log("clients-meta: ok");