fix(ui): подтверждать GRE перед тестом пропускной способности

This commit is contained in:
Denozordec committed 2026-10-01 04:20:19 +07:00
1 parent b856215c03
commit 155dfc5716
4 files changed
+75 -18

No files matched your search

+24
View File
@@ -62,3 +62,27 @@ for(const permission of ["mm:servers:read","mm:servers:write"])test("Диагн
else{await expect(run(page)).toBeEnabled();await run(page).click();await expect(page.getByText("РАЗРЕШЕНО",{exact:true})).toBeVisible();expect(posts).toBe(1)}
expect(greReads).toBe(0);await page.getByRole("button",{name:/BW-тест/}).click();await expect(page.getByRole("status").filter({hasText:"Для выбора GRE требуется mm:filters:read"})).toBeVisible();await expect(run(page)).toBeDisabled()
})
const tunnel={id:"*1",serverId:"1",name:"GRE-Тест",localAddress:"192.0.2.1",remoteAddress:"192.0.2.2",localInnerIp:"10.0.0.1",remoteInnerIp:"10.0.0.2",poolId:"",ipsec:null,mtu:1476,keepaliveInterval:10,keepaliveRetries:3,dscp:"inherit",clampTcpMss:true,allowFastPath:false,comment:"",enabled:true,status:"up"}
for(const kind of ["API","malformed","foreign"])test("Диагностика: GRE "+kind+" отличается от пустого списка",async({page})=>{
let fail=true;await page.route("**/api/filters/gre-tunnels?*",r=>r.fulfill(fail?(kind==="API"?{status:503,json:{error:"GRE отказ"}}:{json:{tunnels:kind==="foreign"?[{...tunnel,serverId:"2"}]:[{}]}}):{json:{tunnels:[tunnel]}}))
await page.route("**/api/servers/1/probes/run",r=>r.fulfill({json:{output:"BW подтверждён"}}))
await page.goto("/probes");await page.getByRole("button",{name:/BW-тест/}).click();await expect(page.getByRole("alert",{name:"GRE диагностики"})).toBeVisible();await expect(run(page)).toBeDisabled()
fail=false;await page.getByRole("button",{name:"Повторить GRE"}).click();await expect(run(page)).toBeEnabled();await run(page).click();await expect(page.getByText("BW подтверждён",{exact:true})).toBeVisible()
})
test("Диагностика: подтверждённый пустой GRE каталог",async({page})=>{
await page.goto("/probes");await page.getByRole("button",{name:/BW-тест/}).click();await expect(page.getByRole("status").filter({hasText:"У выбранного устройства нет GRE-туннелей"})).toBeVisible();await expect(page.getByRole("alert",{name:"GRE диагностики"})).toHaveCount(0);await expect(run(page)).toBeDisabled()
})
for(const fails of [false,true])test("Диагностика: поздний GRE прежнего устройства "+fails,async({page})=>{
let started=false,completed=false,release!:()=>void;const gate=new Promise<void>(r=>release=r)
await page.route("**/api/servers",r=>r.fulfill({json:[...devices,{...devices[0],id:2,name:"Второй",host:"192.0.2.2"}]}))
await page.route("**/api/filters/gre-tunnels?*",async r=>{if(new URL(r.request().url()).searchParams.get("serverId")==="2")return r.fulfill({json:{tunnels:[]}});started=true;await gate;try{await r.fulfill(fails?{status:503,json:{error:"СТАРЫЙ GRE ОТКАЗ"}}:{json:{tunnels:[tunnel]}})}catch{}finally{completed=true}})
await page.goto("/probes");await expect.poll(()=>started).toBe(true);await page.getByRole("option",{name:/Второй/}).click();await page.getByRole("button",{name:/BW-тест/}).click();await expect(page.getByRole("status").filter({hasText:"У выбранного устройства нет GRE-туннелей"})).toBeVisible();release();await expect.poll(()=>completed).toBe(true)
await expect(page.getByRole("alert",{name:"GRE диагностики"})).toHaveCount(0);await expect(page.getByText("GRE-Тест",{exact:true})).toHaveCount(0);await expect(run(page)).toBeDisabled()
})
for(const invalid of ["disabled","no-address"])test("Диагностика: BW недоступен для GRE "+invalid,async({page})=>{
let posts=0;await page.route("**/api/filters/gre-tunnels?*",r=>r.fulfill({json:{tunnels:[{...tunnel,enabled:invalid!=="disabled",remoteAddress:invalid==="no-address"?"":tunnel.remoteAddress}]}}));await page.route("**/api/servers/1/probes/run",r=>{posts++;return r.fulfill({json:{output:"НЕ ДОЛЖНО ВЫПОЛНЯТЬСЯ"}})})
await page.goto("/probes");await page.getByRole("button",{name:/BW-тест/}).click();await expect(page.getByRole("status").filter({hasText:"Выберите включённый GRE с адресом назначения"})).toBeVisible();await expect(run(page)).toBeDisabled();expect(posts).toBe(0)
})