1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
/*
SPDX-FileCopyrightText: 2022 David Edmundson <davidedmundson@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <QSignalSpy>
#include <QTest>
#include "../greeter/pamauthenticator.h"
// This test runs under the expectation that
// we are run with LD_PRELOAD=libpam_wrapper.so pamTest
class PamTest : public QObject
{
Q_OBJECT
public:
PamTest();
private Q_SLOTS:
void testLogin();
};
PamTest::PamTest()
{
if (!qgetenv("LD_PRELOAD").contains("libpam_wrapper.so")) {
qFatal("This test must be run with pam_wrapper. See ctest");
}
qputenv("PAM_WRAPPER", "1");
qputenv("PAM_WRAPPER_DEBUGLEVEL", "2"); // DEBUG level
qputenv("PAM_WRAPPER_SERVICE_DIR", QFINDTESTDATA("data").toUtf8());
qputenv("PAM_MATRIX_PASSWD", QFINDTESTDATA("data/test_db").toUtf8());
}
void PamTest::testLogin()
{
PamAuthenticator auth(QStringLiteral("test_service"), QStringLiteral("test_user"));
QSignalSpy promptSpy(&auth, &PamAuthenticator::prompt);
QSignalSpy promptForSecretSpy(&auth, &PamAuthenticator::promptForSecret);
QSignalSpy succeededSpy(&auth, &PamAuthenticator::succeeded);
QSignalSpy failedSpy(&auth, &PamAuthenticator::failed);
QSignalSpy busyChangedSpy(&auth, &PamAuthenticator::busyChanged);
// invalid password
auth.tryUnlock();
QVERIFY(promptForSecretSpy.wait());
auth.respond("not_my_password");
QVERIFY(failedSpy.wait());
QVERIFY(promptSpy.count() == 0);
QVERIFY(succeededSpy.count() == 0);
QVERIFY(busyChangedSpy.count() == 2); // changed to busy and back again.
// try again, with the right password
auth.tryUnlock();
QVERIFY(promptForSecretSpy.wait());
auth.respond("my_password");
QVERIFY(succeededSpy.wait());
QVERIFY(busyChangedSpy.count() == 4);
}
QTEST_MAIN(PamTest)
#include "pamtest.moc"
|