bridge_topic_test.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #include "config.h"
  2. #include <stdio.h>
  3. #include <CUnit/CUnit.h>
  4. #include <CUnit/Basic.h>
  5. #define WITH_BRIDGE
  6. #define WITH_BROKER
  7. #include "mosquitto_broker_internal.h"
  8. #include "property_mosq.h"
  9. #include "packet_mosq.h"
  10. static void map_valid_helper(const char *topic, const char *local_prefix, const char *remote_prefix, const char *incoming, const char *expected)
  11. {
  12. struct mosquitto mosq;
  13. struct mosquitto__bridge bridge;
  14. char *map_topic;
  15. int rc;
  16. memset(&mosq, 0, sizeof(struct mosquitto));
  17. memset(&bridge, 0, sizeof(struct mosquitto__bridge));
  18. mosq.bridge = &bridge;
  19. rc = bridge__add_topic(&bridge, topic, bd_in, 0, local_prefix, remote_prefix);
  20. CU_ASSERT_EQUAL(rc, 0);
  21. map_topic = strdup(incoming);
  22. rc = bridge__remap_topic_in(&mosq, &map_topic);
  23. CU_ASSERT_EQUAL(rc, 0);
  24. CU_ASSERT_PTR_NOT_NULL(map_topic);
  25. if(topic){
  26. CU_ASSERT_STRING_EQUAL(map_topic, expected);
  27. free(map_topic);
  28. }
  29. }
  30. static void map_invalid_helper(const char *topic, const char *local_prefix, const char *remote_prefix)
  31. {
  32. struct mosquitto mosq;
  33. struct mosquitto__bridge bridge;
  34. int rc;
  35. memset(&mosq, 0, sizeof(struct mosquitto));
  36. memset(&bridge, 0, sizeof(struct mosquitto__bridge));
  37. mosq.bridge = &bridge;
  38. rc = bridge__add_topic(&bridge, topic, bd_in, 0, local_prefix, remote_prefix);
  39. CU_ASSERT_NOT_EQUAL(rc, 0);
  40. }
  41. static void TEST_remap_valid(void)
  42. {
  43. /* Examples from man page */
  44. map_valid_helper("pattern", "L/", "R/", "R/pattern", "L/pattern");
  45. map_valid_helper("pattern", "L/", NULL, "pattern", "L/pattern");
  46. map_valid_helper("pattern", NULL, "R/", "R/pattern", "pattern");
  47. map_valid_helper("pattern", NULL, NULL, "pattern", "pattern");
  48. map_valid_helper(NULL, "local", "remote", "local", "remote");
  49. }
  50. static void TEST_remap_invalid(void)
  51. {
  52. /* Examples from man page */
  53. map_invalid_helper(NULL, "L/", NULL);
  54. map_invalid_helper(NULL, NULL, "R/");
  55. map_invalid_helper(NULL, NULL, NULL);
  56. }
  57. /* ========================================================================
  58. * TEST SUITE SETUP
  59. * ======================================================================== */
  60. int init_bridge_tests(void)
  61. {
  62. CU_pSuite test_suite = NULL;
  63. test_suite = CU_add_suite("Bridge remap", NULL, NULL);
  64. if(!test_suite){
  65. printf("Error adding CUnit Bridge remap test suite.\n");
  66. return 1;
  67. }
  68. if(0
  69. || !CU_add_test(test_suite, "Remap valid", TEST_remap_valid)
  70. || !CU_add_test(test_suite, "Remap invalid", TEST_remap_invalid)
  71. ){
  72. printf("Error adding Bridge remap CUnit tests.\n");
  73. return 1;
  74. }
  75. return 0;
  76. }
  77. int main(int argc, char *argv[])
  78. {
  79. unsigned int fails;
  80. UNUSED(argc);
  81. UNUSED(argv);
  82. if(CU_initialize_registry() != CUE_SUCCESS){
  83. printf("Error initializing CUnit registry.\n");
  84. return 1;
  85. }
  86. if(0
  87. || init_bridge_tests()
  88. ){
  89. CU_cleanup_registry();
  90. return 1;
  91. }
  92. CU_basic_set_mode(CU_BRM_VERBOSE);
  93. CU_basic_run_tests();
  94. fails = CU_get_number_of_failures();
  95. CU_cleanup_registry();
  96. return (int)fails;
  97. }