Multiple simultaneous request support to Communication
[qtmeetings] / tests / IO / Communication / TestCommunication.cpp
1 #include <QtTest/QtTest>
2 #include "Configuration.h"
3 #include "ConnectionSettings.h"
4 #include "TestCommunication.h"
5 #include "Communication.h"
6 #include "MessagingUtils.h"
7 #include <QString>
8 #include <QSignalSpy>
9
10 static const QString server = "192.168.0.35";
11 static const QString user   = "maemo";
12 static const QString pass   = "P@ssw0rd";
13 static const unsigned int refresh = 1;
14
15 void TestCommunication::initTestCase()
16 {
17     ConnectionSettings *conn = new ConnectionSettings( server, user, pass, refresh );
18     QVERIFY( conn != 0 );
19         iComm = new Communication( *conn );
20         QVERIFY( iComm != 0 );
21     delete conn;
22     conn = NULL;
23         connect( iComm,
24                          SIGNAL( requestFinished( int, int ) ),
25                          this,
26                          SLOT( requestFinished( int, int ) )
27                         );
28 }
29
30 void TestCommunication::cleanupTestCase()
31 {
32         delete iComm;
33 }
34
35 void TestCommunication::init() { }
36
37 void TestCommunication::cleanup() { }
38
39 void TestCommunication::testPublicSignals()
40 {
41         QSignalSpy rp( iComm, SIGNAL(readProgress( int, int, int )) );
42         QCOMPARE( rp.isValid(), true );
43         QSignalSpy rs( iComm, SIGNAL(requestStarted( int )) );
44         QCOMPARE( rs.isValid(), true );
45         QSignalSpy rf( iComm, SIGNAL(requestFinished( int, int )) );
46         QCOMPARE( rf.isValid(), true );
47         
48         iRequestId = iComm->request( "", QString("").toAscii() );
49         for(int i=0; iRequestId != 0 && i < 5000/250; i++ )
50                 QTest::qWait( 250 );
51         
52         //verify requestStarted
53         QCOMPARE( rs.count(),  1 );
54         QList<QVariant> args = rs.takeFirst();
55         QCOMPARE( args.at(0).type(), QVariant::Int );
56         
57         //verify requestFinished
58         QCOMPARE( rf.count(), 1 );
59         args = rf.takeFirst();
60         QCOMPARE( args.at(0).type(), QVariant::Int );
61         QCOMPARE( args.at(1).type(), QVariant::Int );
62         
63         //verify readProgress
64         QCOMPARE( rp.count(), 1 );
65         args = rp.takeFirst();
66         QCOMPARE( args.at(0).type(), QVariant::Int );
67         QCOMPARE( args.at(1).type(), QVariant::Int );
68         QCOMPARE( args.at(2).type(), QVariant::Int );
69 }
70
71 void TestCommunication::testRequestAndResponse()
72 {
73         const QString command = "text/xml; charset=utf-8; action=\"http://schemas.microsoft.com/exchange/services/2006/messages/GetUserAvailability\"";
74     QFile file("input.xml");
75     if(!file.open(QIODevice::ReadOnly))
76     {
77         QFAIL( "Error opening input.xml" );
78     }
79     QByteArray content = file.readAll();
80
81         iError = 0;
82         int id_ok = iComm->request( command, content );
83         iRequestId = id_ok; 
84         int id_fail = iComm->request( "", QString("").toAscii() );
85         QVERIFY( iRequestId != 0 );
86         QVERIFY( id_fail != 0 );
87         qDebug() << "id_ok:" << id_ok;
88         qDebug() << "id_fail: " << id_fail;
89         for(int i=0; iRequestId != 0 && i < 5000/250; i++ )
90                 QTest::qWait( 250 );
91         qDebug() << "iError:" << iError;
92         QVERIFY( iError == 0 );
93         QByteArray* response = iComm->response( id_ok );
94         QVERIFY( response != NULL );
95         QVERIFY( !response->isEmpty() );
96         if( response->contains("GetUserAvailabilityResponse") == FALSE )
97         {
98                 QWARN( *response );
99         }
100         QVERIFY( response->contains("GetUserAvailabilityResponse") );
101         delete response;
102         response = iComm->response( 0 );
103         QVERIFY( response == NULL );
104 }
105
106 void TestCommunication::requestFinished( int aRequestId, int aError )
107 {
108         qDebug() << "TestCommunication::requestFinished:" << aRequestId << aError;
109         if( aRequestId == iRequestId )
110                 iError = aError;
111         iRequestId = 0;
112 }
113