Smail/test/backend/mail_log_result_test.go
smail dd6258c98b
Some checks are pending
Security Checks / security (push) Waiting to run
补齐三类日志的触发操作和结果并完善运行事件展示
2026-09-09 02:48:07 +08:00

46 lines
1.5 KiB
Go

package logstore
import (
"context"
"encoding/json"
"errors"
"net"
"net/textproto"
"strings"
"testing"
)
func TestMailLogKeepsTriggerStageAndOutcomeWithoutRemoteSecrets(t *testing.T) {
s := testStore(t)
runtime := Start(s)
defer runtime.Stop()
for _, item := range []struct{ result, trigger, stage string }{
{"accepted", "网页写信", "对外投递"},
{"partial", "邮件规则转发", "对外投递"},
{"failure", "SMTP 收信", "解析邮件"},
{"discarded", "SMTP 收信", "收信策略"},
} {
MailResult(42, "outbound", "sender@example.com", 3, 100, item.result,
MailDetails{Trigger: item.trigger, Stage: item.stage, AcceptedCount: 1})
entries, err := s.Query(context.Background(), Query{Kind: "mail", Limit: 1})
if err != nil || len(entries) != 1 {
t.Fatal(err)
}
var payload map[string]any
if json.Unmarshal(entries[0].Payload, &payload) != nil {
t.Fatal("无效邮件载荷")
}
if entries[0].Result != item.result || payload["trigger"] != item.trigger || payload["stage"] != item.stage || payload["outcome"] == "" || payload["acceptedCount"] != float64(1) {
t.Fatalf("缺少操作或结果:%+v", payload)
}
}
for _, cause := range []error{
errors.New("private-token"), &textproto.Error{Code: 550, Msg: "private-token"},
&net.DNSError{Err: "private-token", Name: "private-domain", IsNotFound: true},
} {
if reason := MailFailureReason(cause); reason == "" || strings.Contains(reason, "private-") {
t.Fatal("远端敏感内容泄露")
}
}
}