diff options
| author | Michael Biebl <biebl@debian.org> | 2016-03-30 00:56:30 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2016-03-30 00:56:30 +0200 |
| commit | d9c99a29a0d3384c9c3d2adce430f5cb1134ab6a (patch) | |
| tree | fa41baf72753961e71dd8d5bdbe2b89c9109e4f1 /shared/nm-test-utils.h | |
| parent | c2de0d98ba39e0a1a970d066fd19be786092f376 (diff) | |
Imported Upstream version 1.1.92 upstream/1.1.92
Diffstat (limited to 'shared/nm-test-utils.h')
| -rw-r--r-- | shared/nm-test-utils.h | 109 |
1 files changed, 90 insertions, 19 deletions
diff --git a/shared/nm-test-utils.h b/shared/nm-test-utils.h index 542081b8..25032457 100644 --- a/shared/nm-test-utils.h +++ b/shared/nm-test-utils.h @@ -71,6 +71,8 @@ * * "TRACE", this is shorthand for "log-level=TRACE". * + * "D", this is shorthand for "log-level=TRACE,no-expect-message". + * * "sudo-cmd=PATH": when running root tests as normal user, the test will execute * itself by invoking sudo at PATH. * For example @@ -110,23 +112,24 @@ /* general purpose functions that have no dependency on other nmtst functions */ -inline static void -nmtst_assert_error (GError *error, - GQuark expect_error_domain, - gint expect_error_code, - const char *expect_error_pattern) -{ - if (expect_error_domain) - g_assert_error (error, expect_error_domain, expect_error_code); - else - g_assert (error); - g_assert (error->message); - if ( expect_error_pattern - && !g_pattern_match_simple (expect_error_pattern, error->message)) { - g_error ("error message does not have expected pattern '%s'. Instead it is '%s' (%s, %d)", - expect_error_pattern, error->message, g_quark_to_string (error->domain), error->code); - } -} +#define nmtst_assert_error(error, expect_error_domain, expect_error_code, expect_error_pattern) \ + G_STMT_START { \ + GError *_error = (error); \ + GQuark _expect_error_domain = (expect_error_domain); \ + const char *_expect_error_pattern = (expect_error_pattern); \ + \ + if (_expect_error_domain) \ + g_assert_error (_error, _expect_error_domain, (expect_error_code)); \ + else \ + g_assert (_error); \ + g_assert (_error->message); \ + if ( _expect_error_pattern \ + && !g_pattern_match_simple (_expect_error_pattern, _error->message)) { \ + g_error ("%s:%d: error message does not have expected pattern '%s'. Instead it is '%s' (%s, %d)", \ + __FILE__, __LINE__, \ + _expect_error_pattern, _error->message, g_quark_to_string (_error->domain), _error->code); \ + } \ + } G_STMT_END #define NMTST_WAIT(max_wait_ms, wait) \ ({ \ @@ -154,7 +157,7 @@ inline static void _nmtst_assert_success (gboolean success, GError *error, const char *file, int line) { if (!success || error) - g_error ("(%s:%d) FAILURE success=%d, error=%s", file, line, success, error && error->message ? error->message : "(no error)"); + g_error ("(%s:%d) FAILURE success=%d, error=%s", file, line, success, error ? error->message : "(no error)"); } #define nmtst_assert_success(success, error) _nmtst_assert_success ((success), (error), __FILE__, __LINE__) @@ -340,9 +343,14 @@ __nmtst_init (int *argc, char ***argv, gboolean assert_logging, const char *log_ } else if (!g_ascii_strncasecmp (debug, "log-level=", strlen ("log-level="))) { g_free (c_log_level); log_level = c_log_level = g_strdup (&debug[strlen ("log-level=")]); + } else if (!g_ascii_strcasecmp (debug, "D")) { + /* shorthand for "log-level=TRACE,no-expect-message" */ + g_free (c_log_level); + log_level = c_log_level = g_strdup ("TRACE"); + no_expect_message = TRUE; } else if (!g_ascii_strcasecmp (debug, "TRACE")) { g_free (c_log_level); - log_level = c_log_level = g_strdup (debug); + log_level = c_log_level = g_strdup ("TRACE"); } else if (!g_ascii_strncasecmp (debug, "log-domains=", strlen ("log-domains="))) { g_free (c_log_domains); log_domains = c_log_domains = g_strdup (&debug[strlen ("log-domains=")]); @@ -852,6 +860,18 @@ nmtst_main_loop_run (GMainLoop *loop, int timeout_ms) return loopx != NULL; } +inline static void +_nmtst_main_loop_quit_on_notify (GObject *object, GParamSpec *pspec, gpointer user_data) +{ + GMainLoop *loop = user_data; + + g_assert (G_IS_OBJECT (object)); + g_assert (loop); + + g_main_loop_quit (loop); +} +#define nmtst_main_loop_quit_on_notify ((GCallback) _nmtst_main_loop_quit_on_notify) + /*****************************************************************************/ inline static const char * @@ -1773,6 +1793,55 @@ nmtst_create_connection_from_keyfile (const char *keyfile_str, const char *keyfi #ifdef __NM_CONNECTION_H__ +inline static GVariant * +_nmtst_variant_new_vardict (int dummy, ...) +{ + GVariantBuilder builder; + va_list ap; + const char *name; + GVariant *variant; + + g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT); + + va_start (ap, dummy); + while ((name = va_arg (ap, const char *))) { + variant = va_arg (ap, GVariant *); + g_variant_builder_add (&builder, "{sv}", name, variant); + } + va_end (ap); + + return g_variant_builder_end (&builder); +} +#define nmtst_variant_new_vardict(...) _nmtst_variant_new_vardict (0, __VA_ARGS__, NULL) + +#define nmtst_assert_variant_is_of_type(variant, type) \ + G_STMT_START { \ + GVariant *_variantx = (variant); \ + \ + g_assert (_variantx); \ + g_assert (g_variant_is_of_type (_variantx, (type))); \ + } G_STMT_END + +#define nmtst_assert_variant_uint32(variant, val) \ + G_STMT_START { \ + GVariant *_variant = (variant); \ + \ + nmtst_assert_variant_is_of_type (_variant, G_VARIANT_TYPE_UINT32); \ + g_assert_cmpint (g_variant_get_uint32 (_variant), ==, (val)); \ + } G_STMT_END + +#define nmtst_assert_variant_string(variant, str) \ + G_STMT_START { \ + gsize _l; \ + GVariant *_variant = (variant); \ + const char *_str = (str); \ + \ + nmtst_assert_variant_is_of_type (_variant, G_VARIANT_TYPE_STRING); \ + g_assert (_str); \ + g_assert_cmpstr (g_variant_get_string (_variant, &_l), ==, _str); \ + g_assert_cmpint (_l, ==, strlen (_str)); \ + } G_STMT_END + typedef enum { NMTST_VARIANT_EDITOR_CONNECTION, NMTST_VARIANT_EDITOR_SETTING, @@ -1815,6 +1884,8 @@ typedef enum { \ if (__cur_setting_name) \ g_variant_builder_add (&__connection_builder, "{sa{sv}}", __cur_setting_name, &__setting_builder); \ + else \ + g_variant_builder_clear (&__setting_builder); \ g_variant_iter_free (__setting_iter); \ } \ \ |