nmtst: improve test macros FAIL() and ASSERT()

Fail only printed a message to stderr and exited.
Instead, print it with g_error(), which also breaks
in the debugger and produces a core-dump.

Also, it constructed the message based on an unchecked
format string and constructed a format string dynamically.
Just don't do that.

Also add a comment that these macros are discouraged because
they are cumbersome to write (requiring a test-name and a failure
message).
This commit is contained in:
Thomas Haller 2016-02-03 12:16:07 +01:00
parent c510323368
commit 123747963a

View file

@ -962,25 +962,19 @@ _nmtst_assert_ip6_address (const char *file, int line, const struct in6_addr *ad
}
#define nmtst_assert_ip6_address(addr, str_expected) _nmtst_assert_ip6_address (__FILE__, __LINE__, addr, str_expected)
inline static void
FAIL(const char *test_name, const char *fmt, ...)
{
va_list args;
char buf[500];
g_snprintf (buf, 500, "FAIL: (%s) %s\n", test_name, fmt);
va_start (args, fmt);
vfprintf (stderr, buf, args);
va_end (args);
_exit (1);
}
/* Deprecated: don't use this overly verbose macro. */
#define FAIL(test_name, fmt, ...) \
G_STMT_START { \
g_error ("%s:%d: FAIL[%s]: " fmt, __FILE__, __LINE__, test_name, ## __VA_ARGS__); \
} G_STMT_END
/* Deprecated: don't use this overly verbose macro. */
#define ASSERT(x, test_name, fmt, ...) \
if (!(x)) { \
FAIL (test_name, fmt, ## __VA_ARGS__); \
}
G_STMT_START { \
if (!(x)) { \
FAIL (test_name, fmt, ## __VA_ARGS__); \
} \
} G_STMT_END
#define nmtst_spawn_sync(working_directory, standard_out, standard_err, assert_exit_status, ...) \
__nmtst_spawn_sync (working_directory, standard_out, standard_err, assert_exit_status, ##__VA_ARGS__, NULL)