diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-09-09 16:14:52 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-09-09 22:49:06 +0200 |
| commit | 3c637faf32767f4179d3d40035b081e9d140c8fd (patch) | |
| tree | eab26e4b89149de127f43bf89a65df24980fd704 /tests/qxmpphttpuploadmanager/tst_qxmpphttpuploadmanager.cpp | |
| parent | 8d58da2314e37c60e14ed7452aea4a587395d3d5 (diff) | |
| download | qxmpp-3c637faf32767f4179d3d40035b081e9d140c8fd.tar.gz | |
tests: HttpUploadManager: Add test for future based API
Diffstat (limited to 'tests/qxmpphttpuploadmanager/tst_qxmpphttpuploadmanager.cpp')
| -rw-r--r-- | tests/qxmpphttpuploadmanager/tst_qxmpphttpuploadmanager.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/qxmpphttpuploadmanager/tst_qxmpphttpuploadmanager.cpp b/tests/qxmpphttpuploadmanager/tst_qxmpphttpuploadmanager.cpp index f0f7e9e7..e8db6a74 100644 --- a/tests/qxmpphttpuploadmanager/tst_qxmpphttpuploadmanager.cpp +++ b/tests/qxmpphttpuploadmanager/tst_qxmpphttpuploadmanager.cpp @@ -55,6 +55,8 @@ private: Q_SLOT void testSending_data(); Q_SLOT void testSending(); + Q_SLOT void testSendingFuture_data(); + Q_SLOT void testSendingFuture(); Q_SLOT void testUploadService(); }; @@ -274,6 +276,70 @@ void tst_QXmppHttpUploadManager::testSending() QVERIFY(returnId.isNull()); } +void tst_QXmppHttpUploadManager::testSendingFuture_data() +{ + testSending_data(); +} + +void tst_QXmppHttpUploadManager::testSendingFuture() +{ + QFETCH(QFileInfo, fileInfo); + QFETCH(QString, fileName); + QFETCH(qint64, fileSize); + QFETCH(QString, fileType); + + auto expectedMimeType = QMimeDatabase().mimeTypeForName(fileType); + + TestClient test; + test.addNewExtension<QXmppDiscoveryManager>(); + auto *manager = test.addNewExtension<QXmppUploadRequestManager>(); + + addUploadService(test); + + auto future = [=]() { + if (!fileInfo.baseName().isEmpty()) { + return manager->requestSlot(fileInfo); + } else { + return manager->requestSlot(fileName, fileSize, expectedMimeType); + } + }(); + + QVERIFY(!future.isFinished()); + + // check sent packet + QXmppHttpUploadRequestIq iq; + parsePacket(iq, test.takePacket().toUtf8()); + + QCOMPARE(iq.type(), QXmppIq::Get); + QCOMPARE(iq.to(), UPLOAD_SERVICE_NAME); + QCOMPARE(iq.fileName(), fileName); + QCOMPARE(iq.size(), fileSize); + QCOMPARE(iq.contentType(), expectedMimeType); + + // inject reply + QByteArray reply = + "<iq from='" + iq.to().toUtf8() + "' id='" + iq.id().toUtf8() + "' to='" + iq.from().toUtf8() + + "' type='result'>" + "<slot xmlns='urn:xmpp:http:upload:0'>" + "<put url='https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/tr%C3%A8s%20cool.jpg'>" + "<header name='Authorization'>Basic Base64String==</header>" + "<header name='Content-type'>application/json</header>" + "<header name='Cookie'>foo=bar; user=romeo</header>" + "</put>" + "<get url='https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/tr%C3%A8s%20cool.jpg' />" + "</slot>" + "</iq>"; + test.inject(reply); + auto slot = expectFutureVariant<QXmppHttpUploadSlotIq>(future); + + QCOMPARE(slot.getUrl(), QUrl("https://download.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/tr%C3%A8s%20cool.jpg")); + QCOMPARE(slot.putUrl(), QUrl("https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/tr%C3%A8s%20cool.jpg")); + // checks that the disallowed 'Content-type' header is not set + QCOMPARE(slot.putHeaders().size(), 2); + QCOMPARE(slot.putHeaders().keys()[0], QStringLiteral("Authorization")); + QCOMPARE(slot.putHeaders().keys()[1], QStringLiteral("Cookie")); +} + void tst_QXmppHttpUploadManager::testUploadService() { QXmppUploadService service; |
