116 lines
3.2 KiB
Go
116 lines
3.2 KiB
Go
package oci
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestRelayResourceNames_Deterministic(t *testing.T) {
|
|
tenancy := "ocid1.tenancy.oc1..aaaaexampletenant"
|
|
a := relayResourceNames(tenancy)
|
|
b := relayResourceNames(tenancy)
|
|
if a != b {
|
|
t.Fatalf("同 tenancy 派生不一致: %+v vs %+v", a, b)
|
|
}
|
|
}
|
|
|
|
func TestRelayResourceNames_DistinctTenancies(t *testing.T) {
|
|
cases := []string{
|
|
"ocid1.tenancy.oc1..aaaaaaaaaa",
|
|
"ocid1.tenancy.oc1..bbbbbbbbbb",
|
|
"ocid1.tenancy.oc1..cccccccccc",
|
|
}
|
|
seen := map[string]string{}
|
|
for _, tenancy := range cases {
|
|
n := relayResourceNames(tenancy)
|
|
if got, ok := seen[n.TopicPrefix]; ok {
|
|
t.Fatalf("前缀冲突: %s 与 %s 同为 %s", tenancy, got, n.TopicPrefix)
|
|
}
|
|
seen[n.TopicPrefix] = tenancy
|
|
assertNoBrandLeak(t, tenancy, n)
|
|
}
|
|
}
|
|
|
|
// assertNoBrandLeak 断言派生结果不含品牌明文,以及格式符合预期。
|
|
func assertNoBrandLeak(t *testing.T, tenancy string, n relayNames) {
|
|
t.Helper()
|
|
banned := []string{"oci-portal", "ociportal", "logs", "portal"}
|
|
fields := []struct {
|
|
name string
|
|
value string
|
|
}{
|
|
{"TopicPrefix", n.TopicPrefix},
|
|
{"PolicyName", n.PolicyName},
|
|
{"ConnectorName", n.ConnectorName},
|
|
}
|
|
for _, f := range fields {
|
|
lower := strings.ToLower(f.value)
|
|
for _, b := range banned {
|
|
if strings.Contains(lower, b) {
|
|
t.Errorf("tenancy %s: %s=%q 含品牌明文 %q", tenancy, f.name, f.value, b)
|
|
}
|
|
}
|
|
if !regexp.MustCompile(`^[0-9a-f]{8}-audit(-p)?$`).MatchString(f.value) {
|
|
t.Errorf("tenancy %s: %s=%q 不符合 <8hex>-audit(-p)? 格式", tenancy, f.name, f.value)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestRelayTopicNewName_Suffix(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
prefix string
|
|
}{
|
|
{name: "标准前缀", prefix: "c3f2a1b0-audit"},
|
|
{name: "legacy 前缀兼容", prefix: legacyRelayTopicPrefix},
|
|
}
|
|
pat := regexp.MustCompile(`^[0-9a-f]{8}$`)
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := relayTopicNewName(tt.prefix)
|
|
if err != nil {
|
|
t.Fatalf("生成失败: %v", err)
|
|
}
|
|
if !strings.HasPrefix(got, tt.prefix+"-") {
|
|
t.Errorf("前缀不符: got=%q, prefix=%q", got, tt.prefix)
|
|
}
|
|
suffix := strings.TrimPrefix(got, tt.prefix+"-")
|
|
if !pat.MatchString(suffix) {
|
|
t.Errorf("后缀非 8 hex: got=%q, suffix=%q", got, suffix)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLegacyPrefixes_Unchanged(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
got string
|
|
want string
|
|
}{
|
|
{name: "Topic legacy", got: legacyRelayTopicPrefix, want: "ociportal-logs"},
|
|
{name: "Policy legacy", got: legacyRelayPolicyName, want: "ociportal-logs-sch"},
|
|
{name: "Connector legacy", got: legacyRelayConnectorName, want: "ociportal-logs"},
|
|
}
|
|
for _, tt := range cases {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if tt.got != tt.want {
|
|
t.Errorf("legacy 常量被误改: got=%q, want=%q", tt.got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRelayDescriptions_Neutral(t *testing.T) {
|
|
banned := []string{"oci-portal", "ociportal", "日志回传", "面板"}
|
|
for _, desc := range []string{relayTopicDescNew, relayPolicyDescNew} {
|
|
lower := strings.ToLower(desc)
|
|
for _, b := range banned {
|
|
if strings.Contains(lower, strings.ToLower(b)) {
|
|
t.Errorf("描述含品牌明文 %q: %q", b, desc)
|
|
}
|
|
}
|
|
}
|
|
}
|