102 lines
2.6 KiB
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)
|
||
|
}
|
||
|
}
|