aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-09-09 16:14:52 +0200
committerLinus Jahn <lnj@kaidan.im>2022-09-09 22:49:06 +0200
commit3c637faf32767f4179d3d40035b081e9d140c8fd (patch)
treeeab26e4b89149de127f43bf89a65df24980fd704 /tests
parent8d58da2314e37c60e14ed7452aea4a587395d3d5 (diff)
downloadqxmpp-3c637faf32767f4179d3d40035b081e9d140c8fd.tar.gz
tests: HttpUploadManager: Add test for future based API
Diffstat (limited to 'tests')
-rw-r--r--tests/qxmpphttpuploadmanager/tst_qxmpphttpuploadmanager.cpp66
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;