qtmobility/tests/auto/qnetworksession/tst_qnetworksession/tst_qnetworksession.cpp
branchRCL_3
changeset 21 885c2596c964
parent 13 4203353e74ea
--- a/qtmobility/tests/auto/qnetworksession/tst_qnetworksession/tst_qnetworksession.cpp	Thu Jul 15 19:34:35 2010 +0300
+++ b/qtmobility/tests/auto/qnetworksession/tst_qnetworksession/tst_qnetworksession.cpp	Thu Aug 19 10:43:30 2010 +0300
@@ -87,7 +87,7 @@
     void sessionStop();
 
     void roamingErrorCodes();
-    
+
     void sessionProperties_data();
     void sessionProperties();
 
@@ -672,7 +672,7 @@
         QVERIFY(openSession(&innocentSession));    
         qDebug("Waiting for %d ms after open to make sure all platform indications are propagated", configWaitdelayInMs);
         QTest::qWait(configWaitdelayInMs);
-    qDebug("----------4.2 Calling closedSession.stop()");
+        qDebug("----------4.2 Calling closedSession.stop()");
         closedSession.stop();
         qDebug("Waiting for %d ms to get all configurationChange signals from platform..", configWaitdelayInMs);
         QTest::qWait(configWaitdelayInMs); // Wait to get all relevant configurationChange() signals
@@ -878,7 +878,7 @@
     // The remaining tests require the session to be not NotAvailable.
     if (session.state() == QNetworkSession::NotAvailable)
         QSKIP("Network is not available.", SkipSingle);
-
+        
     QSignalSpy sessionOpenedSpy(&session, SIGNAL(opened()));
     QSignalSpy sessionClosedSpy(&session, SIGNAL(closed()));
     QSignalSpy stateChangedSpy(&session, SIGNAL(stateChanged(QNetworkSession::State)));
@@ -906,9 +906,14 @@
         session.waitForOpened();
 #endif        
 
+         // Wait until the configuration is uptodate as well, it may be signaled 'connected' 
+         // bit later than the session
+         QTRY_VERIFY(configuration.state() == QNetworkConfiguration::Active);
+
         if (session.isOpen())
             QVERIFY(!sessionOpenedSpy.isEmpty() || !errorSpy.isEmpty());
         if (!errorSpy.isEmpty()) {
+        
             QNetworkSession::SessionError error =
                 qvariant_cast<QNetworkSession::SessionError>(errorSpy.first().at(0));
 
@@ -1072,21 +1077,28 @@
                 if (configuration.type() == QNetworkConfiguration::ServiceNetwork) {
                     bool roamedSuccessfully = false;
 
-                    QCOMPARE(stateChangedSpy2.count(), 4);
+                    QNetworkSession::State state;
+                    if (stateChangedSpy2.count() == 4) {
+                        state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(0).at(0));
+                        QVERIFY(state == QNetworkSession::Connecting);
 
-                    QNetworkSession::State state =
-                        qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(0).at(0));
-                    QVERIFY(state == QNetworkSession::Connecting);
+                        state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(1).at(0));
+                        QVERIFY(state == QNetworkSession::Connected);
+
+                        state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(2).at(0));
+                        QVERIFY(state == QNetworkSession::Closing);
 
-                    state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(1).at(0));
-                    QVERIFY(state == QNetworkSession::Connected);
+                        state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(3).at(0));
+                        QVERIFY(state == QNetworkSession::Disconnected);
+                    } else if (stateChangedSpy2.count() == 2) {
+                        state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(0).at(0));
+                        QVERIFY(state == QNetworkSession::Closing);
 
-                    state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(2).at(0));
-                    QVERIFY(state == QNetworkSession::Closing);
-
-                    state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(3).at(0));
-                    QVERIFY(state == QNetworkSession::Disconnected);
-                    
+                        state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(1).at(0));
+                        QVERIFY(state == QNetworkSession::Disconnected);
+                    } else {
+                        QFAIL("Unexpected amount of state changes when roaming.");
+                    }
 			
                     QTRY_VERIFY(session.state() == QNetworkSession::Roaming ||
                                 session.state() == QNetworkSession::Connected ||
@@ -1108,8 +1120,9 @@
                         roamedSuccessfully = true;
                     } else if (state == QNetworkSession::Closing) {
                         QTRY_VERIFY(session2.state() == QNetworkSession::Disconnected);
-                        QTRY_VERIFY(session.state() == QNetworkSession::Connected);
-                        roamedSuccessfully = true;
+                        QTRY_VERIFY(session.state() == QNetworkSession::Connected || 
+                        	session.state() == QNetworkSession::Disconnected);
+                        roamedSuccessfully = false;
                     } else if (state == QNetworkSession::Disconnected) {
                         QTRY_VERIFY(!errorSpy.isEmpty());
                         QTRY_VERIFY(session2.state() == QNetworkSession::Disconnected);
@@ -1121,16 +1134,18 @@
                             QVERIFY(state == QNetworkSession::Roaming);
                         }
                         roamedSuccessfully = true;
-                  	}
+                    }
 
                     if (roamedSuccessfully) {
+                        // Verify that you can open session based on the disconnected configuration
                         QString configId = session.sessionProperty("ActiveConfiguration").toString();
-                        QNetworkConfiguration config = manager.configurationFromIdentifier(configId); 
+                        QNetworkConfiguration config = manager.configurationFromIdentifier(configId);
                         QNetworkSession session3(config);
                         QSignalSpy errorSpy3(&session3, SIGNAL(error(QNetworkSession::SessionError)));
                         QSignalSpy sessionOpenedSpy3(&session3, SIGNAL(opened()));
                         session3.open();
-                        session3.waitForOpened();      
+                        session3.waitForOpened();
+                        QTest::qWait(1000); // Wait awhile to get all signals from platform
                         if (session.isOpen())
                             QVERIFY(!sessionOpenedSpy3.isEmpty() || !errorSpy3.isEmpty());
                         session.stop();