event-gateway/internal/source/http/http_test.go

102 lines
2.6 KiB
Go

// Copyright © 2023 Roberto Hidalgo <event-gateway@un.rob.mx>
// SPDX-License-Identifier: Apache-2.0
package http_test
import (
"bytes"
"net/http/httptest"
"reflect"
"testing"
"time"
"git.rob.mx/nidito/event-gateway/internal/config"
"git.rob.mx/nidito/event-gateway/internal/payload"
"git.rob.mx/nidito/event-gateway/internal/sink"
"git.rob.mx/nidito/event-gateway/internal/sink/debug"
"git.rob.mx/nidito/event-gateway/internal/source/http"
"git.rob.mx/nidito/event-gateway/internal/source/types"
"github.com/julienschmidt/httprouter"
"github.com/sirupsen/logrus"
)
func TestHTTPEmptyRouter(t *testing.T) {
logrus.SetLevel(logrus.DebugLevel)
server := http.New(nil)
evts := server.Events()
if len(evts) != 0 {
t.Fatalf("new http source has non-zero sources: %+v", evts)
}
res := httptest.NewRecorder()
req := httptest.NewRequest("POST", "/-/some-urlsafe-key", bytes.NewBufferString(`{"test": "test}`))
server.ServeHTTP(res, req)
body := res.Body.String()
if body != "ignored" {
t.Fatalf("unexpected response wanted ignored, got: %s", body)
}
}
func TestHTTPRegistration(t *testing.T) {
logrus.SetLevel(logrus.DebugLevel)
router := httprouter.New()
el := http.New(router)
target := &debug.Event{}
l := &config.Listener{
ID: "test",
Source: &config.RawSource{
Kind: types.HTTP,
Config: []byte(`{"path": "some-urlsafe-key"}`),
},
Event: target,
}
if err := el.Register(l); err != nil {
t.Fatalf("failed to register good service")
}
evts := el.Events()
expected := []string{"test"}
if !reflect.DeepEqual(evts, expected) {
t.Fatalf("unexpected source paths, wanted %+v, got %+v", expected, evts)
}
res := httptest.NewRecorder()
req := httptest.NewRequest("POST", "/-/some-urlsafe-key", bytes.NewBufferString(`{"test": "test"}`))
req.Header.Add("content-type", "application/json")
router.ServeHTTP(res, req)
body := res.Body.String()
if body != "processed" {
t.Fatalf("unexpected response wanted ok, got: %s", body)
}
time.Sleep(150 * time.Millisecond)
sI, err := sink.ForKind(target.Kind())
if err != nil {
t.Fatalf("could not get debug sink %s", err)
}
s := sI.(*debug.Sink)
if len(s.Calls) != 1 {
t.Fatalf("unexpected number of triggers called: %+v", s.Calls)
}
payload, err := payload.FromContext(s.Calls[0])
if err != nil {
t.Fatalf("Could not parse payload: %s", err)
}
if payload == nil {
t.Fatalf("No payload parsed: %s fn: %+v", payload, s.Calls[0])
}
wanted := map[string]any{"test": "test"}
if !reflect.DeepEqual(payload.Value, wanted) {
t.Fatalf("unexpected payload, wanted %+v, got: %+v", wanted, payload.Value)
}
}