File indexing completed on 2024-05-12 07:49:46
0001 /* 0002 0003 SPDX-FileCopyrightText: 2023 Nicolas Fella <nicolas.fella@gmx.de> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include <KIO/TransferJob> 0009 0010 #include <QSignalSpy> 0011 #include <QTest> 0012 0013 class PropagateHeadersTest : public QObject 0014 { 0015 Q_OBJECT 0016 private Q_SLOTS: 0017 void testGet(); 0018 void testGet_data(); 0019 }; 0020 0021 void PropagateHeadersTest::testGet_data() 0022 { 0023 QTest::addColumn<QString>("url"); 0024 QTest::addColumn<QString>("expectedMimeType"); 0025 QTest::addColumn<QByteArray>("expectedData"); 0026 QTest::addColumn<QStringList>("expectedHeaders"); 0027 0028 QTest::addRow("html") << "http://localhost:5000/get/html" 0029 << "text/html" << QByteArray("<p>Hello, World!</p>") 0030 << QStringList{"server: Werkzeug/2.3.6 Python/3.11.4", 0031 "date: Wed, 09 Aug 2023 15:07:45 GMT", 0032 "content-type: text/html; charset=utf-8", 0033 "content-length: 20", 0034 "connection: close"}; 0035 QTest::addRow("calendar") << "http://localhost:5000/get/calendar" 0036 << "text/calendar" << QByteArray("Some data\nthat\nhas\nnew\nlines\n") 0037 << QStringList{"server: Werkzeug/2.3.6 Python/3.11.4", 0038 "date: Wed, 09 Aug 2023 15:22:24 GMT", 0039 "content-type: text/calendar; charset=utf-8", 0040 "content-length: 29", 0041 "connection: close"}; 0042 } 0043 0044 void PropagateHeadersTest::testGet() 0045 { 0046 QFETCH(QString, url); 0047 QFETCH(QString, expectedMimeType); 0048 QFETCH(QByteArray, expectedData); 0049 QFETCH(QStringList, expectedHeaders); 0050 0051 auto *job = KIO::get(QUrl(url)); 0052 job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true")); 0053 0054 QSignalSpy mimeTypeFoundSpy(job, &KIO::TransferJob::mimeTypeFound); 0055 mimeTypeFoundSpy.wait(); 0056 QCOMPARE(mimeTypeFoundSpy.count(), 1); 0057 0058 auto args = mimeTypeFoundSpy.first(); 0059 QCOMPARE(args[1], expectedMimeType); 0060 0061 QSignalSpy dataSpy(job, &KIO::TransferJob::data); 0062 QSignalSpy spy(job, &KJob::finished); 0063 spy.wait(); 0064 QVERIFY(spy.size()); 0065 QCOMPARE(job->mimetype(), expectedMimeType); 0066 0067 QVERIFY(dataSpy.count()); 0068 const QByteArray actualData = dataSpy.first().at(1).toByteArray(); 0069 QCOMPARE(actualData, expectedData); 0070 0071 QCOMPARE(job->error(), KJob::NoError); 0072 const QStringList headers = job->queryMetaData(QStringLiteral("HTTP-Headers")).split("\n"); 0073 0074 qWarning() << job->queryMetaData(QStringLiteral("HTTP-Headers")); 0075 0076 for (int i = 0; i < headers.length(); ++i) { 0077 if (headers[i].startsWith("date:", Qt::CaseInsensitive)) { 0078 continue; 0079 } 0080 0081 if (headers[i].startsWith("server:", Qt::CaseInsensitive)) { 0082 continue; 0083 } 0084 0085 QCOMPARE(headers[i].toLower(), expectedHeaders[i].toLower()); 0086 } 0087 } 0088 0089 QTEST_GUILESS_MAIN(PropagateHeadersTest) 0090 0091 #include "propagateheaderstest.moc"