211 void relationshipSave_data() { addManagers(); } |
211 void relationshipSave_data() { addManagers(); } |
212 |
212 |
213 void maliciousManager(); // uses it's own custom data (manager) |
213 void maliciousManager(); // uses it's own custom data (manager) |
214 |
214 |
215 void testQuickDestruction(); |
215 void testQuickDestruction(); |
216 void testQuickDestruction_data() { addManagers(); } |
216 void testQuickDestruction_data() { addManagers(QStringList(QString("maliciousplugin"))); } |
217 |
217 |
218 void threadDelivery(); |
218 void threadDelivery(); |
219 void threadDelivery_data() { addManagers(); } |
219 void threadDelivery_data() { addManagers(QStringList(QString("maliciousplugin"))); } |
220 protected slots: |
220 protected slots: |
221 void resultsAvailableReceived(); |
221 void resultsAvailableReceived(); |
|
222 void deleteRequest(); |
222 |
223 |
223 private: |
224 private: |
224 bool compareContactLists(QList<QContact> lista, QList<QContact> listb); |
225 bool compareContactLists(QList<QContact> lista, QList<QContact> listb); |
225 bool compareContacts(QContact ca, QContact cb); |
226 bool compareContacts(QContact ca, QContact cb); |
226 bool containsIgnoringTimestamps(const QList<QContact>& list, const QContact& c); |
227 bool containsIgnoringTimestamps(const QList<QContact>& list, const QContact& c); |
2082 destroyedRequest->setFilter(fil); |
2102 destroyedRequest->setFilter(fil); |
2083 QVERIFY(!destroyedRequest->start()); |
2103 QVERIFY(!destroyedRequest->start()); |
2084 delete destroyedRequest; |
2104 delete destroyedRequest; |
2085 |
2105 |
2086 // now use a malicious manager that deliberately calls |
2106 // now use a malicious manager that deliberately calls |
2087 // incorrect "updateRequest" functions in base class: |
2107 // things in a different thread |
2088 QContactManager mcm("maliciousplugin"); |
2108 QContactManager mcm("maliciousplugin"); |
2089 QCOMPARE(mcm.managerName(), QString("maliciousplugin")); |
2109 QCOMPARE(mcm.managerName(), QString("maliciousplugin")); |
2090 QList<QContact> emptyCList; |
2110 QList<QContact> emptyCList; |
2091 QList<QContactLocalId> emptyIList; |
2111 QList<QContactLocalId> emptyIList; |
2092 QList<QContactDetailDefinition> emptyDList; |
2112 QList<QContactDetailDefinition> emptyDList; |
2093 QStringList emptyDNList; |
2113 QStringList emptyDNList; |
2094 QMap<QString, QContactDetailDefinition> emptyDMap; |
2114 QMap<QString, QContactDetailDefinition> emptyDMap; |
2095 cfr.setFilter(fil); |
2115 cfr.setFilter(fil); |
2096 cfr.setManager(&mcm); |
2116 cfr.setManager(&mcm); |
2097 QVERIFY(cfr.start()); |
2117 QVERIFY(cfr.start()); |
2098 QVERIFY(cfr.cancel()); |
|
2099 QVERIFY(cfr.waitForFinished(100)); |
|
2100 QVERIFY(cfr.start()); |
|
2101 QVERIFY(!cfr.waitForFinished(100)); |
|
2102 QVERIFY(cfr.cancel()); |
|
2103 |
2118 |
2104 QContactLocalIdFetchRequest cifr; |
2119 QContactLocalIdFetchRequest cifr; |
2105 cifr.setFilter(fil); |
2120 cifr.setFilter(fil); |
2106 cifr.setManager(&mcm); |
2121 cifr.setManager(&mcm); |
2107 QVERIFY(cifr.start()); |
2122 QVERIFY(cifr.start()); |
2108 QVERIFY(cifr.cancel()); |
|
2109 QVERIFY(cifr.waitForFinished(100)); |
|
2110 QVERIFY(cifr.start()); |
|
2111 QVERIFY(!cifr.waitForFinished(100)); |
|
2112 QVERIFY(cifr.cancel()); |
|
2113 |
2123 |
2114 QContactRemoveRequest crr; |
2124 QContactRemoveRequest crr; |
2115 crr.setContactIds(mcm.contactIds(fil)); |
2125 crr.setContactIds(mcm.contactIds(fil)); |
2116 crr.setManager(&mcm); |
2126 crr.setManager(&mcm); |
2117 QVERIFY(crr.start()); |
2127 QVERIFY(crr.start()); |
2118 QVERIFY(crr.cancel()); |
|
2119 QVERIFY(crr.waitForFinished(100)); |
|
2120 QVERIFY(crr.start()); |
|
2121 QVERIFY(!crr.waitForFinished(100)); |
|
2122 QVERIFY(crr.cancel()); |
|
2123 |
2128 |
2124 QContactSaveRequest csr; |
2129 QContactSaveRequest csr; |
2125 csr.setContacts(emptyCList); |
2130 csr.setContacts(emptyCList); |
2126 csr.setManager(&mcm); |
2131 csr.setManager(&mcm); |
2127 QVERIFY(csr.start()); |
2132 QVERIFY(csr.start()); |
2128 QVERIFY(csr.cancel()); |
2133 |
2129 QVERIFY(csr.waitForFinished(100)); |
2134 { |
2130 QVERIFY(csr.start()); |
|
2131 QVERIFY(!csr.waitForFinished(100)); |
|
2132 QVERIFY(csr.cancel()); |
|
2133 |
|
2134 QContactDetailDefinitionFetchRequest dfr; |
2135 QContactDetailDefinitionFetchRequest dfr; |
2135 dfr.setDefinitionNames(emptyDNList); |
2136 dfr.setDefinitionNames(emptyDNList); |
2136 dfr.setManager(&mcm); |
2137 dfr.setManager(&mcm); |
2137 QVERIFY(dfr.start()); |
2138 QVERIFY(dfr.start()); |
2138 QVERIFY(dfr.cancel()); |
2139 } |
2139 QVERIFY(dfr.waitForFinished(100)); |
2140 |
2140 QVERIFY(dfr.start()); |
2141 { |
2141 QVERIFY(!dfr.waitForFinished(100)); |
2142 QContactDetailDefinitionFetchRequest dfr; |
2142 QVERIFY(dfr.cancel()); |
2143 dfr.setDefinitionNames(emptyDNList); |
|
2144 dfr.setManager(&mcm); |
|
2145 } |
2143 |
2146 |
2144 QContactDetailDefinitionSaveRequest dsr; |
2147 QContactDetailDefinitionSaveRequest dsr; |
2145 dsr.setDefinitions(emptyDList); |
2148 dsr.setDefinitions(emptyDList); |
2146 dsr.setManager(&mcm); |
2149 dsr.setManager(&mcm); |
2147 QVERIFY(dsr.start()); |
2150 QVERIFY(dsr.start()); |
2148 QVERIFY(dsr.cancel()); |
|
2149 QVERIFY(dsr.waitForFinished(100)); |
|
2150 QVERIFY(dsr.start()); |
|
2151 QVERIFY(!dsr.waitForFinished(100)); |
|
2152 QVERIFY(dsr.cancel()); |
|
2153 |
2151 |
2154 QContactDetailDefinitionRemoveRequest drr; |
2152 QContactDetailDefinitionRemoveRequest drr; |
2155 drr.setDefinitionNames(emptyDNList); |
2153 drr.setDefinitionNames(emptyDNList); |
2156 drr.setManager(&mcm); |
2154 drr.setManager(&mcm); |
2157 QVERIFY(drr.start()); |
2155 QVERIFY(drr.start()); |
2158 QVERIFY(drr.cancel()); |
|
2159 QVERIFY(drr.waitForFinished(100)); |
|
2160 QVERIFY(drr.start()); |
|
2161 QVERIFY(!drr.waitForFinished(100)); |
|
2162 QVERIFY(drr.cancel()); |
|
2163 } |
2156 } |
2164 |
2157 |
2165 void tst_QContactAsync::testQuickDestruction() |
2158 void tst_QContactAsync::testQuickDestruction() |
2166 { |
2159 { |
2167 QFETCH(QString, uri); |
2160 QFETCH(QString, uri); |
2245 { |
2238 { |
2246 QContactFetchRequest *req = qobject_cast<QContactFetchRequest *>(QObject::sender()); |
2239 QContactFetchRequest *req = qobject_cast<QContactFetchRequest *>(QObject::sender()); |
2247 if (req) |
2240 if (req) |
2248 m_resultsAvailableSlotThreadId = req->thread()->currentThreadId(); |
2241 m_resultsAvailableSlotThreadId = req->thread()->currentThreadId(); |
2249 else |
2242 else |
2250 qDebug() << "resultsAvailableReceived() : request deleted; unable to set thread id!"; |
2243 qWarning() << "resultsAvailableReceived() : request deleted; unable to set thread id!"; |
2251 } |
2244 } |
2252 |
2245 |
2253 void tst_QContactAsync::addManagers() |
2246 void tst_QContactAsync::addManagers(QStringList stringlist) |
2254 { |
2247 { |
2255 QTest::addColumn<QString>("uri"); |
2248 QTest::addColumn<QString>("uri"); |
2256 |
2249 |
2257 // retrieve the list of available managers |
2250 // retrieve the list of available managers |
2258 QStringList managers = QContactManager::availableManagers(); |
2251 QStringList managers = QContactManager::availableManagers(); |
2259 |
2252 |
2260 // remove ones that we know will not pass |
2253 // remove ones that we know will not pass |
2261 managers.removeAll("invalid"); |
2254 if (!stringlist.contains("invalid")) |
2262 managers.removeAll("maliciousplugin"); |
2255 managers.removeAll("invalid"); |
2263 managers.removeAll("testdummy"); |
2256 if (!stringlist.contains("maliciousplugin")) |
2264 managers.removeAll("symbiansim"); // SIM backend does not support all the required details for tests to pass. |
2257 managers.removeAll("maliciousplugin"); |
|
2258 if (!stringlist.contains("testdummy")) |
|
2259 managers.removeAll("testdummy"); |
|
2260 if (!stringlist.contains("symbiansim")) |
|
2261 managers.removeAll("symbiansim"); // SIM backend does not support all the required details for tests to pass. |
2265 |
2262 |
2266 foreach(QString mgr, managers) { |
2263 foreach(QString mgr, managers) { |
2267 QMap<QString, QString> params; |
2264 QMap<QString, QString> params; |
2268 QTest::newRow(QString("mgr='%1'").arg(mgr).toLatin1().constData()) << QContactManager::buildUri(mgr, params); |
2265 QTest::newRow(QString("mgr='%1'").arg(mgr).toLatin1().constData()) << QContactManager::buildUri(mgr, params); |
2269 if (mgr == "memory") { |
2266 if (mgr == "memory") { |