diff options
-rw-r--r-- | unit/test-connman.h | 1 | ||||
-rw-r--r-- | unit/test-session.c | 33 | ||||
-rw-r--r-- | unit/utils.c | 3 |
3 files changed, 34 insertions, 3 deletions
diff --git a/unit/test-connman.h b/unit/test-connman.h index 0d9da930..5602daa1 100644 --- a/unit/test-connman.h +++ b/unit/test-connman.h @@ -40,6 +40,7 @@ struct test_fix { guint manager_watch; struct test_manager manager; + GSourceFunc manager_changed; /* session test cases */ unsigned int max_sessions; diff --git a/unit/test-session.c b/unit/test-session.c index c626e045..3431cea7 100644 --- a/unit/test-session.c +++ b/unit/test-session.c @@ -216,8 +216,6 @@ static void set_session_mode(struct test_fix *fix, g_assert(dbus_message_get_type(msg) != DBUS_MESSAGE_TYPE_ERROR); dbus_message_unref(msg); - - util_idle_call(fix, util_quit_loop, NULL); } static void test_session_connect_notify(struct test_session *session) @@ -445,12 +443,35 @@ static gboolean test_session_connect_free_ride(gpointer data) return FALSE; } +static connman_bool_t is_online(struct test_fix *fix) +{ + if (g_strcmp0(fix->manager.state, "online") == 0) + return TRUE; + + return FALSE; +} + static gboolean enable_session_mode(gpointer data) { struct test_fix *fix = data; set_session_mode(fix, TRUE); + if (is_online(fix) == FALSE) + util_idle_call(fix, util_quit_loop, NULL); + + return FALSE; +} + +static gboolean manager_state_changed(gpointer data) +{ + struct test_fix *fix = data; + + if (is_online(fix) == FALSE) { + fix->manager_changed = NULL; + util_idle_call(fix, util_quit_loop, NULL); + } + return FALSE; } @@ -465,15 +486,21 @@ static gboolean disable_session_mode(gpointer data) static void setup_cb(struct test_fix *fix, gconstpointer data) { - util_setup(fix, data); + fix->manager_changed = manager_state_changed; + util_setup(fix, data); util_call(fix, enable_session_mode, NULL); + g_main_loop_run(fix->main_loop); + + fix->manager_changed = NULL; } static void teardown_cb(struct test_fix *fix, gconstpointer data) { util_call(fix, disable_session_mode, NULL); + util_idle_call(fix, util_quit_loop, NULL); + g_main_loop_run(fix->main_loop); util_teardown(fix, data); diff --git a/unit/utils.c b/unit/utils.c index 96644631..6ff1c710 100644 --- a/unit/utils.c +++ b/unit/utils.c @@ -91,6 +91,9 @@ static void manager_changed(struct test_fix *fix, fix->manager.state = g_strdup(value); } + + if (fix->manager_changed != NULL) + fix->manager_changed(fix); } static gboolean handle_manager_changed(DBusConnection *connection, |