diff --git a/include/etl/message_broker.h b/include/etl/message_broker.h index 1a3fe11e..74c7f631 100644 --- a/include/etl/message_broker.h +++ b/include/etl/message_broker.h @@ -151,6 +151,7 @@ namespace etl : imessage_router(id_) , head() { + ETL_ASSERT((id_ <= etl::imessage_router::MAX_MESSAGE_ROUTER) || (id_ == etl::imessage_router::MESSAGE_BROKER), ETL_ERROR(etl::message_router_illegal_id)); } //******************************************* diff --git a/test/test_message_bus.cpp b/test/test_message_bus.cpp index f002f63c..9407ee36 100644 --- a/test/test_message_bus.cpp +++ b/test/test_message_bus.cpp @@ -224,12 +224,35 @@ namespace int message_unknown_count; }; - SUITE(test_message_router) + //*************************************************************************** + template + class MessageBus : public etl::message_bus + { + public: + + MessageBus() + : message_count(0) + { + } + + using etl::message_bus::receive; + + // Hook 'receive' to count the incomimg messages. + void receive(etl::message_router_id_t id, const etl::imessage& msg) + { + ++message_count; + etl::message_bus::receive(id, msg); + } + + int message_count; + }; + + SUITE(test_message_bus) { //************************************************************************* TEST(message_bus_subscribe_unsubscribe) { - etl::message_bus<2> bus1; + MessageBus<2> bus1; RouterA router1(0); RouterB router2(1); @@ -260,14 +283,16 @@ namespace // Erase router from empty list. bus1.unsubscribe(router2); CHECK_EQUAL(0U, bus1.size()); + + CHECK_EQUAL(0, bus1.message_count); } //************************************************************************* TEST(message_bus_subscribe_unsubscribe_sub_bus) { - etl::message_bus<4> bus1; - etl::message_bus<2> bus2; - etl::message_bus<3> bus3; + MessageBus<4> bus1; + MessageBus<2> bus2; + MessageBus<3> bus3; RouterA router1(ROUTER1); RouterA router2(ROUTER2); @@ -289,12 +314,16 @@ namespace bus1.unsubscribe(etl::imessage_bus::ALL_MESSAGE_ROUTERS); CHECK_EQUAL(0U, bus1.size()); + + CHECK_EQUAL(0, bus1.message_count); + CHECK_EQUAL(0, bus2.message_count); + CHECK_EQUAL(0, bus3.message_count); } //************************************************************************* TEST(message_bus_broadcast) { - etl::message_bus<2> bus1; + MessageBus<2> bus1; RouterA router1(ROUTER1); RouterB router2(ROUTER2); @@ -376,12 +405,14 @@ namespace CHECK_EQUAL(0, router2.message_unknown_count); CHECK_EQUAL(7, callback.message5_count); + + CHECK_EQUAL(4, bus1.message_count); } //************************************************************************* TEST(message_bus_broadcast_as_router) { - etl::message_bus<2> bus1; + MessageBus<2> bus1; RouterA router1(ROUTER1); RouterB router2(ROUTER2); @@ -466,12 +497,14 @@ namespace CHECK_EQUAL(0, router2.message_unknown_count); CHECK_EQUAL(7, callback.message5_count); + + CHECK_EQUAL(4, bus1.message_count); } //************************************************************************* TEST(message_bus_addressed) { - etl::message_bus<2> bus1; + MessageBus<2> bus1; RouterA router1(ROUTER1); RouterB router2(ROUTER2); @@ -571,12 +604,14 @@ namespace CHECK_EQUAL(0, router2.message_unknown_count); CHECK_EQUAL(4, callback.message5_count); + + CHECK_EQUAL(5, bus1.message_count); } //************************************************************************* TEST(message_bus_addressed_duplicate_router_id) { - etl::message_bus<3> bus1; + MessageBus<3> bus1; RouterA router1(ROUTER1); RouterB router2(ROUTER1); @@ -613,13 +648,15 @@ namespace CHECK_EQUAL(0, router3.message_unknown_count); CHECK_EQUAL(2, callback.message5_count); + + CHECK_EQUAL(1, bus1.message_count); } //************************************************************************* TEST(message_bus_broadcast_addressed_sub_bus) { - etl::message_bus<3> bus1; - etl::message_bus<2> bus2; + MessageBus<3> bus1; + MessageBus<2> bus2; RouterA router1(ROUTER1); RouterA router2(ROUTER2); @@ -729,14 +766,17 @@ namespace CHECK_EQUAL(0, router4.message_unknown_count); CHECK_EQUAL(6, callback.message5_count); + + CHECK_EQUAL(3, bus1.message_count); + CHECK_EQUAL(3, bus2.message_count); } //************************************************************************* TEST(message_bus_broadcast_order) { - etl::message_bus<4> bus1; - etl::message_bus<2> bus2; - etl::message_bus<2> bus3; + MessageBus<4> bus1; + MessageBus<2> bus2; + MessageBus<2> bus3; RouterA router1(ROUTER1); RouterA router2(ROUTER2); @@ -766,13 +806,17 @@ namespace CHECK_EQUAL(2, router4b.order); CHECK_EQUAL(3, router4a.order); CHECK_EQUAL(4, router3.order); + + CHECK_EQUAL(1, bus1.message_count); + CHECK_EQUAL(1, bus2.message_count); + CHECK_EQUAL(1, bus3.message_count); } //************************************************************************* TEST(message_bus_broadcast_addressed_successor_bus) { - etl::message_bus<3> bus1; - etl::message_bus<2> bus2; + MessageBus<3> bus1; + MessageBus<2> bus2; RouterA router1(ROUTER1); RouterA router2(ROUTER2); @@ -882,12 +926,15 @@ namespace CHECK_EQUAL(0, router4.message_unknown_count); CHECK_EQUAL(6, callback.message5_count); + + CHECK_EQUAL(3, bus1.message_count); + CHECK_EQUAL(3, bus2.message_count); } //************************************************************************* TEST(message_bus_successor_to_message_producer) { - etl::message_bus<2> bus; + MessageBus<2> bus; etl::message_producer producer(ROUTER2); RouterA router(ROUTER1); Response message; @@ -901,6 +948,8 @@ namespace producer.receive(message); CHECK_EQUAL(1U, router.message5_count); + + CHECK_EQUAL(1, bus.message_count); } }; }