dhcp: warn on invalid netmask
[framework/connectivity/connman.git] / unit / test-session.c
index 07bd3dc..38ed2bf 100644 (file)
@@ -53,25 +53,6 @@ static struct test_session *get_session(struct test_session *session,
        return &session->fix->session[index];
 }
 
-static connman_bool_t is_connman_running(DBusConnection *connection)
-{
-       DBusError error;
-       connman_bool_t running;
-
-       dbus_error_init(&error);
-
-       running = dbus_bus_name_has_owner(connection, CONNMAN_SERVICE, &error);
-
-       if (dbus_error_is_set(&error) == TRUE) {
-               fprintf(stderr, "%s\n", error.message);
-               dbus_error_free(&error);
-
-               return FALSE;
-       }
-
-       return running;
-}
-
 static gboolean test_session_create_no_notify(gpointer data)
 {
        struct test_fix *fix = data;
@@ -86,7 +67,6 @@ static gboolean test_session_create_no_notify(gpointer data)
 
        dbus_message_unref(msg);
 
-       g_assert(is_connman_running(fix->session->connection) == TRUE);
        util_idle_call(fix, util_quit_loop, util_session_destroy);
 
        return FALSE;
@@ -102,7 +82,6 @@ static gboolean test_session_destroy_no_notify(gpointer data)
        msg = manager_destroy_session(fix->session->connection, "/foo");
        g_assert(msg == NULL);
 
-       g_assert(is_connman_running(fix->session->connection) == TRUE);
        util_idle_call(fix, util_quit_loop, util_session_destroy);
 
        return FALSE;
@@ -112,7 +91,6 @@ static void test_session_create_notify(struct test_session *session)
 {
        LOG("session %p", session);
 
-       g_assert(is_connman_running(session->connection) == TRUE);
        util_idle_call(session->fix, util_quit_loop, util_session_destroy);
 }
 
@@ -156,7 +134,6 @@ static gboolean test_session_create_destroy(gpointer data)
        util_session_init(fix->session);
        util_session_cleanup(fix->session);
 
-       g_assert(is_connman_running(session->connection) == TRUE);
        util_idle_call(fix, util_quit_loop, util_session_destroy);
 
        return FALSE;
@@ -184,7 +161,6 @@ static gboolean test_session_create_already_exists(gpointer data)
 
        util_session_cleanup(session0);
 
-       g_assert(is_connman_running(session0->connection) == TRUE);
        util_idle_call(fix, util_quit_loop, util_session_destroy);
 
        return FALSE;
@@ -196,8 +172,6 @@ static void test_session_create_many_notify(struct test_session *session)
 
        LOG("session %p", session);
 
-       g_assert(is_connman_running(session->connection) == TRUE);
-
        nr = GPOINTER_TO_UINT(session->fix->user_data);
        nr--;
        session->fix->user_data = GUINT_TO_POINTER(nr);
@@ -242,20 +216,17 @@ 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)
 {
-       LOG("session %p online %d", session, session->info->online);
+       LOG("session %p state %d", session, session->info->state);
 
-       if (session->info->online != TRUE)
+       if (session->info->state == CONNMAN_SESSION_STATE_DISCONNECTED)
                return;
 
        util_session_cleanup(session);
 
-       g_assert(is_connman_running(session->connection) == TRUE);
        util_idle_call(session->fix, util_quit_loop, util_session_destroy);
 }
 
@@ -283,14 +254,13 @@ static gboolean test_session_connect(gpointer data)
 
 static void test_session_disconnect_notify(struct test_session *session)
 {
-       LOG("session %p online %d", session, session->info->online);
+       LOG("session %p state %d", session, session->info->state);
 
-       if (session->info->online != FALSE)
+       if (session->info->state >= CONNMAN_SESSION_STATE_CONNECTED)
                return;
 
        util_session_cleanup(session);
 
-       g_assert(is_connman_running(session->connection) == TRUE);
        util_idle_call(session->fix, util_quit_loop, util_session_destroy);
 }
 
