wasm tests: Add test for making network request
Add test for making network request via Emscripten Fetch API on main and background thread. Task-number: QTBUG-118225 Change-Id: I7c3923493818e75a5c16e4e5f553a69cb1438c44 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Piotr Wierciński <piotr.wiercinski@qt.io>bb10
parent
2643210bd6
commit
a03d0a33b5
|
|
@ -11,6 +11,18 @@ if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
|
|||
find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
|
||||
endif()
|
||||
|
||||
qt_internal_add_test(tst_fetchapi
|
||||
SOURCES
|
||||
tst_fetchapi.cpp
|
||||
DEFINES
|
||||
QT_NO_FOREACH
|
||||
LIBRARIES
|
||||
Qt::GuiPrivate
|
||||
Qt::Network
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Core
|
||||
)
|
||||
|
||||
qt_internal_add_test(tst_localfileapi
|
||||
SOURCES
|
||||
tst_localfileapi.cpp
|
||||
|
|
|
|||
|
|
@ -0,0 +1,85 @@
|
|||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// Copyright (C) 2016 Intel Corporation.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#include <QTest>
|
||||
#include <QEventLoop>
|
||||
#include <QNetworkReply>
|
||||
#include <QNetworkRequest>
|
||||
#include <QScopedPointer>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace {
|
||||
|
||||
const QUrl URL = QUrl("http://localhost:6931/test_batch.html");
|
||||
|
||||
class BackgroundThread : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
void run() override
|
||||
{
|
||||
manager = std::make_unique<QNetworkAccessManager>();
|
||||
eventLoop = std::make_unique<QEventLoop>();
|
||||
reply = manager->get(request);
|
||||
QObject::connect(reply, &QNetworkReply::finished, this, &BackgroundThread::requestFinished);
|
||||
eventLoop->exec();
|
||||
}
|
||||
|
||||
void requestFinished()
|
||||
{
|
||||
eventLoop->quit();
|
||||
}
|
||||
|
||||
public:
|
||||
QNetworkReply *reply{ nullptr };
|
||||
|
||||
private:
|
||||
std::unique_ptr<QNetworkAccessManager> manager;
|
||||
std::unique_ptr<QEventLoop> eventLoop;
|
||||
QNetworkRequest request{ URL };
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
class tst_FetchApi : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
tst_FetchApi() = default;
|
||||
|
||||
private Q_SLOTS:
|
||||
void sendRequestOnMainThread();
|
||||
void sendRequestOnBackgroundThread();
|
||||
};
|
||||
|
||||
void tst_FetchApi::sendRequestOnMainThread()
|
||||
{
|
||||
QNetworkAccessManager manager;
|
||||
QNetworkRequest request(URL);
|
||||
QNetworkReply *reply = manager.get(request);
|
||||
|
||||
QEventLoop loop;
|
||||
QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
|
||||
loop.exec();
|
||||
|
||||
QVERIFY(reply != nullptr);
|
||||
QVERIFY(reply->error() == QNetworkReply::NoError);
|
||||
}
|
||||
|
||||
void tst_FetchApi::sendRequestOnBackgroundThread()
|
||||
{
|
||||
QEventLoop mainEventLoop;
|
||||
BackgroundThread *backgroundThread = new BackgroundThread();
|
||||
connect(backgroundThread, &BackgroundThread::finished, &mainEventLoop, &QEventLoop::quit);
|
||||
connect(backgroundThread, &BackgroundThread::finished, backgroundThread, &QObject::deleteLater);
|
||||
backgroundThread->start();
|
||||
mainEventLoop.exec();
|
||||
|
||||
QVERIFY(backgroundThread != nullptr);
|
||||
QVERIFY(backgroundThread->reply != nullptr);
|
||||
QVERIFY(backgroundThread->reply->error() == QNetworkReply::NoError);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_FetchApi);
|
||||
#include "tst_fetchapi.moc"
|
||||
Loading…
Reference in New Issue