File indexing completed on 2024-04-21 05:27:32

0001 /*
0002 SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
0003 
0004 SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 #include "../logind.h"
0007 #include "fakelogind.h"
0008 // Qt
0009 #include <QProcess>
0010 #include <QSignalSpy>
0011 #include <QTest>
0012 
0013 class LogindTest : public QObject
0014 {
0015     Q_OBJECT
0016 private Q_SLOTS:
0017     void testLockUnlock();
0018     void testLogindPresent();
0019     void testRegisterUnregister();
0020 };
0021 
0022 void LogindTest::testLockUnlock()
0023 {
0024     QScopedPointer<LogindIntegration> logindIntegration(new LogindIntegration(QDBusConnection::sessionBus(), this));
0025     QSignalSpy lockSpy(logindIntegration.data(), SIGNAL(requestLock()));
0026     QSignalSpy unlockSpy(logindIntegration.data(), SIGNAL(requestUnlock()));
0027     QSignalSpy connectedSpy(logindIntegration.data(), SIGNAL(connectedChanged()));
0028 
0029     FakeLogind fakeLogind;
0030 
0031     // need to wait till we got the pending reply
0032     QVERIFY(connectedSpy.wait());
0033     QVERIFY(logindIntegration->isConnected());
0034 
0035     fakeLogind.lock();
0036     QVERIFY(lockSpy.wait());
0037     fakeLogind.lock();
0038 
0039     QVERIFY(lockSpy.wait());
0040     QCOMPARE(lockSpy.count(), 2);
0041 
0042     fakeLogind.unlock();
0043     QVERIFY(unlockSpy.wait());
0044     QCOMPARE(unlockSpy.count(), 1);
0045 }
0046 
0047 void LogindTest::testLogindPresent()
0048 {
0049     QTest::qWait(100);
0050     FakeLogind fakeLogind;
0051     QScopedPointer<LogindIntegration> logindIntegration(new LogindIntegration(QDBusConnection::sessionBus(), this));
0052 
0053     QSignalSpy connectedSpy(logindIntegration.data(), SIGNAL(connectedChanged()));
0054     QVERIFY(connectedSpy.wait());
0055     QVERIFY(logindIntegration->isConnected());
0056 
0057     QSignalSpy lockSpy(logindIntegration.data(), SIGNAL(requestLock()));
0058     fakeLogind.lock();
0059     QVERIFY(lockSpy.wait());
0060     QCOMPARE(lockSpy.count(), 1);
0061 }
0062 
0063 void LogindTest::testRegisterUnregister()
0064 {
0065     QTest::qWait(100);
0066     QScopedPointer<FakeLogind> fakeLogind(new FakeLogind(this));
0067     QScopedPointer<LogindIntegration> logindIntegration(new LogindIntegration(QDBusConnection::sessionBus(), this));
0068 
0069     // should get connected
0070     QSignalSpy connectedSpy(logindIntegration.data(), SIGNAL(connectedChanged()));
0071     QVERIFY(connectedSpy.wait());
0072     QVERIFY(logindIntegration->isConnected());
0073     connectedSpy.clear();
0074 
0075     fakeLogind.reset();
0076     // should no longer be connected
0077     QVERIFY(connectedSpy.wait());
0078     QVERIFY(!logindIntegration->isConnected());
0079     connectedSpy.clear();
0080 
0081     fakeLogind.reset(new FakeLogind(this));
0082     // should be connected again
0083     QVERIFY(connectedSpy.wait());
0084     QVERIFY(logindIntegration->isConnected());
0085 }
0086 
0087 QTEST_MAIN(LogindTest)
0088 #include "logindtest.moc"