shared/tests: add nmtst_main_context_iterate_until_full() helper

(cherry picked from commit 230250e629)
(cherry picked from commit 20cfc1f395)
(cherry picked from commit c6666589a8)
This commit is contained in:
Thomas Haller 2020-11-02 12:55:24 +01:00
parent 8358652425
commit fa82b66327
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728

View file

@ -1119,19 +1119,32 @@ _nmtst_main_loop_quit_on_notify (GObject *object, GParamSpec *pspec, gpointer us
}
#define nmtst_main_loop_quit_on_notify ((GCallback) _nmtst_main_loop_quit_on_notify)
#define nmtst_main_context_iterate_until(context, timeout_msec, condition) \
#define nmtst_main_context_iterate_until_full(context, timeout_msec, poll_msec, condition) \
({ \
nm_auto_destroy_and_unref_gsource GSource *_source = NULL; \
nm_auto_destroy_and_unref_gsource GSource *_source_timeout = NULL; \
nm_auto_destroy_and_unref_gsource GSource *_source_poll = NULL; \
GMainContext *_context = (context); \
gboolean _had_timeout = FALSE; \
typeof(timeout_msec) _timeout_msec0 = (timeout_msec); \
typeof (timeout_msec) _timeout_msec0 = (timeout_msec); \
typeof (poll_msec) _poll_msec0 = (poll_msec); \
gint64 _timeout_msec = _timeout_msec0; \
guint _poll_msec = _poll_msec0; \
\
g_assert_cmpint(_timeout_msec0, ==, _timeout_msec); \
g_assert_cmpint (_timeout_msec0, ==, _timeout_msec); \
g_assert_cmpint (_poll_msec0, ==, _poll_msec); \
\
_source = g_timeout_source_new (NM_CLAMP (_timeout_msec, 0, (gint64) G_MAXUINT)); \
g_source_set_callback (_source, nmtst_g_source_set_boolean_true, &_had_timeout, NULL); \
g_source_attach (_source, _context); \
_source_timeout = g_timeout_source_new (NM_CLAMP (_timeout_msec, 0, (gint64) G_MAXUINT)); \
g_source_set_callback (_source_timeout, \
nmtst_g_source_set_boolean_true, \
&_had_timeout, \
NULL); \
g_source_attach (_source_timeout, _context); \
\
if (_poll_msec > 0) { \
_source_poll = g_timeout_source_new (_poll_msec); \
g_source_set_callback (_source_poll, nmtst_g_source_nop, NULL, NULL); \
g_source_attach (_source_poll, _context); \
} \
\
while (TRUE) { \
if (condition) \
@ -1144,12 +1157,21 @@ _nmtst_main_loop_quit_on_notify (GObject *object, GParamSpec *pspec, gpointer us
!_had_timeout; \
})
#define nmtst_main_context_iterate_until_assert(context, timeout_msec, condition) \
#define nmtst_main_context_iterate_until(context, timeout_msec, condition) \
nmtst_main_context_iterate_until_full ((context), (timeout_msec), 0, condition)
#define nmtst_main_context_iterate_until_assert_full(context, timeout_msec, poll_msec, condition) \
G_STMT_START { \
if (!nmtst_main_context_iterate_until (context, timeout_msec, condition)) \
g_assert (FALSE && #condition); \
if (!nmtst_main_context_iterate_until_full ((context), \
(timeout_msec), \
(poll_msec), \
condition)) \
g_assert (FALSE &&#condition); \
} G_STMT_END
#define nmtst_main_context_iterate_until_assert(context, timeout_msec, condition) \
nmtst_main_context_iterate_until_assert_full ((context), (timeout_msec), 0, condition)
/*****************************************************************************/
static inline void