mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 14:51:11 +01:00
Add facility to suppress/capture tor_bug_occurred_() messages in unit tests.
This commit is contained in:
parent
2b39c927c7
commit
d09723ad19
2 changed files with 52 additions and 0 deletions
|
@ -11,6 +11,44 @@
|
||||||
#include "util_bug.h"
|
#include "util_bug.h"
|
||||||
#include "torlog.h"
|
#include "torlog.h"
|
||||||
#include "backtrace.h"
|
#include "backtrace.h"
|
||||||
|
#include "container.h"
|
||||||
|
|
||||||
|
#ifdef TOR_UNIT_TESTS
|
||||||
|
static int n_bugs_to_capture = 0;
|
||||||
|
static smartlist_t *bug_messages = NULL;
|
||||||
|
#define capturing_bugs() (bug_messages != NULL && n_bugs_to_capture)
|
||||||
|
void
|
||||||
|
tor_capture_bugs_(int n)
|
||||||
|
{
|
||||||
|
tor_end_capture_bugs_();
|
||||||
|
bug_messages = smartlist_new();
|
||||||
|
n_bugs_to_capture = n;
|
||||||
|
}
|
||||||
|
void
|
||||||
|
tor_end_capture_bugs_(void)
|
||||||
|
{
|
||||||
|
n_bugs_to_capture = 0;
|
||||||
|
if (!bug_messages)
|
||||||
|
return;
|
||||||
|
SMARTLIST_FOREACH(bug_messages, char *, cp, tor_free(cp));
|
||||||
|
smartlist_free(bug_messages);
|
||||||
|
bug_messages = NULL;
|
||||||
|
}
|
||||||
|
const smartlist_t *
|
||||||
|
tor_get_captured_bug_log_(void)
|
||||||
|
{
|
||||||
|
return bug_messages;
|
||||||
|
}
|
||||||
|
static void
|
||||||
|
add_captured_bug(const char *s)
|
||||||
|
{
|
||||||
|
--n_bugs_to_capture;
|
||||||
|
smartlist_add(bug_messages, tor_strdup(s));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define capturing_bugs() (0)
|
||||||
|
#define add_captured_bug(s) do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
/** Helper for tor_assert: report the assertion failure. */
|
/** Helper for tor_assert: report the assertion failure. */
|
||||||
void
|
void
|
||||||
|
@ -36,12 +74,20 @@ tor_bug_occurred_(const char *fname, unsigned int line,
|
||||||
const char *once_str = once ?
|
const char *once_str = once ?
|
||||||
" (Future instances of this warning will be silenced.)": "";
|
" (Future instances of this warning will be silenced.)": "";
|
||||||
if (! expr) {
|
if (! expr) {
|
||||||
|
if (capturing_bugs()) {
|
||||||
|
add_captured_bug("This line should not have been reached.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
log_warn(LD_BUG, "%s:%u: %s: This line should not have been reached.%s",
|
log_warn(LD_BUG, "%s:%u: %s: This line should not have been reached.%s",
|
||||||
fname, line, func, once_str);
|
fname, line, func, once_str);
|
||||||
tor_snprintf(buf, sizeof(buf),
|
tor_snprintf(buf, sizeof(buf),
|
||||||
"Line unexpectedly reached at %s at %s:%u",
|
"Line unexpectedly reached at %s at %s:%u",
|
||||||
func, fname, line);
|
func, fname, line);
|
||||||
} else {
|
} else {
|
||||||
|
if (capturing_bugs()) {
|
||||||
|
add_captured_bug(expr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
log_warn(LD_BUG, "%s:%u: %s: Non-fatal assertion %s failed.%s",
|
log_warn(LD_BUG, "%s:%u: %s: Non-fatal assertion %s failed.%s",
|
||||||
fname, line, func, expr, once_str);
|
fname, line, func, expr, once_str);
|
||||||
tor_snprintf(buf, sizeof(buf),
|
tor_snprintf(buf, sizeof(buf),
|
||||||
|
|
|
@ -149,5 +149,11 @@ void tor_bug_occurred_(const char *fname, unsigned int line,
|
||||||
const char *func, const char *expr,
|
const char *func, const char *expr,
|
||||||
int once);
|
int once);
|
||||||
|
|
||||||
|
#ifdef TOR_UNIT_TESTS
|
||||||
|
void tor_capture_bugs_(int n);
|
||||||
|
void tor_end_capture_bugs_(void);
|
||||||
|
const struct smartlist_t *tor_get_captured_bug_log_(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue