| 200 | } |
| 201 | |
| 202 | void TestSessionController::tryLockSession() |
| 203 | { |
| 204 | const QString id1 = QUuid::createUuid().toString(); |
| 205 | m_sessionCtrl->createSession( id1 )->setTemporary(true); |
| 206 | const QString id2 = QUuid::createUuid().toString(); |
| 207 | m_sessionCtrl->createSession( id2 )->setTemporary(true); |
| 208 | { |
| 209 | // acquired scoped lock |
| 210 | QVERIFY(!SessionController::isSessionRunning(id1)); |
| 211 | QCOMPARE(SessionController::sessionRunInfo(id1), SessionRunInfo()); |
| 212 | TryLockSessionResult initial = SessionController::tryLockSession(id1); |
| 213 | QVERIFY(initial.lock); |
| 214 | QCOMPARE(initial.lock->id(), id1); |
| 215 | QCOMPARE(initial.runInfo, SessionRunInfo()); |
| 216 | QVERIFY(SessionController::isSessionRunning(id1)); |
| 217 | |
| 218 | SessionRunInfo info = SessionController::sessionRunInfo(id1); |
| 219 | QVERIFY(info != initial.runInfo); |
| 220 | QVERIFY(info.isRunning); |
| 221 | QCOMPARE(info.holderApp, QCoreApplication::applicationName()); |
| 222 | QCOMPARE(info.holderPid, static_cast<int>(QCoreApplication::applicationPid())); |
| 223 | |
| 224 | // this should fail |
| 225 | TryLockSessionResult repeated = SessionController::tryLockSession(id1); |
| 226 | QVERIFY(!repeated.lock); |
| 227 | QCOMPARE(repeated.runInfo, info); |
| 228 | |
| 229 | // this should pass (different id) |
| 230 | QVERIFY(!SessionController::isSessionRunning(id2)); |
| 231 | TryLockSessionResult other = SessionController::tryLockSession(id2); |
| 232 | QVERIFY(other.lock); |
| 233 | QCOMPARE(other.lock->id(), id2); |
| 234 | QCOMPARE(other.runInfo, SessionRunInfo()); |
| 235 | QVERIFY(SessionController::isSessionRunning(id2)); |
| 236 | } |
| 237 | |
| 238 | // scope left, sessions are now unlocked again |
| 239 | QVERIFY(!SessionController::isSessionRunning(id1)); |
| 240 | QCOMPARE(SessionController::sessionRunInfo(id1), SessionRunInfo()); |
| 241 | QVERIFY(!SessionController::isSessionRunning(id2)); |
| 242 | QCOMPARE(SessionController::sessionRunInfo(id2), SessionRunInfo()); |
| 243 | |
| 244 | // can re-lock it here |
| 245 | TryLockSessionResult final = SessionController::tryLockSession(id1); |
| 246 | QVERIFY(SessionController::isSessionRunning(id1)); |
| 247 | QVERIFY(final.lock); |
| 248 | QCOMPARE(final.lock->id(), id1); |
| 249 | QCOMPARE(final.runInfo, SessionRunInfo()); |
| 250 | } |
| 251 | |
| 252 | QTEST_GUILESS_MAIN(TestSessionController) |
| 253 |
no test coverage detected