diff --git a/router.go b/router.go index 2903efc2..dd55e0dd 100644 --- a/router.go +++ b/router.go @@ -99,7 +99,7 @@ func (r *router) addRoute(topic string, callback MessageHandler) { r.Lock() defer r.Unlock() for e := r.routes.Front(); e != nil; e = e.Next() { - if e.Value.(*route).match(topic) { + if e.Value.(*route).topic == topic { r := e.Value.(*route) r.callback = callback return @@ -114,7 +114,7 @@ func (r *router) deleteRoute(topic string) { r.Lock() defer r.Unlock() for e := r.routes.Front(); e != nil; e = e.Next() { - if e.Value.(*route).match(topic) { + if e.Value.(*route).topic == topic { r.routes.Remove(e) return } diff --git a/unit_router_test.go b/unit_router_test.go index d2d1d816..6bccbe47 100644 --- a/unit_router_test.go +++ b/unit_router_test.go @@ -44,6 +44,32 @@ func Test_AddRoute(t *testing.T) { } } +func Test_AddRoute_Wildcards(t *testing.T) { + router, _ := newRouter() + cb := func(client Client, msg Message) { + } + router.addRoute("#", cb) + router.addRoute("topic1", cb) + + if router.routes.Len() != 2 { + t.Fatalf("addRoute should only override routes on exact topic match") + } +} + +func Test_DeleteRoute_Wildcards(t *testing.T) { + router, _ := newRouter() + cb := func(client Client, msg Message) { + } + router.addRoute("#", cb) + router.addRoute("topic1", cb) + router.deleteRoute("topic1") + + expected := "#" + got := router.routes.Front().Value.(*route).topic; if !(router.routes.Front().Value.(*route).topic == "#") { + t.Fatalf("deleteRoute deleted wrong route when wildcards are used, got topic '%s', expected route with topic '%s'", got, expected) + } +} + func Test_Match(t *testing.T) { router, _ := newRouter() router.addRoute("/alpha", nil)