Tests about a simple python3 fastcgi runner using libfcgi and the Python-C API.
python
c
wsgi
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

check_monitor.c 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #include <stdlib.h>
  2. #include <check.h>
  3. #include <stdio.h>
  4. #include "monitor.h"
  5. static const char *valids[] = {
  6. "tcp://localhost:8181",
  7. "tcp://127.0.0.1:81",
  8. "udp://localhost:8000",
  9. "udp://192.168.13.37:1234",
  10. //"tcp://::1:8000",
  11. "unix:///tmp/test/test.sock",
  12. "unix://foo.sock",
  13. NULL};
  14. static const char *valids6[] = {
  15. "tcp://localhost:8181",
  16. "udp://localhost:8000",
  17. //"tcp://::1:8000",
  18. "unix:///tmp/test/test.sock",
  19. "unix://foo.sock",
  20. NULL};
  21. static const char *invalids[] = {
  22. "localhost:8000",
  23. "ttt://127.0.0.1:81",
  24. "tcp://","udp://", "unix://",
  25. "tcp://localhost",
  26. };
  27. START_TEST(test_check_sock_valid)
  28. {
  29. int ret;
  30. const char **urls;
  31. char err_msg[256];
  32. for(urls=valids; *urls != NULL; urls++)
  33. {
  34. ret = pyfcgi_monitor_check_sock(*urls);
  35. snprintf(err_msg, 256,
  36. "returns %d != 0 but '%s' given",
  37. ret, *urls);
  38. ck_assert_msg(ret == 0, err_msg);
  39. }
  40. }
  41. END_TEST
  42. START_TEST(test_check_sock_invalid)
  43. {
  44. int ret;
  45. const char **urls;
  46. char err_msg[256];
  47. for(urls=invalids; *urls != NULL; urls++)
  48. {
  49. ret = pyfcgi_monitor_check_sock(*urls);
  50. snprintf(err_msg, 256,
  51. "returns %d != -1 but '%s' given",
  52. ret, *urls);
  53. ck_assert_msg(ret == -1, err_msg);
  54. }
  55. }
  56. END_TEST
  57. START_TEST(test_parse_sock_valid_ipv4)
  58. {
  59. pyfcgi_monitor_addr_t addr;
  60. int domain, type, protocol, args[3], ret, i;
  61. const char **urls;
  62. char err_msg[256];
  63. const int expt_ret[] = {
  64. AF_INET, SOCK_STREAM, 0,
  65. AF_INET, SOCK_STREAM, 0,
  66. AF_INET, SOCK_DGRAM, 0,
  67. AF_INET, SOCK_DGRAM, 0,
  68. AF_UNIX, SOCK_STREAM, 0,
  69. AF_UNIX, SOCK_STREAM, 0,};
  70. const int *expts = expt_ret;
  71. PyFCGI_conf.ipv4 = 1;
  72. i=0;
  73. for(urls=valids; *urls != NULL; urls++)
  74. {
  75. ret = pyfcgi_monitor_parse_sock(*urls, args, &addr);
  76. snprintf(err_msg, 256,
  77. "returns %d != 0 but '%s' given",
  78. ret, *urls);
  79. ck_assert_msg(ret == 0, err_msg);
  80. domain = args[0];
  81. type = args[1];
  82. protocol = args[2];
  83. ck_assert_int_eq(expts[0], domain);
  84. ck_assert_int_eq(expts[1], type);
  85. ck_assert_int_eq(expts[2], protocol);
  86. /**@todo check returned address */
  87. expts+=3;
  88. i+=1;
  89. }
  90. }
  91. END_TEST
  92. START_TEST(test_parse_sock_valid_ipv6)
  93. {
  94. pyfcgi_monitor_addr_t addr;
  95. int domain, type, protocol, args[3], ret, i;
  96. const char **urls;
  97. char err_msg[256];
  98. const int expt_ret[] = {
  99. AF_INET6, SOCK_STREAM, 0,
  100. AF_INET6, SOCK_DGRAM, 0,
  101. AF_UNIX, SOCK_STREAM, 0,
  102. AF_UNIX, SOCK_STREAM, 0,};
  103. const int *expts = expt_ret;
  104. PyFCGI_conf.ipv6 = 1;
  105. i=0;
  106. for(urls=valids6; *urls != NULL; urls++)
  107. {
  108. ret = pyfcgi_monitor_parse_sock(*urls, args, &addr);
  109. snprintf(err_msg, 256,
  110. "returns %d != 0 but '%s' given",
  111. ret, *urls);
  112. ck_assert_msg(ret == 0, err_msg);
  113. domain = args[0];
  114. type = args[1];
  115. protocol = args[2];
  116. ck_assert_int_eq(expts[0], domain);
  117. ck_assert_int_eq(expts[1], type);
  118. ck_assert_int_eq(expts[2], protocol);
  119. /**@todo check returned address */
  120. expts+=3;
  121. i+=1;
  122. }
  123. }
  124. END_TEST
  125. Suite * logger_suite(void)
  126. {
  127. Suite *s;
  128. TCase *tc_sockurl;
  129. s = suite_create("Monitoring server");
  130. tc_sockurl = tcase_create("Socket URL handling functions");
  131. tcase_add_test(tc_sockurl, test_check_sock_valid);
  132. tcase_add_test(tc_sockurl, test_check_sock_invalid);
  133. tcase_add_test(tc_sockurl, test_parse_sock_valid_ipv4);
  134. tcase_add_test(tc_sockurl, test_parse_sock_valid_ipv6);
  135. suite_add_tcase(s, tc_sockurl);
  136. return s;
  137. }
  138. int main(void)
  139. {
  140. int nfailed;
  141. Suite *s;
  142. SRunner *sr;
  143. s = logger_suite();
  144. sr = srunner_create(s);
  145. srunner_run_all(sr, CK_VERBOSE);
  146. nfailed = srunner_ntests_failed(sr);
  147. srunner_free(sr);
  148. return (!nfailed)?EXIT_SUCCESS:EXIT_FAILURE;
  149. }