Smail/test/review/plugin_framework_findings_test.go

44 lines
1.3 KiB
Go

package framework
import (
"bytes"
"encoding/json"
"errors"
"net/http"
"net/http/httptest"
"testing"
)
func TestAuditSendAfterFailureMustReachPlugin(t *testing.T) {
for _, failed := range []bool{false, true} {
name := "success"
failure := error(nil)
if failed {
name = "delivery-failed"
failure = errors.New("audit delivery rejected")
}
t.Run(name, func(t *testing.T) {
payload := HookDTO{ErrMap: map[string]error{"example.invalid": failure}}
body, err := json.Marshal(payload)
if err != nil {
t.Fatal(err)
}
plugin := &Plugin{name: "audit"}
called := false
received := ""
handler := plugin.handleHookDTO("SendAfter", func(dto *HookDTO) {
called = true
if dto.ErrMap["example.invalid"] != nil {
received = dto.ErrMap["example.invalid"].Error()
}
})
recorder := httptest.NewRecorder()
handler(recorder, httptest.NewRequest(http.MethodPost, "/SendAfter", bytes.NewReader(body)))
t.Logf("failed=%v status=%d callback=%v preserved_error=%v", failed, recorder.Code, called, received == "audit delivery rejected")
if recorder.Code != http.StatusOK || !called || (failed && received != "audit delivery rejected") {
t.Error("发送失败时插件回调必须收到可序列化的错误信息")
}
})
}
}