fix(api): отклонять несогласованные объекты IPsec и VXLAN

This commit is contained in:
Denozordec committed 2026-09-30 15:25:29 +07:00
1 parent 0e0f98e0f4
commit d112935c73
6 files changed
+31 -7

No files matched your search

+4 -1
View File
@@ -5,7 +5,7 @@ const client = (id: string, name = "Клиент " + id) => ({ id: id + "-*1", r
const servers = [1, 2].map(id => ({ id, name: "Роутер " + id, host: "192.0.2." + id, enabled: true, country: "RU", type: "exit-node", status: "online" }))
const full = { servers: [summary("1"), summary("2")], clients: [client("1"), client("2")] }
for (const broken of ["http", "payload", "duplicate", "conflict"]) {
for (const broken of ["http", "payload", "duplicate", "conflict", "peer-context", "pool-context", "blank-failure"]) {
test(`IPsec: неизвестное начало и сохранение данных при ${broken}`, async ({ page }) => {
let phase = 0
await page.route("**/health", r => r.fulfill({ json: { ok: true } }))
@@ -17,6 +17,9 @@ for (const broken of ["http", "payload", "duplicate", "conflict"]) {
return broken === "http" ? r.fulfill({ status: 503, json: { error: "Повторный отказ IPsec" } })
: r.fulfill({ json: broken === "payload" ? { servers: [], clients: [{}] }
: broken === "duplicate" ? { ...full, clients: [client("1"), client("1")] }
: broken === "peer-context" ? { ...full, servers: [{ ...summary("1"), peers: [{ id: "1-*p1", rosId: "*p1", serverId: "2", serverName: "Чужой роутер", name: "peer", managed: true, disabled: false }] }, summary("2")] }
: broken === "pool-context" ? { ...full, servers: [{ ...summary("1"), pool: { id: "1-*p1", rosId: "*p1", serverId: "2", name: "pool", ranges: "10.0.0.1-10.0.0.20", managed: true } }, summary("2")] }
: broken === "blank-failure" ? { servers: [], clients: [], failures: [{ serverId: "", error: "Неизвестный отказ" }] }
: { ...full, failures: [{ serverId: "1", error: "Сбой устройства" }] } })
}
return r.fulfill({ json: path === "/api/servers" ? servers : path === "/api/auth/config" ? { required: false } : {} })
+3
View File
@@ -171,6 +171,9 @@ test("VXLAN: повреждённые записи не заменяют пос
{ tunnels: [{ ...valid, status: "unknown" }] },
{ tunnels: [valid, valid] },
{ tunnels: [], failures: [{ serverId: "1", error: null }] },
{ tunnels: [valid], failures: [{ serverId: "1", error: "Конфликт" }] },
{ tunnels: [], failures: [{ serverId: "1", error: "Сбой" }, { serverId: "1", error: "Повтор" }] },
{ tunnels: [{ ...valid, arpMode: "enabled", arpProxy: true }] },
]) {
control.payload = payload
await page.getByRole("button", { name: "Обновить", exact: true }).click()