@@ -316,41 +286,89 @@ static gboolean test_session_disconnect(gpointer data)
 
 static void test_session_connect_disconnect_notify(struct test_session *session)
 {
+       enum test_session_state state = get_session_state(session);
+       enum test_session_state next_state = state;
        DBusMessage *msg;
 
-       LOG("session %p online %d", session, session->info->online);
+       LOG("state %d session %p %s state %d", state, session,
+               session->notify_path, session->info->state);
 
-       if (session->info->online != TRUE)
+       switch (state) {
+       case TEST_SESSION_STATE_0:
+               if (session->info->state == CONNMAN_SESSION_STATE_DISCONNECTED)
+                       next_state = TEST_SESSION_STATE_1;
+               break;
+       case TEST_SESSION_STATE_1:
+               if (session->info->state >= CONNMAN_SESSION_STATE_CONNECTED)
+                       next_state = TEST_SESSION_STATE_2;
+               break;
+       case TEST_SESSION_STATE_2:
+               if (session->info->state == CONNMAN_SESSION_STATE_DISCONNECTED)
+                       next_state = TEST_SESSION_STATE_3;
+       default:
+               break;
+       }
+
+       if (state == next_state)
                return;
 
-       msg = session_disconnect(session->connection, session);
-       g_assert(msg != NULL);
-       dbus_message_unref(msg);
+       set_session_state(session, next_state);
 
-       util_session_cleanup(session);
+       LOG("next_state %d", next_state);
 
-       g_assert(is_connman_running(session->connection) == TRUE);
-       util_idle_call(session->fix, util_quit_loop, util_session_destroy);
+       switch (next_state) {
+       case TEST_SESSION_STATE_1:
+               msg = session_connect(session->connection, session);
+               g_assert(msg != NULL);
+               dbus_message_unref(msg);
+               return;
+       case TEST_SESSION_STATE_2:
+               msg = session_disconnect(session->connection, session);
+               g_assert(msg != NULL);
+               dbus_message_unref(msg);
+               return;
+       case TEST_SESSION_STATE_3:
+               util_session_cleanup(session);
+               util_idle_call(session->fix, util_quit_loop,
+                               util_session_destroy);
+               return;
+       default:
+               return;
+       }
 }
 
 static gboolean test_session_connect_disconnect(gpointer data)
 {
        struct test_fix *fix = data;
        struct test_session *session;
-       DBusMessage *msg;
+
+       /*
+        * +-------------------+
+        * |       START       |
+        * +-------------------+
+        *   |
+        *   | connect foo
+        *   v
+        * +-------------------+
+        * |   FOO-CONNECTED   |
+        * +-------------------+
+        *  |
+        *  | disconnect foo
+        *  v
+        * +-------------------+
+        * |        END        |
+        * +-------------------+
+        */
 
        util_session_create(fix, 1);
        session = fix->session;
 
        session->notify_path = g_strdup("/foo");
        session->notify =  test_session_connect_disconnect_notify;
-       util_session_init(session);
 
-       msg = session_connect(session->connection, session);
-       g_assert(msg != NULL);
-       g_assert(dbus_message_get_type(msg) != DBUS_MESSAGE_TYPE_ERROR);
+       util_session_init(session);
 
-       dbus_message_unref(msg);
+       set_session_state(session, TEST_SESSION_STATE_0);
 
        return FALSE;
 }
@@ -363,27 +381,30 @@ static void test_session_connect_free_ride_notify(struct test_session *session)
        enum test_session_state next_state = state;
        DBusMessage *msg;
 
-       LOG("state %d session %p %s online %d", state, session,
-               session->notify_path, session->info->online);
+       LOG("state %d session %p %s state %d", state, session,
+               session->notify_path, session->info->state);
 
        switch (state) {
        case TEST_SESSION_STATE_0:
-               if (session0->info->online == FALSE &&
-                               session1->info->online == FALSE) {
+               if (session0->info->state == CONNMAN_SESSION_STATE_DISCONNECTED
+                               && session1->info->state ==
+                                       CONNMAN_SESSION_STATE_DISCONNECTED) {
                        next_state = TEST_SESSION_STATE_1;
                }
 
                break;
        case TEST_SESSION_STATE_1:
-               if (session0->info->online == TRUE &&
-                               session1->info->online == TRUE) {
+               if (session0->info->state >= CONNMAN_SESSION_STATE_CONNECTED &&
+                               session1->info->state >=
+                                       CONNMAN_SESSION_STATE_CONNECTED) {
                        next_state = TEST_SESSION_STATE_2;
                }
 
                break;
        case TEST_SESSION_STATE_2:
-               if (session0->info->online == FALSE &&
-                               session1->info->online == FALSE) {
+               if (session0->info->state == CONNMAN_SESSION_STATE_DISCONNECTED
+                               && session1->info->state ==
+                                       CONNMAN_SESSION_STATE_DISCONNECTED) {
                        next_state = TEST_SESSION_STATE_3;
                }
 
@@ -421,7 +442,6 @@ static void test_session_connect_free_ride_notify(struct test_session *session)
                util_session_cleanup(session0);
                util_session_cleanup(session1);
 
-               g_assert(is_connman_running(session0->connection) == TRUE);
                util_idle_call(session0->fix, util_quit_loop,
                                util_session_destroy);
 
@@ -475,12 +495,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;
 }
 
@@ -495,15 +538,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);