fix(network): исправить keepalive GRE и каталог IPsec

This commit is contained in:
Denozordec committed 2026-10-13 21:15:49 +07:00
1 parent 3f3f06f147
commit 727e35f985
28 files changed
+1722 -37

No files matched your search

+7
View File
@@ -0,0 +1,7 @@
import assert from 'node:assert/strict'
import {filtersGreResponseSchema} from './filters-response'
const t={id:'*1',serverId:'1',name:'own210',localAddress:'192.0.2.1',remoteAddress:'192.0.2.2',localInnerIp:'10.0.0.1/30',remoteInnerIp:'10.0.0.2/30',poolId:'',ipsec:{secret:''},mtu:1476,keepaliveInterval:60,keepaliveRetries:3,dscp:'inherit',clampTcpMss:true,allowFastPath:false,comment:'',enabled:true,status:'up'}
assert.equal(filtersGreResponseSchema.safeParse({tunnels:[t]}).success,true)
assert.equal(filtersGreResponseSchema.safeParse({tunnels:[{...t,ipsec:null}]}).success,true)
assert.equal(filtersGreResponseSchema.safeParse({tunnels:[{...t,ipsec:{secret:'must-not-be-in-catalog'}}]}).success,false)
console.log('Filters GRE catalog: configured IPsec accepted without key material')
+2 -1
View File
@@ -15,7 +15,8 @@ export const filtersMutationSchema = z.object({ ok: z.literal(true), rules: filt
export const filtersGreResponseSchema = z.object({
tunnels: z.array(z.object({
id: z.string().min(1), serverId: z.string().min(1), name: z.string(), localAddress: z.string(), remoteAddress: z.string(),
localInnerIp: z.string(), remoteInnerIp: z.string(), poolId: z.string(), ipsec: z.null(), mtu: z.number().int().nonnegative(),
localInnerIp: z.string(), remoteInnerIp: z.string(), poolId: z.string(),
ipsec: z.object({ secret: z.literal("") }).nullable(), mtu: z.number().int().nonnegative(),
keepaliveInterval: z.number().int().nonnegative(), keepaliveRetries: z.number().int().nonnegative(),
dscp: z.union([z.literal("inherit"), z.number().int().min(0).max(63)]), clampTcpMss: z.boolean(), allowFastPath: z.boolean(),
comment: z.string(), enabled: z.boolean(), status: z.enum(["up", "down", "degraded"]),
+5
View File
@@ -2,6 +2,11 @@ import {test} from "node:test"
import assert from "node:assert/strict"
import {validateNetworkMapSnapshot} from "./network-map-response"
const server={id:1,name:"Router",host:"192.0.2.1",type:"home-router",country:"RU",enabled:true,status:null,latency:0}
test("network map retains configured GRE IPsec without key material",()=>{
const tunnel={id:"*1",serverId:"1",name:"own210",localAddress:"192.0.2.1",remoteAddress:"192.0.2.2",localInnerIp:"10.0.0.1/30",remoteInnerIp:"10.0.0.2/30",poolId:"",ipsec:{secret:""},mtu:1476,keepaliveInterval:60,keepaliveRetries:3,dscp:"inherit",clampTcpMss:true,allowFastPath:false,comment:"",enabled:true,status:"up"}
const result=validateNetworkMapSnapshot([server],{tunnels:[tunnel],failures:[]},{probes:[]})
assert.deepEqual(result.tunnels[0].ipsec,{secret:""})
})
test("network map requires complete envelopes and preserves zero/null",()=>{
const result=validateNetworkMapSnapshot([server],{tunnels:[],failures:[]},{probes:[]})
assert.equal(result.servers[0].latency,0);assert.equal(result.servers[0].status,null)