#include #include #include #include #include "terminal_policy.h" class TerminalPolicyTest : public QObject { Q_OBJECT private slots: void durableBeforeRuntime() { QTemporaryDir dir; const QString path=dir.path()+"/policy.json";int calls=0; QJsonObject p{{"policyProtocol",1},{"configVersion",2},{"deploymentId","dispatch_1"}, {"heartbeatInterval",30},{"commandPollInterval",5},{"desktopRefreshInterval",20},{"deviceToken","must-not-persist"}}; auto apply=[&](int h,int c,int r){ QFile file(path); QVERIFY(file.open(QIODevice::ReadOnly)); const auto disk=QJsonDocument::fromJson(file.readAll()).object(); QCOMPARE(disk.value("configVersion").toInt(),2);QVERIFY(!disk.contains("deviceToken")); QCOMPARE(h,30);QCOMPARE(c,5);QCOMPARE(r,20);++calls; }; QCOMPARE(vdi::applyTerminalPolicy(p,path,apply),QString());QCOMPARE(calls,1); const auto original=QFileInfo(path).size(); for (const auto key:{"heartbeatInterval","commandPollInterval","desktopRefreshInterval","policyProtocol","configVersion"}) { auto bad=p;bad[key]=1.5; QCOMPARE(vdi::applyTerminalPolicy(bad,path,apply),QString("invalid_policy")); } auto bad=p;bad["heartbeatInterval"]=90; QCOMPARE(vdi::applyTerminalPolicy(bad,path,apply),QString("invalid_policy")); QCOMPARE(QFileInfo(path).size(),original);QCOMPARE(calls,1); QCOMPARE(vdi::applyTerminalPolicy(p,dir.path()+"/missing/policy.json",apply),QString("persist_failed")); QCOMPARE(vdi::applyTerminalPolicy(p,path,{}),QString("runtime_unavailable"));QCOMPARE(calls,1); } }; QTEST_GUILESS_MAIN(TerminalPolicyTest) #include "test_terminal_policy.moc"