// Copyright © 2023 Roberto Hidalgo // 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) } }