notification-controller/internal/notifier/datadog_fuzz_test.go

54 lines
1.2 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"
"github.com/stretchr/testify/require"
)
func Fuzz_DataDog(f *testing.F) {
f.Add("token", "error", "", []byte{}, []byte{})
f.Add("token", "info", "", []byte{}, []byte{})
f.Fuzz(func(t *testing.T,
apiKey, severity, message string, seed, response []byte) {
mux := http.NewServeMux()
mux.HandleFunc("/api/v1/events", func(w http.ResponseWriter, r *http.Request) {
_, err := w.Write(response)
require.NoError(t, err)
_, err = io.Copy(io.Discard, r.Body)
require.NoError(t, err)
require.NoError(t, r.Body.Close())
})
ts := httptest.NewServer(mux)
defer ts.Close()
var cert x509.CertPool
_ = fuzz.NewConsumer(seed).GenerateStruct(&cert)
dd, err := NewDataDog(ts.URL, "", &cert, apiKey)
if err != nil {
return
}
event := eventv1.Event{}
_ = fuzz.NewConsumer(seed).GenerateStruct(&event)
if event.Metadata == nil {
event.Metadata = map[string]string{}
}
event.Message = message
event.Severity = severity
_ = dd.Post(context.TODO(), event)
})
}