Scert/backend/internal/deployment/shared_paths_test.go
xuans e2200534d3 完善域名服务器多对多关联与共享路径预检,补齐回归源码及进度文档
支持同项目内域名与服务器双向复用,局部修改和清空不影响其他域名;在绑定保存、服务器编辑和部署前拒绝已知共享路径冲突。

新增仓储、接口、工作流与页面回归源码,同步任务状态和第三版接口交接。按要求先开发后统一测试,本批未运行测试、构建或部署,保留在途任务与主机别名等待办。
2026-09-28 21:51:05 +08:00

52 lines
2.2 KiB
Go

package deployment
import (
"errors"
"testing"
"git.pcux.cn/xuans/Scert/backend/internal/domain"
)
func TestSharedServerDomainPaths(t *testing.T) {
domains := []domain.Domain{
{ID: "a", Name: "a.example.test", CertificateType: domain.CertificateSingle},
{ID: "b", Name: "b.example.test", CertificateType: domain.CertificateSingle},
}
for _, tc := range []struct {
name string
server Server
conflict bool
}{
{name: "default_templates"},
{name: "english_templates", server: Server{CertificatePath: "/ssl/{domain}/cert.pem", CertificateChainPath: "/ssl/{domain}/chain.pem", PrivateKeyPath: "/ssl/{domain}/key.pem"}},
{name: "fixed_certificate", server: Server{CertificatePath: "/ssl/cert.pem"}, conflict: true},
{name: "fixed_chain", server: Server{CertificateChainPath: "/ssl/chain.pem"}, conflict: true},
{name: "fixed_key", server: Server{PrivateKeyPath: "/ssl/key.pem"}, conflict: true},
{name: "collapsed_placeholder", server: Server{CertificatePath: "/ssl/{domain}/../cert.pem"}, conflict: true},
{name: "cross_file_collision", server: Server{CertificatePath: "/ssl/{domain}/b.example.test", PrivateKeyPath: "/ssl/a.example.test/{domain}"}, conflict: true},
{name: "file_directory_collision", server: Server{CertificatePath: "/ssl/{domain}/b.example.test", PrivateKeyPath: "/ssl/a.example.test/{domain}/key.pem"}, conflict: true},
} {
t.Run(tc.name, func(t *testing.T) {
err := ValidateServerDomainPaths(tc.server, domains)
if tc.conflict {
if !errors.Is(err, ErrSharedPathConflict) {
t.Fatalf("共享路径冲突未拒绝:%v", err)
}
} else if err != nil {
t.Fatal(err)
}
})
}
if err := ValidateServerDomainPaths(Server{CertificatePath: "/ssl/cert.pem"}, domains[:1]); err != nil {
t.Fatalf("单域名固定路径应保持兼容:%v", err)
}
for _, item := range []domain.Domain{
{ID: "other", Name: "a.example.test", CertificateType: domain.CertificateSingle},
{ID: "wildcard", Name: "*.a.example.test", CertificateType: domain.CertificateSingle},
} {
if err := ValidateServerDomainPaths(Server{}, []domain.Domain{domains[0], item}); !errors.Is(err, ErrSharedPathConflict) {
t.Fatalf("规范化后同路径的资源未拒绝:%v", err)
}
}
}