diff --git a/config/onix-bap/adapter.yaml b/config/onix-bap/adapter.yaml index a95c53f..878b8d9 100644 --- a/config/onix-bap/adapter.yaml +++ b/config/onix-bap/adapter.yaml @@ -7,6 +7,7 @@ log: - transaction_id - message_id - subscriber_id + - module_name http: port: 8080 timeout: diff --git a/config/onix-bpp/adapter.yaml b/config/onix-bpp/adapter.yaml index 8994980..ddee6a5 100644 --- a/config/onix-bpp/adapter.yaml +++ b/config/onix-bpp/adapter.yaml @@ -7,6 +7,7 @@ log: - transaction_id - message_id - subscriber_id + - module_name http: port: 8080 timeout: diff --git a/config/onix/adapter.yaml b/config/onix/adapter.yaml index a626c4e..1aee391 100644 --- a/config/onix/adapter.yaml +++ b/config/onix/adapter.yaml @@ -7,6 +7,7 @@ log: - transaction_id - message_id - subscriber_id + - module_name http: port: 8080 timeout: diff --git a/core/module/module.go b/core/module/module.go index 3b0fcef..2926995 100644 --- a/core/module/module.go +++ b/core/module/module.go @@ -44,6 +44,7 @@ func Register(ctx context.Context, mCfgs []Config, mux *http.ServeMux, mgr handl return fmt.Errorf("failed to add middleware: %w", err) } + h = moduleCtxMiddleware(c.Name, h) log.Debugf(ctx, "Registering handler %s, of type %s @ %s", c.Name, c.Handler.Type, c.Path) mux.Handle(c.Path, h) } @@ -71,3 +72,10 @@ func addMiddleware(ctx context.Context, mgr handler.PluginManager, handler http. log.Debugf(ctx, "Middleware chain setup completed") return handler, nil } + +func moduleCtxMiddleware(moduleName string, next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx := context.WithValue(r.Context(), "module_name", moduleName) + next.ServeHTTP(w, r.WithContext(ctx)) + }) +} diff --git a/core/module/module_test.go b/core/module/module_test.go index 8f9016c..fc191af 100644 --- a/core/module/module_test.go +++ b/core/module/module_test.go @@ -4,6 +4,7 @@ import ( "context" "errors" "net/http" + "net/http/httptest" "testing" "github.com/beckn/beckn-onix/core/module/handler" @@ -97,6 +98,26 @@ func TestRegisterSuccess(t *testing.T) { if err != nil { t.Errorf("unexpected error: %v", err) } + + // Create a request and a response recorder + req := httptest.NewRequest(http.MethodGet, "/test", nil) + rec := httptest.NewRecorder() + + // Create a handler that extracts context + var capturedModuleName any + testHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + capturedModuleName = r.Context().Value("module_name") + w.WriteHeader(http.StatusOK) + }) + + wrappedHandler := moduleCtxMiddleware("test-module", testHandler) + wrappedHandler.ServeHTTP(rec, req) + + // Now verify if module name exists in context + if capturedModuleName != "test-module" { + t.Errorf("expected module_name in context to be 'test-module', got %v", capturedModuleName) + } + } // TestRegisterFailure tests scenarios where the handler registration should fail.