支持同项目内域名与服务器双向复用,局部修改和清空不影响其他域名;在绑定保存、服务器编辑和部署前拒绝已知共享路径冲突。 新增仓储、接口、工作流与页面回归源码,同步任务状态和第三版接口交接。按要求先开发后统一测试,本批未运行测试、构建或部署,保留在途任务与主机别名等待办。
52 lines
2.2 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|