notification-controller/internal/notifier/pagerduty_fuzz_test.go

57 lines
1.3 KiB
Go

package notifier
import (
"context"
"crypto/x509"
"io"
"net/http"
"net/http/httptest"
"testing"
fuzz "github.com/AdaLogics/go-fuzz-headers"
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
)
func Fuzz_PagerDuty(f *testing.F) {
f.Add("token", "", "error", "", []byte{}, []byte{})
f.Add("token", "", "info", "", []byte{}, []byte{})
f.Fuzz(func(t *testing.T,
routingKey, commitStatus, severity, message string, seed, response []byte) {
mux := http.NewServeMux()
mux.HandleFunc("/v2/enqueue", func(w http.ResponseWriter, r *http.Request) {
w.Write(response)
io.Copy(io.Discard, r.Body)
r.Body.Close()
})
mux.HandleFunc("/v2/change/enqueue", func(w http.ResponseWriter, r *http.Request) {
w.Write(response)
io.Copy(io.Discard, r.Body)
r.Body.Close()
})
ts := httptest.NewServer(mux)
defer ts.Close()
var cert x509.CertPool
_ = fuzz.NewConsumer(seed).GenerateStruct(&cert)
pd, err := NewPagerDuty(ts.URL, "", &cert, routingKey)
if err != nil {
return
}
event := eventv1.Event{}
_ = fuzz.NewConsumer(seed).GenerateStruct(&event)
if event.Metadata == nil {
event.Metadata = map[string]string{}
}
event.Metadata["commit_status"] = commitStatus
event.Message = message
event.Severity = severity
_ = pd.Post(context.TODO(), event)
})
}