log_test_helpers.c 2.1 KB

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