Compare commits
1
Commits
v1.0.0
...
acd9334c16
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
acd9334c16 |
No files matched your search
@@ -402,6 +402,13 @@ void FakeInternet::respond(QPointer<QTcpSocket> socket, const FakeResponse &resp
|
|||||||
socket->write(response.body.left(response.truncateTo));
|
socket->write(response.body.left(response.truncateTo));
|
||||||
socket->flush();
|
socket->flush();
|
||||||
socket->disconnectFromHost();
|
socket->disconnectFromHost();
|
||||||
|
// Schannel (Windows) на disconnectFromHost шлёт только TLS close_notify и держит
|
||||||
|
// TCP открытым, ожидая ответного close_notify, — клиент тогда висит до таймаута.
|
||||||
|
// Обрыв на то и обрыв: если сокет не закрылся сам, рвём соединение.
|
||||||
|
QTimer::singleShot(200, socket, [socket] {
|
||||||
|
if (socket && socket->state() != QAbstractSocket::UnconnectedState)
|
||||||
|
socket->abort();
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
socket->write(response.body);
|
socket->write(response.body);
|
||||||
|
|||||||
@@ -103,7 +103,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!argsFile.empty()) {
|
if (!argsFile.empty()) {
|
||||||
std::ofstream out(argsFile, std::ios::trunc);
|
// binary: в текстовом режиме Windows превратит '\n' в "\r\n", и тесты увидят «-jar\r».
|
||||||
|
std::ofstream out(argsFile, std::ios::trunc | std::ios::binary);
|
||||||
for (int i = 1; i < argc; ++i)
|
for (int i = 1; i < argc; ++i)
|
||||||
out << argv[i] << '\n';
|
out << argv[i] << '\n';
|
||||||
for (const std::string &name : dumpEnv) {
|
for (const std::string &name : dumpEnv) {
|
||||||
|
|||||||
@@ -112,8 +112,11 @@ private slots:
|
|||||||
QCOMPARE(c.result.userType, QStringLiteral("msa"));
|
QCOMPARE(c.result.userType, QStringLiteral("msa"));
|
||||||
QCOMPARE(c.result.clientToken, MsaAuthService::clientId());
|
QCOMPARE(c.result.clientToken, MsaAuthService::clientId());
|
||||||
QVERIFY(!c.result.licenseMissing);
|
QVERIFY(!c.result.licenseMissing);
|
||||||
const qint64 lifetime = before.secsTo(c.result.expiresAt);
|
// expiresAt = момент ответа login_with_xbox + expires_in; на медленном раннере
|
||||||
QVERIFY(lifetime > 3500 && lifetime <= 3600);
|
// вся цепочка может идти дольше секунды, поэтому границы — до и после логина.
|
||||||
|
const QDateTime after = QDateTime::currentDateTimeUtc();
|
||||||
|
QVERIFY(c.result.expiresAt >= before.addSecs(3600));
|
||||||
|
QVERIFY(c.result.expiresAt <= after.addSecs(3600));
|
||||||
QVERIFY(progress.count() >= 5);
|
QVERIFY(progress.count() >= 5);
|
||||||
|
|
||||||
// Порядок шагов и формат запроса токена.
|
// Порядок шагов и формат запроса токена.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Дымовая проверка установленного дерева (результат cmake --install) на Windows.
|
# Дымовая проверка установленного дерева (результат cmake --install) на Windows.
|
||||||
#
|
#
|
||||||
# powershell -File tests\scripts\smoke_installed.ps1 -Prefix C:\r\bl-smoke-stage
|
# powershell -File tests\scripts\smoke_installed.ps1 -Prefix C:\r\bl-smoke-stage
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -11,8 +11,10 @@
|
|||||||
опустить планку, чтобы достигнутое не откатилось.
|
опустить планку, чтобы достигнутое не откатилось.
|
||||||
3. CHANGELOG.md содержит раздел для версии из project(BiLauncher VERSION …):
|
3. CHANGELOG.md содержит раздел для версии из project(BiLauncher VERSION …):
|
||||||
без него release.yml создаст релиз с пустым описанием (только предупреждение).
|
без него release.yml создаст релиз с пустым описанием (только предупреждение).
|
||||||
|
4. Скрипты .ps1 с не-ASCII символами сохранены в UTF-8 с BOM: без BOM Windows
|
||||||
|
PowerShell 5.1 читает их в ANSI-кодировке и падает на разборе кириллицы.
|
||||||
"""
|
"""
|
||||||
import os, re, subprocess, sys
|
import glob, os, re, subprocess, sys
|
||||||
|
|
||||||
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
BASELINE = os.path.join(ROOT, "tests", "qmllint-baseline.txt")
|
BASELINE = os.path.join(ROOT, "tests", "qmllint-baseline.txt")
|
||||||
@@ -75,12 +77,27 @@ def check_changelog():
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def check_ps1_bom():
|
||||||
|
step("Кодировка .ps1")
|
||||||
|
ok = True
|
||||||
|
for path in glob.glob(os.path.join(ROOT, "**", "*.ps1"), recursive=True):
|
||||||
|
if os.path.relpath(path, ROOT).startswith("build"): # папки сборки
|
||||||
|
continue
|
||||||
|
data = open(path, "rb").read()
|
||||||
|
if not data.startswith(b"\xef\xbb\xbf") and any(b > 0x7F for b in data):
|
||||||
|
print(f"ОШИБКА: {os.path.relpath(path, ROOT)} содержит не-ASCII, но сохранён без UTF-8 BOM")
|
||||||
|
ok = False
|
||||||
|
if ok:
|
||||||
|
print("все .ps1 читаются Windows PowerShell 5.1")
|
||||||
|
return ok
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 2:
|
||||||
print(__doc__)
|
print(__doc__)
|
||||||
return 2
|
return 2
|
||||||
build_dir = os.path.abspath(sys.argv[1])
|
build_dir = os.path.abspath(sys.argv[1])
|
||||||
results = [check_translations(), check_qmllint(build_dir), check_changelog()]
|
results = [check_translations(), check_qmllint(build_dir), check_changelog(), check_ps1_bom()]
|
||||||
print("\nИТОГ:", "OK" if all(results) else "ЕСТЬ ОШИБКИ")
|
print("\nИТОГ:", "OK" if all(results) else "ЕСТЬ ОШИБКИ")
|
||||||
return 0 if all(results) else 1
|
return 0 if all(results) else 1
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user