dhcp: warn on invalid netmask
[framework/connectivity/connman.git] / unit / test-session.c
index 3431cea..38ed2bf 100644 (file)
@@ -220,9 +220,9 @@ static void set_session_mode(struct test_fix *fix,
 
 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);
@@ -254,9 +254,9 @@ 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);
@@ -286,40 +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);
+
+       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 (session->info->online != TRUE)
+       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);
 
-       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;
 }
@@ -332,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;
                }