lwip_unittests.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #include "lwip_check.h"
  2. #include "ip4/test_ip4.h"
  3. #include "ip6/test_ip6.h"
  4. #include "udp/test_udp.h"
  5. #include "tcp/test_tcp.h"
  6. #include "tcp/test_tcp_oos.h"
  7. #include "tcp/test_tcp_state.h"
  8. #include "core/test_def.h"
  9. #include "core/test_dns.h"
  10. #include "core/test_mem.h"
  11. #include "core/test_netif.h"
  12. #include "core/test_pbuf.h"
  13. #include "core/test_timers.h"
  14. #include "etharp/test_etharp.h"
  15. #include "dhcp/test_dhcp.h"
  16. #include "mdns/test_mdns.h"
  17. #include "mqtt/test_mqtt.h"
  18. #include "api/test_sockets.h"
  19. #include "ppp/test_pppos.h"
  20. #include "lwip/init.h"
  21. #if !NO_SYS
  22. #include "lwip/tcpip.h"
  23. #endif
  24. /* This function is used for LWIP_RAND by some ports... */
  25. unsigned int
  26. lwip_port_rand(void)
  27. {
  28. return (unsigned int)rand();
  29. }
  30. Suite* create_suite(const char* name, testfunc *tests, size_t num_tests, SFun setup, SFun teardown)
  31. {
  32. size_t i;
  33. Suite *s = suite_create(name);
  34. for(i = 0; i < num_tests; i++) {
  35. TCase *tc_core = tcase_create(name);
  36. if ((setup != NULL) || (teardown != NULL)) {
  37. tcase_add_checked_fixture(tc_core, setup, teardown);
  38. }
  39. tcase_add_named_test(tc_core, tests[i]);
  40. suite_add_tcase(s, tc_core);
  41. }
  42. return s;
  43. }
  44. void lwip_check_ensure_no_alloc(unsigned int skip)
  45. {
  46. int i;
  47. unsigned int mask;
  48. if (!(skip & SKIP_HEAP)) {
  49. fail_unless(lwip_stats.mem.used == 0,
  50. "mem heap still has %d bytes allocated", lwip_stats.mem.used);
  51. }
  52. for (i = 0, mask = 1; i < MEMP_MAX; i++, mask <<= 1) {
  53. if (!(skip & mask)) {
  54. #if defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY
  55. fail_unless(lwip_stats.memp[i]->used == 0,
  56. "memp pool '%s' still has %d entries allocated",
  57. lwip_stats.memp[i]->name, lwip_stats.memp[i]->used);
  58. #else
  59. fail_unless(lwip_stats.memp[i]->used == 0,
  60. "memp pool %d still has %d entries allocated",
  61. i, lwip_stats.memp[i]->used);
  62. #endif
  63. }
  64. }
  65. }
  66. #ifdef LWIP_UNITTESTS_LIB
  67. int lwip_unittests_run(void)
  68. #else
  69. int main(void)
  70. #endif
  71. {
  72. int number_failed;
  73. SRunner *sr;
  74. size_t i;
  75. suite_getter_fn* suites[] = {
  76. ip4_suite,
  77. ip6_suite,
  78. udp_suite,
  79. tcp_suite,
  80. tcp_oos_suite,
  81. tcp_state_suite,
  82. def_suite,
  83. dns_suite,
  84. mem_suite,
  85. netif_suite,
  86. pbuf_suite,
  87. timers_suite,
  88. etharp_suite,
  89. dhcp_suite,
  90. mdns_suite,
  91. mqtt_suite,
  92. sockets_suite
  93. #if PPP_SUPPORT && PPPOS_SUPPORT
  94. , pppos_suite
  95. #endif /* PPP_SUPPORT && PPPOS_SUPPORT */
  96. };
  97. size_t num = sizeof(suites)/sizeof(void*);
  98. LWIP_ASSERT("No suites defined", num > 0);
  99. #if NO_SYS
  100. lwip_init();
  101. #else
  102. tcpip_init(NULL, NULL);
  103. #endif
  104. sr = srunner_create((suites[0])());
  105. srunner_set_xml(sr, "lwip_unittests.xml");
  106. for(i = 1; i < num; i++) {
  107. srunner_add_suite(sr, ((suite_getter_fn*)suites[i])());
  108. }
  109. #ifdef LWIP_UNITTESTS_NOFORK
  110. srunner_set_fork_status(sr, CK_NOFORK);
  111. #endif
  112. #ifdef LWIP_UNITTESTS_FORK
  113. srunner_set_fork_status(sr, CK_FORK);
  114. #endif
  115. srunner_run_all(sr, CK_NORMAL);
  116. number_failed = srunner_ntests_failed(sr);
  117. srunner_free(sr);
  118. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  119. }