aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--quotest/CMakeLists.txt3
-rw-r--r--quotest/quotest.cpp37
2 files changed, 33 insertions, 7 deletions
diff --git a/quotest/CMakeLists.txt b/quotest/CMakeLists.txt
index bf9af796..59334e30 100644
--- a/quotest/CMakeLists.txt
+++ b/quotest/CMakeLists.txt
@@ -4,8 +4,9 @@
set(quotest_SRCS quotest.cpp)
+find_package(${Qt} COMPONENTS Concurrent)
add_executable(quotest ${quotest_SRCS})
-target_link_libraries(quotest PRIVATE ${Qt}::Core ${Qt}::Test ${PROJECT_NAME})
+target_link_libraries(quotest PRIVATE ${Qt}::Core ${Qt}::Test ${Qt}::Concurrent ${PROJECT_NAME})
option(${PROJECT_NAME}_INSTALL_TESTS "install quotest (former qmc-example) application" ON)
add_feature_info(InstallQuotest ${PROJECT_NAME}_INSTALL_TESTS
diff --git a/quotest/quotest.cpp b/quotest/quotest.cpp
index ec7d4dcb..3f886676 100644
--- a/quotest/quotest.cpp
+++ b/quotest/quotest.cpp
@@ -5,6 +5,7 @@
#include "room.h"
#include "user.h"
#include "uriresolver.h"
+#include "networkaccessmanager.h"
#include "csapi/joining.h"
#include "csapi/leaving.h"
@@ -20,6 +21,8 @@
#include <QtCore/QStringBuilder>
#include <QtCore/QTemporaryFile>
#include <QtCore/QTimer>
+#include <QtConcurrent/QtConcurrent>
+#include <QtNetwork/QNetworkReply>
#include <functional>
#include <iostream>
@@ -435,6 +438,27 @@ TEST_IMPL(sendFile)
return false;
}
+bool testDownload(const QUrl& url)
+{
+ // Move out actual test from the multithreaded code
+ // to help debugging
+ auto results =
+ QtConcurrent::blockingMapped(QVector<int> { 1, 2, 3 }, [url](int) {
+ QEventLoop el;
+ auto reply =
+ NetworkAccessManager::instance()->get(QNetworkRequest(url));
+ QObject::connect(
+ reply, &QNetworkReply::finished, &el, [&el] { el.exit(); },
+ Qt::QueuedConnection);
+ el.exec();
+ return reply->error();
+ });
+ return std::all_of(results.cbegin(), results.cend(),
+ [](QNetworkReply::NetworkError ne) {
+ return ne == QNetworkReply::NoError;
+ });
+}
+
bool TestSuite::checkFileSendingOutcome(const TestToken& thisTest,
const QString& txnId,
const QString& fileName)
@@ -465,14 +489,15 @@ bool TestSuite::checkFileSendingOutcome(const TestToken& thisTest,
return visit(
*evt,
[&](const RoomMessageEvent& e) {
- // TODO: actually try to download it to check, e.g., #366
- // (and #368 would help to test against bad file names).
+ // TODO: check #366 once #368 is implemented
FINISH_TEST(
!e.id().isEmpty()
- && pendingEvents[size_t(pendingIdx)]->transactionId()
- == txnId
- && e.hasFileContent()
- && e.content()->fileInfo()->originalName == fileName);
+ && pendingEvents[size_t(pendingIdx)]->transactionId()
+ == txnId
+ && e.hasFileContent()
+ && e.content()->fileInfo()->originalName == fileName
+ && testDownload(targetRoom->connection()->makeMediaUrl(
+ e.content()->fileInfo()->url)));
},
[this, thisTest](const RoomEvent&) { FAIL_TEST(); });
});