OptimizerClient : QLocalSocket ou QTcpSocket, NDJSON, JSON-RPC 2.0, identifiants croissants sur toute la vie du client, une requête GetPlan en vol au plus (la plus récente remplace l'attente ; la réponse obsolète est reconnue par son id et ignorée). Handshake §3 : majeure comparée, capabilities mémorisé (présent ≠ absent), délai de 5 s compté depuis le début de la tentative ; reconnexion au backoff 1 → 60 s, remis à 1 s après un handshake accepté. GetPlan : 10 s, connexion conservée. Ligne non JSON, message sans id, id jamais émis, ligne de plus de 1 Mio : erreur comptée, connexion conservée. Horloge et réveil injectables (OptimizerClientClock, monotone) : aucune lecture de l'horloge murale. Token relu à chaque connexion dans settingsPath()/ energy-optimizer.token, jamais journalisé ; writeToken() pose le fichier par QSaveFile en 0600 (droits posés avant l'écriture du secret). Pas de RPC. Le client n'est instancié nulle part dans le moteur. Suite légère nymea-energy-optimizerclient : faux serveurs QLocalServer/QTcpServer, temps simulé, 37 cas ; 17 mutations du client, toutes mordent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 lines
751 B
Prolog
22 lines
751 B
Prolog
QT += testlib network
|
|
QT -= gui
|
|
|
|
CONFIG += testcase c++17 link_pkgconfig
|
|
PKGCONFIG += nymea
|
|
|
|
TARGET = nymea-energy-optimizerclient
|
|
|
|
# Cible VOLONTAIREMENT légère, comme loadmodel : aucun serveur nymea, aucun EnergyTestBase, et
|
|
# du moteur le seul client de transport (brief 4 T2). Les faux optimiseurs sont des
|
|
# QLocalServer/QTcpServer du processus de test, et le temps est SIMULÉ : aucun des délais
|
|
# (5 s, 10 s, backoff 1 → 60 s) ne s'écoule réellement.
|
|
|
|
INCLUDEPATH += $$PWD/../../../energyplugin
|
|
|
|
HEADERS += $$PWD/../../../energyplugin/etm/scheduler/optimizerclient.h
|
|
SOURCES += $$PWD/../../../energyplugin/etm/scheduler/optimizerclient.cpp \
|
|
testoptimizerclient.cpp
|
|
|
|
target.path = $$[QT_INSTALL_PREFIX]/bin
|
|
INSTALLS += target
|