log_test_helpers.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #define LOG_PRIVATE
  2. #include "torlog.h"
  3. #include "log_test_helpers.h"
  4. static smartlist_t *saved_logs = NULL;
  5. int
  6. setup_capture_of_logs(int new_level)
  7. {
  8. int previous_log = log_global_min_severity_;
  9. log_global_min_severity_ = new_level;
  10. mock_clean_saved_logs();
  11. MOCK(logv, mock_saving_logv);
  12. return previous_log;
  13. }
  14. void
  15. teardown_capture_of_logs(int prev)
  16. {
  17. UNMOCK(logv);
  18. log_global_min_severity_ = prev;
  19. mock_clean_saved_logs();
  20. }
  21. void
  22. mock_clean_saved_logs(void)
  23. {
  24. if (!saved_logs)
  25. return;
  26. SMARTLIST_FOREACH(saved_logs, mock_saved_log_entry_t *, m,
  27. { tor_free(m->generated_msg); tor_free(m); });
  28. smartlist_free(saved_logs);
  29. saved_logs = NULL;
  30. }
  31. static mock_saved_log_entry_t *
  32. mock_get_log_entry(int ix)
  33. {
  34. int saved_log_count = mock_saved_log_number();
  35. if(ix < 0) {
  36. ix = saved_log_count + ix;
  37. }
  38. if (saved_log_count <= ix)
  39. return NULL;
  40. return smartlist_get(saved_logs, ix);
  41. }
  42. const char *
  43. mock_saved_log_at(int ix)
  44. {
  45. mock_saved_log_entry_t *ent = mock_get_log_entry(ix);
  46. if (ent)
  47. return ent->generated_msg;
  48. else
  49. return "";
  50. }
  51. int
  52. mock_saved_severity_at(int ix)
  53. {
  54. mock_saved_log_entry_t *ent = mock_get_log_entry(ix);
  55. if (ent)
  56. return ent->severity;
  57. else
  58. return -1;
  59. }
  60. int
  61. mock_saved_log_number(void)
  62. {
  63. if (!saved_logs)
  64. return 0;
  65. return smartlist_len(saved_logs);
  66. }
  67. const smartlist_t *
  68. mock_saved_logs(void)
  69. {
  70. return saved_logs;
  71. }
  72. void
  73. mock_saving_logv(int severity, log_domain_mask_t domain,
  74. const char *funcname, const char *suffix,
  75. const char *format, va_list ap)
  76. {
  77. (void)domain;
  78. char *buf = tor_malloc_zero(10240);
  79. int n;
  80. n = tor_vsnprintf(buf,10240,format,ap);
  81. tor_assert(n < 10240-1);
  82. buf[n]='\n';
  83. buf[n+1]='\0';
  84. mock_saved_log_entry_t *e = tor_malloc_zero(sizeof(mock_saved_log_entry_t));
  85. e->severity = severity;
  86. e->funcname = funcname;
  87. e->suffix = suffix;
  88. e->format = format;
  89. e->generated_msg = tor_strdup(buf);
  90. tor_free(buf);
  91. if (!saved_logs)
  92. saved_logs = smartlist_new();
  93. smartlist_add(saved_logs, e);
  94. }