fix(api): проверить контекст GRE и завершить локальную приёмку этапа 9
This commit is contained in:
1 parent
a29ee31052
commit
919d0c4714
5 files changed
+28
-3
No files matched your search
@@ -2,14 +2,19 @@ import assert from "node:assert/strict"
|
|||||||
import Fastify from "fastify"
|
import Fastify from "fastify"
|
||||||
import { validatorCompiler, serializerCompiler } from "@fastify/type-provider-zod"
|
import { validatorCompiler, serializerCompiler } from "@fastify/type-provider-zod"
|
||||||
import filtersRoutes from "./filters.js"
|
import filtersRoutes from "./filters.js"
|
||||||
|
import greRoutes from "./gre.js"
|
||||||
const app = Fastify()
|
const app = Fastify()
|
||||||
app.setValidatorCompiler(validatorCompiler)
|
app.setValidatorCompiler(validatorCompiler)
|
||||||
app.setSerializerCompiler(serializerCompiler)
|
app.setSerializerCompiler(serializerCompiler)
|
||||||
await app.register(filtersRoutes, { prefix: "/api" })
|
await app.register(filtersRoutes, { prefix: "/api" })
|
||||||
for (const id of ["srv1", "0", "1abc", "-1"]) {
|
await app.register(greRoutes, { prefix: "/api" })
|
||||||
|
for (const id of ["srv1", "0", "1abc", "-1", ""]) {
|
||||||
const response = await app.inject({ method: "GET", url: "/api/filters/gre-tunnels?serverId=" + encodeURIComponent(id) })
|
const response = await app.inject({ method: "GET", url: "/api/filters/gre-tunnels?serverId=" + encodeURIComponent(id) })
|
||||||
assert.equal(response.statusCode, 400)
|
assert.equal(response.statusCode, 400)
|
||||||
assert.equal(response.json().error, "Некорректный serverId GRE-каталога")
|
assert.equal(response.json().error, "Некорректный serverId GRE-каталога")
|
||||||
|
const direct = await app.inject({ method: "GET", url: "/api/gre/tunnels?serverId=" + encodeURIComponent(id) })
|
||||||
|
assert.equal(direct.statusCode, 400)
|
||||||
|
assert.equal(direct.json().error, "Некорректный serverId GRE")
|
||||||
}
|
}
|
||||||
await app.close()
|
await app.close()
|
||||||
console.log("GRE invalid selected context: HTTP 400 without DB/RouterOS passed")
|
console.log("GRE invalid selected context: HTTP 400 without DB/RouterOS passed")
|
||||||
@@ -103,6 +103,7 @@ const greRoutes: FastifyPluginAsyncZod = async (app) => {
|
|||||||
app.get("/gre/tunnels", async (req, reply) => {
|
app.get("/gre/tunnels", async (req, reply) => {
|
||||||
const q = req.query as { serverId?: string | number }
|
const q = req.query as { serverId?: string | number }
|
||||||
const sid = parseDbServerId(q.serverId)
|
const sid = parseDbServerId(q.serverId)
|
||||||
|
if (q.serverId !== undefined && sid === null) return reply.status(400).send({ error: "Некорректный serverId GRE" })
|
||||||
const result = await listGreTunnels({ serverId: sid !== null ? String(sid) : undefined })
|
const result = await listGreTunnels({ serverId: sid !== null ? String(sid) : undefined })
|
||||||
return reply.send(result)
|
return reply.send(result)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -137,3 +137,5 @@ flowchart LR
|
|||||||
| VXLAN · Sheet 8 | [Экспорт](ux-ui/screens/vxlan-export-desktop.png) | [Экспорт](ux-ui/screens/vxlan-export-mobile.png) | Снимок → актуальность → код → копирование/файл |
|
| VXLAN · Sheet 8 | [Экспорт](ux-ui/screens/vxlan-export-desktop.png) | [Экспорт](ux-ui/screens/vxlan-export-mobile.png) | Снимок → актуальность → код → копирование/файл |
|
||||||
|
|
||||||
HTTP-фикстуры; layout/клавиатура проверены. Production frontend build и 183 E2E прошли в 9.63. RouterOS/JWT остаются отдельной приёмкой; актуальная точка продолжения — в журнале.
|
HTTP-фикстуры; layout/клавиатура проверены. Production frontend build и 183 E2E прошли в 9.63. RouterOS/JWT остаются отдельной приёмкой; актуальная точка продолжения — в журнале.
|
||||||
|
|
||||||
|
Этап 9 завершён 2026-09-30 в границах локальной приёмки (209 E2E, frontend/backend build). Внешние ограничения — журнал 9.64. Следующий этап — маршрутизация/диагностика (10); схема и референсы сохраняются, сетевые правила применения не меняются.
|
||||||
@@ -25,12 +25,20 @@
|
|||||||
| 6 | Навигация и дашборд | Завершён 2026-09-20 в границах локальной приёмки; ограничения ниже |
|
| 6 | Навигация и дашборд | Завершён 2026-09-20 в границах локальной приёмки; ограничения ниже |
|
||||||
| 7 | Серверы и мониторинг: детали, формы, URL-контекст, права | Завершён в границах локальной приёмки 2026-09-23; внешние ограничения ниже |
|
| 7 | Серверы и мониторинг: детали, формы, URL-контекст, права | Завершён в границах локальной приёмки 2026-09-23; внешние ограничения ниже |
|
||||||
| 8 | Трафик и статистика | Завершён 2026-09-28 в границах локальной приёмки; ограничения в блоке 8.13 |
|
| 8 | Трафик и статистика | Завершён 2026-09-28 в границах локальной приёмки; ограничения в блоке 8.13 |
|
||||||
| 9 | VPN, Firewall и Filters | В работе: блоки 9.1–9.63 — IPsec/GRE/VXLAN, Firewall и операции Filters |
|
| 9 | VPN, Firewall и Filters | Завершён в границах локальной приёмки 2026-09-30; блоки 9.1–9.64, ограничения в 9.64 |
|
||||||
| 10 | Маршрутизация, диагностика, карта и терминал | Не начат |
|
| 10 | Маршрутизация, диагностика, карта и терминал | Не начат |
|
||||||
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Не начат |
|
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Не начат |
|
||||||
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Не начат |
|
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Не начат |
|
||||||
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
|
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
|
||||||
|
|
||||||
|
## Блок 9.64 — завершение локальной приёмки этапа 9 (2026-09-30)
|
||||||
|
|
||||||
|
- GET /gre/tunnels отклоняет явный невалидный serverId с HTTP 400 до БД/RouterOS вместо опроса всех устройств. Fastify inject проверил пять ID (включая пустой) для прямого GRE и общего Filters-каталога; TypeScript/backend build/lint прошли. Успешный и реальный выборный опрос требуют внешнего окружения.
|
||||||
|
- После 183 общей E2E регрессии прошли ещё 26 source-сценариев: Firewall 4, Filters 6, IPsec 6, GRE 6, VXLAN 4; отдельные Next-серверы запускались последовательно. Итого 209 сценариев последней приёмки этапа 9. Production frontend build — 34 страницы, backend build и unit каталогов/планов/экспортов чистые.
|
||||||
|
- Этап 9 завершён в границах локальной приёмки: операции показывают подтверждение API, ошибка сохраняет ввод/последние данные, повтор защищён, выбранное устройство не подменяется другим контекстом, unavailable API не выдаёт фиктивные действия/числа. ReUI Frame/base-nova и установленные компоненты сохранены; новые registry-компоненты не устанавливались.
|
||||||
|
- Ограничения: HTTP fixtures не проверяют RouterOS/JWT/БД, сетевое применение и транзакционность составных операций; VXLAN доступен только для чтения/экспорта, live-пулы GRE не представлены API. Эти ограничения явно отображаются/описаны. Общий GRE failures ещё надо использовать в карте сети (этап 10) и оповещениях (11Б). Адаптивность проверена на 390px/1440px, полный accessibility/performance аудит — этап 12.
|
||||||
|
- Следующий шаг — 10.1: карта API/референсы этапа 10, затем достоверный опрос BGP. Выявлено: /bgp/sessions возвращает [] при отказе устройства, /ospf/all скрывает частичные ошибки, карта/оптимизатор превращают отказ каталогов в пустые данные. Полные детали и порядок будут сохранены в docs/ux-ui-stage-10.md. Локальный коммит без push.
|
||||||
|
|
||||||
## Блок 9.63 — приёмка GRE/VXLAN и мобильные панели (2026-09-30)
|
## Блок 9.63 — приёмка GRE/VXLAN и мобильные панели (2026-09-30)
|
||||||
|
|
||||||
- GRE/VXLAN используют компактную сводку в две колонки на телефоне и краткие подписи. GRE KPI теперь относится к выбранному устройству/туннелю, а не глобальному списку. Неизвестная сводка учитывает выбранный срез. Для этого KpiStatGrid получил необязательный gridClassName; существующие потребители сохраняют прежнюю раскладку.
|
- GRE/VXLAN используют компактную сводку в две колонки на телефоне и краткие подписи. GRE KPI теперь относится к выбранному устройству/туннелю, а не глобальному списку. Неизвестная сводка учитывает выбранный срез. Для этого KpiStatGrid получил необязательный gridClassName; существующие потребители сохраняют прежнюю раскладку.
|
||||||
|
|||||||
+10
-1
@@ -1,6 +1,6 @@
|
|||||||
# Этап 9: VPN и сетевые операции
|
# Этап 9: VPN и сетевые операции
|
||||||
|
|
||||||
Статус: начат 2026-09-28, выполнены блоки 9.1–9.63. Основа — существующие ReUI PRO/base-nova, Frame, ServerTileRail, DataGrid и формы. Правила применения сетевой конфигурации не меняем.
|
Статус: локальная приёмка завершена 2026-09-30, выполнены блоки 9.1–9.64. Внешние ограничения и проверки — в блоке 9.64. Основа — существующие ReUI PRO/base-nova, Frame, ServerTileRail, DataGrid и формы. Правила применения сетевой конфигурации не меняем.
|
||||||
|
|
||||||
## Схема и референсы принятого плана
|
## Схема и референсы принятого плана
|
||||||
|
|
||||||
@@ -369,3 +369,12 @@ Live-копирование читает актуальный целевой rul
|
|||||||
- Просмотрены восемь PNG в docs/ux-ui/screens: GRE/VXLAN и формы/экспорт для ПК/телефона. Четыре сценария keyboard/layout проверили точный serverId/VNI, сохранение, отсутствие переполнения, полную мобильную ширину и границы кнопок footer. Общая регрессия этапа 9: 183 E2E прошли (source-конфигурации проверяются отдельно). Production frontend build — 34 страницы; TypeScript/lint/diff-check чистые. Backend test:live-maps, test:config-sync и unit экспортов прошли.
|
- Просмотрены восемь PNG в docs/ux-ui/screens: GRE/VXLAN и формы/экспорт для ПК/телефона. Четыре сценария keyboard/layout проверили точный serverId/VNI, сохранение, отсутствие переполнения, полную мобильную ширину и границы кнопок footer. Общая регрессия этапа 9: 183 E2E прошли (source-конфигурации проверяются отдельно). Production frontend build — 34 страницы; TypeScript/lint/diff-check чистые. Backend test:live-maps, test:config-sync и unit экспортов прошли.
|
||||||
- Перегенерированные прежние Filters/IPsec PNG восстановлены к своим закоммиченным вариантам; новых продуктовых изменений там нет. Далее — отдельное исправление serverId GRE API и фиксация границ завершения этапа 9. Реальные RouterOS/JWT/БД не проверены. Локальный коммит без push.
|
- Перегенерированные прежние Filters/IPsec PNG восстановлены к своим закоммиченным вариантам; новых продуктовых изменений там нет. Далее — отдельное исправление serverId GRE API и фиксация границ завершения этапа 9. Реальные RouterOS/JWT/БД не проверены. Локальный коммит без push.
|
||||||
|
|
||||||
|
|
||||||
|
## Блок 9.64 — завершение локальной приёмки этапа 9 (2026-09-30)
|
||||||
|
|
||||||
|
- GET /gre/tunnels отклоняет явный невалидный serverId с HTTP 400 до БД/RouterOS вместо опроса всех устройств. Fastify inject проверил пять ID (включая пустой) для прямого GRE и общего Filters-каталога; TypeScript/backend build/lint прошли. Успешный и реальный выборный опрос требуют внешнего окружения.
|
||||||
|
- После 183 общей E2E регрессии прошли ещё 26 source-сценариев: Firewall 4, Filters 6, IPsec 6, GRE 6, VXLAN 4; отдельные Next-серверы запускались последовательно. Итого 209 сценариев последней приёмки этапа 9. Production frontend build — 34 страницы, backend build и unit каталогов/планов/экспортов чистые.
|
||||||
|
- Этап 9 завершён в границах локальной приёмки: операции показывают подтверждение API, ошибка сохраняет ввод/последние данные, повтор защищён, выбранное устройство не подменяется другим контекстом, unavailable API не выдаёт фиктивные действия/числа. ReUI Frame/base-nova и установленные компоненты сохранены; новые registry-компоненты не устанавливались.
|
||||||
|
- Ограничения: HTTP fixtures не проверяют RouterOS/JWT/БД, сетевое применение и транзакционность составных операций; VXLAN доступен только для чтения/экспорта, live-пулы GRE не представлены API. Эти ограничения явно отображаются/описаны. Общий GRE failures ещё надо использовать в карте сети (этап 10) и оповещениях (11Б). Адаптивность проверена на 390px/1440px, полный accessibility/performance аудит — этап 12.
|
||||||
|
- Следующий шаг — 10.1: карта API/референсы этапа 10, затем достоверный опрос BGP. Выявлено: /bgp/sessions возвращает [] при отказе устройства, /ospf/all скрывает частичные ошибки, карта/оптимизатор превращают отказ каталогов в пустые данные. Полные детали и порядок будут сохранены в docs/ux-ui-stage-10.md. Локальный коммит без push.
|
||||||
|
|
||||||
Reference in new issue
Block a user