From 10683744d2577202f57d291ebbe1c3a71fc65328 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Sat, 17 Oct 2026 12:24:02 +0200 Subject: [PATCH] =?UTF-8?q?test(traces):=20le=20traceur=20n'apparie=20une?= =?UTF-8?q?=20r=C3=A9ponse=20qu'=C3=A0=20la=20ligne=20de=20sa=20requ=C3=AA?= =?UTF-8?q?te=20(brief=204=20T6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contre-épreuve T4 : sans le contrôle d'identifiant du traceur, aucun test ne cassait — le SocketScheduler écarte déjà les réponses obsolètes en amont. Ce test unitaire éprouve la seconde garde seule (autre requête, aucune requête, réponse en double). socketscheduler : 34 fonctions, 117 / 0. Co-Authored-By: Claude Opus 5.5 --- .../socketscheduler/testsocketscheduler.cpp | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/auto/socketscheduler/testsocketscheduler.cpp b/tests/auto/socketscheduler/testsocketscheduler.cpp index 1453932..a7865fa 100644 --- a/tests/auto/socketscheduler/testsocketscheduler.cpp +++ b/tests/auto/socketscheduler/testsocketscheduler.cpp @@ -133,6 +133,7 @@ private slots: void testTraceWriteFailureChangesNoDecision(); void testTokenIsInNoTrace(); void testTraceLineSize(); + void testTracerPairsTheResponseByRequestId(); private: //! Banc commun ; \p avecOptimiseur faux = rien n'est configuré. @@ -1919,5 +1920,29 @@ void TestSocketScheduler::testTraceLineSize() qPrintable(QStringLiteral("%1 o par ligne rule-based").arg(r))); } +void TestSocketScheduler::testTracerPairsTheResponseByRequestId() +{ + // Le traceur seul : une réponse ne complète QUE la ligne de SA requête. En service, le + // SocketScheduler écarte déjà les réponses obsolètes ; cette garde est la seconde. + const QString d = m_dossierTraces.path() + "/appariement"; + QDir().mkpath(d); + OptimizerTrace::Reglage r; + r.active = true; + r.dossier = d; + const QDateTime t0 = utcDateTime(QDate(2026, 6, 8), QTime(13, 0, 0)); + { + OptimizerTracer tr(r); + tr.noterCycle({{"t", "a"}, {"strategy", "rules"}}, t0, 7); + tr.noterReponse(6, {{"result", QVariantMap{{"faux", true}}}}, 1); // une autre requête + tr.noterReponse(0, {{"result", QVariantMap{{"faux", true}}}}, 1); // aucune requête + tr.noterReponse(7, {{"result", QVariantMap{{"bon", true}}}}, 12); + tr.noterReponse(7, {{"result", QVariantMap{{"double", true}}}}, 13); // déjà complétée + } // le destructeur vide la file + const QList l = traces(d, 1); + QCOMPARE(l.count(), 1); + QCOMPARE(l.first().value("response").toMap(), (QVariantMap{{"result", QVariantMap{{"bon", true}}}})); + QCOMPARE(l.first().value("latencyMs").toInt(), 12); +} + QTEST_MAIN(TestSocketScheduler) #include "testsocketscheduler.moc"