autotests fixes
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / macos (push) Successful in 1m22s
tests / linux (pull_request) Successful in 1m54s
tests / package-smoke-macos (push) Skipped
tests / linux (push) Successful in 2m43s
tests / windows (push) Successful in 4m13s
tests / windows (pull_request) Skipped
tests / macos (pull_request) Skipped
tests / package-smoke-linux (pull_request) Skipped
tests / package-smoke-windows (pull_request) Skipped
tests / package-smoke-macos (pull_request) Skipped
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / macos (push) Successful in 1m22s
tests / linux (pull_request) Successful in 1m54s
tests / package-smoke-macos (push) Skipped
tests / linux (push) Successful in 2m43s
tests / windows (push) Successful in 4m13s
tests / windows (pull_request) Skipped
tests / macos (pull_request) Skipped
tests / package-smoke-linux (pull_request) Skipped
tests / package-smoke-windows (pull_request) Skipped
tests / package-smoke-macos (pull_request) Skipped
Signed-off-by: galeon <dertiellis@gmail.com>
This commit is contained in:
1 parent
6a2b596f32
commit
5635dcc558
11 files changed
+134
-52
No files matched your search
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "testenv.h"
|
||||
#include "fakeinternet.h"
|
||||
#include "nettest.h"
|
||||
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkReply>
|
||||
@@ -30,9 +31,7 @@ class TestFakeInternet : public QObject
|
||||
private slots:
|
||||
void initTestCase()
|
||||
{
|
||||
QString error;
|
||||
if (!m_net.start(&error))
|
||||
QSKIP(qPrintable(QStringLiteral("FakeInternet недоступен: ") + error));
|
||||
BILAUNCHER_START_FAKE_INTERNET(m_net);
|
||||
}
|
||||
|
||||
void init() { m_net.reset(); }
|
||||
@@ -100,12 +99,6 @@ private slots:
|
||||
response.drop = true;
|
||||
return response;
|
||||
}());
|
||||
m_net.route(QStringLiteral("https://a.test/short"), [] {
|
||||
FakeResponse response = FakeResponse::bytes(QByteArray(1000, 'x'));
|
||||
response.truncateTo = 10;
|
||||
return response;
|
||||
}());
|
||||
|
||||
QNetworkAccessManager manager;
|
||||
QScopedPointer<QNetworkReply> r500(get(manager, QStringLiteral("https://a.test/500")));
|
||||
QVERIFY(waitFinished(r500.data()));
|
||||
@@ -114,10 +107,31 @@ private slots:
|
||||
QScopedPointer<QNetworkReply> drop(get(manager, QStringLiteral("https://a.test/drop")));
|
||||
QVERIFY(waitFinished(drop.data()));
|
||||
QVERIFY(drop->error() != QNetworkReply::NoError);
|
||||
}
|
||||
|
||||
void truncatedResponse_data()
|
||||
{
|
||||
QTest::addColumn<int>("bytes");
|
||||
QTest::newRow("empty") << 0;
|
||||
QTest::newRow("short") << 10;
|
||||
QTest::newRow("multiple-tls-records") << 65536;
|
||||
QTest::newRow("last-byte-missing") << 256 * 1024 - 1;
|
||||
}
|
||||
|
||||
void truncatedResponse()
|
||||
{
|
||||
QFETCH(int, bytes);
|
||||
const QByteArray body(256 * 1024, 'x');
|
||||
FakeResponse cut = FakeResponse::bytes(body);
|
||||
cut.truncateTo = bytes;
|
||||
m_net.route(QStringLiteral("https://a.test/short"), cut);
|
||||
QNetworkAccessManager manager;
|
||||
QScopedPointer<QNetworkReply> shortReply(get(manager, QStringLiteral("https://a.test/short")));
|
||||
QVERIFY(waitFinished(shortReply.data()));
|
||||
QVERIFY2(waitFinished(shortReply.data()),
|
||||
qPrintable(m_net.diagnostics() + "\nClient: " + shortReply->errorString()));
|
||||
QVERIFY(shortReply->error() != QNetworkReply::NoError);
|
||||
QCOMPARE(shortReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
|
||||
QCOMPARE(shortReply->readAll(), body.left(bytes));
|
||||
}
|
||||
|
||||
void plainHttpThroughProxy()
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#include "modloaderversionservice.h"
|
||||
|
||||
#include <QSignalSpy>
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkReply>
|
||||
|
||||
namespace {
|
||||
const QString kFabric = QStringLiteral("https://meta.fabricmc.net/v2/versions/loader/1.20.1");
|
||||
@@ -55,6 +57,25 @@ class TestModLoaderVersionService : public QObject
|
||||
return QTest::qWaitFor([&] { return r.calls > 0; }, 15000);
|
||||
}
|
||||
|
||||
bool loadNeoForgeInOrder(ModLoaderVersionService &service, CallResult &result,
|
||||
const QString &first, const QString &second)
|
||||
{
|
||||
QStringList completed;
|
||||
QObject observer;
|
||||
auto *network = service.findChild<QNetworkAccessManager *>();
|
||||
if (!network)
|
||||
qFatal("ModLoaderVersionService has no network manager");
|
||||
connect(network, &QNetworkAccessManager::finished, &observer, [&](QNetworkReply *reply) {
|
||||
completed << reply->url().toString();
|
||||
});
|
||||
service.ensureLoaded(ModLoader::NeoForge, "1.20.1", result.callback());
|
||||
if (!QTest::qWaitFor([&] { return completed.contains(first) && m_net.hits(second) == 1; }, 15000))
|
||||
return false;
|
||||
if (!m_net.releaseResponse(second))
|
||||
return false;
|
||||
return QTest::qWaitFor([&] { return result.calls == 1; }, 15000);
|
||||
}
|
||||
|
||||
private slots:
|
||||
void initTestCase() { BILAUNCHER_START_FAKE_INTERNET(m_net); }
|
||||
|
||||
@@ -167,33 +188,30 @@ private slots:
|
||||
void neoForgeLegacyArtifactArrivesLast()
|
||||
{
|
||||
// Ранние сборки под 1.20.1 — из старого артефакта net.neoforged:forge.
|
||||
FakeResponse legacySlow = xml(Fixtures::read("loaders/neoforge-legacy-maven-metadata.xml"));
|
||||
legacySlow.delayMs = 400;
|
||||
m_net.route(kNeoLegacyMeta, legacySlow);
|
||||
FakeResponse legacy = xml(Fixtures::read("loaders/neoforge-legacy-maven-metadata.xml"));
|
||||
legacy.deferred = true;
|
||||
m_net.route(kNeoLegacyMeta, legacy);
|
||||
ModLoaderVersionService service;
|
||||
CallResult r;
|
||||
QVERIFY(load(service, ModLoader::NeoForge, "1.20.1", r));
|
||||
QVERIFY(loadNeoForgeInOrder(service, r, kNeoMeta, kNeoLegacyMeta));
|
||||
QVERIFY(r.ok);
|
||||
const QList<LoaderVersionEntry> legacy = service.versions(ModLoader::NeoForge, "1.20.1");
|
||||
QCOMPARE(loaderVersions(legacy), QStringList({"47.1.106", "47.1.79"}));
|
||||
QCOMPARE(legacy.at(0).installerUrl,
|
||||
const QList<LoaderVersionEntry> versions = service.versions(ModLoader::NeoForge, "1.20.1");
|
||||
QCOMPARE(loaderVersions(versions), QStringList({"47.1.106", "47.1.79"}));
|
||||
QCOMPARE(versions.at(0).installerUrl,
|
||||
QUrl("https://maven.neoforged.net/releases/net/neoforged/forge/1.20.1-47.1.106/forge-1.20.1-47.1.106-installer.jar"));
|
||||
}
|
||||
|
||||
void neoForgeLegacyArtifactArrivesFirst()
|
||||
{
|
||||
// Тот же каталог, но маленький legacy-ответ приходит раньше основного.
|
||||
FakeResponse primarySlow = xml(Fixtures::read("loaders/neoforge-maven-metadata.xml"));
|
||||
primarySlow.delayMs = 400;
|
||||
m_net.route(kNeoMeta, primarySlow);
|
||||
// Основной ответ выпускается только после обработки legacy клиентом.
|
||||
FakeResponse primary = xml(Fixtures::read("loaders/neoforge-maven-metadata.xml"));
|
||||
primary.deferred = true;
|
||||
m_net.route(kNeoMeta, primary);
|
||||
ModLoaderVersionService service;
|
||||
CallResult r;
|
||||
QVERIFY(load(service, ModLoader::NeoForge, "1.20.1", r));
|
||||
QVERIFY(loadNeoForgeInOrder(service, r, kNeoLegacyMeta, kNeoMeta));
|
||||
QVERIFY(r.ok);
|
||||
QCOMPARE(service.versions(ModLoader::NeoForge, "1.21.1").size(), 2);
|
||||
// В startRefresh() основной ответ делает state->merged = parsed и затирает
|
||||
// уже слитые записи legacy — версии NeoForge для 1.20.1 пропадают.
|
||||
QEXPECT_FAIL("", "гонка: основной maven-metadata NeoForge затирает уже пришедший legacy", Continue);
|
||||
QCOMPARE(service.versions(ModLoader::NeoForge, "1.20.1").size(), 2);
|
||||
}
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ private slots:
|
||||
m_net.route(kPack, cut);
|
||||
Run run(downloader);
|
||||
downloader.download(QUrl(kPack), m_dir + "/b.zip", Fixtures::sha256(QByteArray(4096, 'x')), 4096, "B");
|
||||
QVERIFY(run.waitEnd());
|
||||
QVERIFY2(run.waitEnd(), qPrintable(m_net.diagnostics()));
|
||||
QCOMPARE(run.failed.count(), 1);
|
||||
QVERIFY(!QFile::exists(m_dir + "/b.zip"));
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user