Scert/backend/internal/firewall/policy_test.go

55 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package firewall
import (
"context"
"errors"
"strings"
"testing"
)
func TestFirewallModeRequiresExplicitExternalPolicy(t *testing.T) {
for _, mode := range []string{"", "auto", " AUTO "} {
selected, err := NewManagerWithMode(mode)
if err != nil {
t.Fatal(err)
}
if _, ok := selected.(*manager); !ok {
t.Fatal("默认模式必须保留自动管理,不能悄悄降级")
}
}
for _, mode := range []string{"disabled", "skip", "external;auto"} {
if _, err := NewManagerWithMode(mode); err == nil {
t.Fatal("未知防火墙模式必须拒绝")
}
}
}
func TestExternalFirewallNeverClaimsRulesWereVerifiedOrCreated(t *testing.T) {
selected, err := NewManagerWithMode(" EXTERNAL ")
if err != nil {
t.Fatal(err)
}
result, err := selected.OpenTCP(context.Background(), 8443)
if err != nil || result.Created || result.Backend != BackendExternal || result.Port != 8443 ||
!strings.Contains(result.Message, "未检查或修改") || !strings.Contains(result.Message, "8443") {
t.Fatalf("外部管理结果不得冒充规则验证成功:%+v,%v", result, err)
}
if err := selected.Rollback(context.Background(), result); err != nil {
t.Fatal(err)
}
result.Created = true
if err := selected.Rollback(context.Background(), result); err == nil {
t.Fatal("外部管理器不能操作其他管理器的规则")
}
for _, port := range []int{-1, 0, 65536} {
if _, err := selected.OpenTCP(context.Background(), port); err == nil {
t.Fatal("外部管理模式也必须拒绝无效端口")
}
}
ctx, cancel := context.WithCancel(context.Background())
cancel()
if _, err := selected.OpenTCP(ctx, 8443); !errors.Is(err, context.Canceled) {
t.Fatal("取消请求不应继续执行")
}
}