Scert/backend/internal/domain/domain_test.go

74 lines
2.7 KiB
Go

package domain
import "testing"
func TestNewDomainTypes(t *testing.T) {
tests := []struct {
name string
domainName string
certificateType CertificateType
wantError bool
}{
{name: "单域名", domainName: "Example.COM", certificateType: CertificateSingle},
{name: "泛域名", domainName: "*.example.com", certificateType: CertificateWildcard},
{name: "泛域名缺少前缀", domainName: "example.com", certificateType: CertificateWildcard, wantError: true},
{name: "单域名使用泛域名", domainName: "*.example.com", certificateType: CertificateSingle, wantError: true},
{name: "非法证书类型", domainName: "example.com", certificateType: CertificateType("invalid"), wantError: true},
}
for _, item := range tests {
t.Run(item.name, func(t *testing.T) {
result, err := NewDomain(item.domainName, item.certificateType, nil)
if item.wantError {
if err == nil {
t.Fatal("预期返回错误,实际未返回")
}
return
}
if err != nil {
t.Fatalf("创建域名失败:%v", err)
}
if result.Name == "" || len(result.SANs) != 1 || result.SANs[0] != result.Name {
t.Fatalf("域名规范化结果不正确:%+v", result)
}
if !result.AutoRenew || result.ACMEEnvironment != ACMEEnvironmentStaging {
t.Fatalf("默认域名选项不正确:%+v", result)
}
})
}
}
func TestNewDomainSANIncludesPrimaryAndDeduplicates(t *testing.T) {
result, err := NewDomain("Example.com", CertificateSAN, []string{"www.example.com", "EXAMPLE.COM", "www.example.com"})
if err != nil {
t.Fatalf("创建 SAN 域名失败:%v", err)
}
if len(result.SANs) != 2 {
t.Fatalf("SAN 去重结果不正确:%v", result.SANs)
}
if result.SANs[0] != "example.com" || result.SANs[1] != "www.example.com" {
t.Fatalf("SAN 未自动包含主域名或顺序异常:%v", result.SANs)
}
}
func TestNewDomainSANValidation(t *testing.T) {
if _, err := NewDomain("example.com", CertificateSAN, []string{"example.com"}); err == nil {
t.Fatal("仅包含主域名的 SAN 配置未被拒绝")
}
if _, err := NewDomain("example.com", CertificateSAN, []string{"bad_domain"}); err == nil {
t.Fatal("非法 SAN 域名未被拒绝")
}
}
func TestNewDomainOptionsValidation(t *testing.T) {
item, err := NewDomainWithOptions("example.com", CertificateSingle, nil, false, ACMEEnvironmentProduction, "cloudflare")
if err != nil {
t.Fatalf("带选项创建域名失败:%v", err)
}
if item.AutoRenew || item.ACMEEnvironment != ACMEEnvironmentProduction || item.DNSProvider != "cloudflare" {
t.Fatalf("域名选项保存不正确:%+v", item)
}
if _, err := NewDomainWithOptions("example.com", CertificateSingle, nil, true, "invalid", ""); err == nil {
t.Fatal("非法 ACME 环境未被拒绝")
}
}