44 lines
1.3 KiB
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("发送失败时插件回调必须收到可序列化的错误信息")
|
|
}
|
|
})
|
|
}
|
|
}
|