package logrus_bugsnag import ( "encoding/json" "errors" "io/ioutil" "net/http" "net/http/httptest" "testing" "time" "github.com/Sirupsen/logrus" "github.com/bugsnag/bugsnag-go" ) type notice struct { Events []struct { Exceptions []struct { Message string `json:"message"` } `json:"exceptions"` } `json:"events"` } func TestNoticeReceived(t *testing.T) { msg := make(chan string, 1) expectedMsg := "foo" ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var notice notice data, _ := ioutil.ReadAll(r.Body) if err := json.Unmarshal(data, ¬ice); err != nil { t.Error(err) } _ = r.Body.Close() msg <- notice.Events[0].Exceptions[0].Message })) defer ts.Close() hook := &bugsnagHook{} bugsnag.Configure(bugsnag.Configuration{ Endpoint: ts.URL, ReleaseStage: "production", APIKey: "12345678901234567890123456789012", Synchronous: true, }) log := logrus.New() log.Hooks.Add(hook) log.WithFields(logrus.Fields{ "error": errors.New(expectedMsg), }).Error("Bugsnag will not see this string") select { case received := <-msg: if received != expectedMsg { t.Errorf("Unexpected message received: %s", received) } case <-time.After(time.Second): t.Error("Timed out; no notice received by Bugsnag API") } }