Files
opsx ef7eb378d2 feat: 新增 GRE 隧道协议,管理端口调整为 18080
- backend: 新增 GRE 隧道实现(ip tunnel 点对点互联),binmgr 支持 iproute2
- backend: api/identity 调整,各协议 service(gre/ikev2/ipsec/l2tp/openvpn)统一改动
- backend: OpenVPN 认证辅助与用户口令同步逻辑完善
- frontend: 协议图标/向导/编辑器支持 GRE,VPN 用户页重构(234 行)
- frontend: 新增 RouteListInput 路由列表输入组件,Dashboard/Layout 优化
- i18n: 中英文文案同步更新
- test: 新增 binmgr/common/gre 单测,openvpn 测试补充
- docs: README 补充 GRE 说明,默认监听端口 8080 → 18080
- chore: .gitignore 增加 opsx-vpn.previous(构建备份二进制)
2026-10-20 20:58:58 +08:00

40 lines
1.1 KiB
Go

package service
import (
"os"
"path/filepath"
"testing"
"vpn-platform/backend/internal/model"
)
func TestInstanceSnapshotRestore(t *testing.T) {
base := t.TempDir()
t.Setenv("VPN_DATA_DIR", base)
tunnel := &model.Tunnel{ID: 42, Protocol: "openvpn"}
if _, err := WriteConfig(tunnel, "server.conf", "old-config"); err != nil {
t.Fatal(err)
}
backup, err := SnapshotInstance(tunnel)
if err != nil {
t.Fatal(err)
}
defer CleanupInstanceSnapshot(backup)
if _, err := WriteConfig(tunnel, "server.conf", "new-config"); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(InstanceDir(tunnel), "temporary"), []byte("new"), 0o600); err != nil {
t.Fatal(err)
}
if err := RestoreInstanceSnapshot(tunnel, backup); err != nil {
t.Fatal(err)
}
got, err := os.ReadFile(filepath.Join(InstanceDir(tunnel), "server.conf"))
if err != nil || string(got) != "old-config" {
t.Fatalf("restored config = %q, err=%v", got, err)
}
if _, err := os.Stat(filepath.Join(InstanceDir(tunnel), "temporary")); !os.IsNotExist(err) {
t.Fatalf("temporary file remained after restore: %v", err)
}
}