AusweisApp2/test/qt/widget/test_ReaderDriverModel.cpp

185 lines
4.5 KiB
C++

/*!
* \copyright Copyright (c) 2017-2018 Governikus GmbH & Co. KG, Germany
*/
#include "ReaderDriverModel.h"
#include "Env.h"
#include "MockReaderConfiguration.h"
#include "MockReaderDetector.h"
#include "ReaderManager.h"
#include "ResourceLoader.h"
#include <QSignalSpy>
#include <QtTest>
using namespace governikus;
class MockReaderManager
: public ReaderManager
{
Q_OBJECT
private:
const QVector<ReaderInfo>& mReaderInfos;
public:
MockReaderManager(const QVector<ReaderInfo>& pReaderInfos);
QVector<ReaderInfo> getReaderInfos(const ReaderFilter& pFilter = ReaderFilter()) const override;
};
MockReaderManager::MockReaderManager(const QVector<ReaderInfo>& pReaderInfos) :
mReaderInfos(pReaderInfos)
{
}
QVector<ReaderInfo> MockReaderManager::getReaderInfos(const ReaderFilter& pFilter) const
{
Q_UNUSED(pFilter);
return mReaderInfos;
}
class test_ReaderDriverModel
: public QObject
{
Q_OBJECT
public:
test_ReaderDriverModel()
: mMockReaderConfiguration()
, mUsbIds()
, mMockReaderDetector(mUsbIds)
, mReaderInfos()
, mMockReaderManager(mReaderInfos)
{
Env::set(ReaderDetector::staticMetaObject, &mMockReaderDetector);
Env::set(ReaderManager::staticMetaObject, &mMockReaderManager);
}
private:
QScopedPointer<MockReaderConfiguration> mMockReaderConfiguration;
QVector<UsbId> mUsbIds;
MockReaderDetector mMockReaderDetector;
QVector<ReaderInfo> mReaderInfos;
MockReaderManager mMockReaderManager;
private Q_SLOTS:
void initTestCase()
{
ResourceLoader::getInstance().init();
}
void init()
{
mMockReaderConfiguration.reset(new MockReaderConfiguration());
Env::set(ReaderConfiguration::staticMetaObject, mMockReaderConfiguration.data());
mUsbIds.clear();
mReaderInfos.clear();
}
void cleanup()
{
mMockReaderConfiguration.reset();
}
void test_empty()
{
mMockReaderConfiguration->clearReaderConfiguration();
ReaderDriverModel readerDriverModel;
QCOMPARE(readerDriverModel.rowCount(), 0);
}
void test_01_settings()
{
ReaderDriverModel readerDriverModel;
QCOMPARE(readerDriverModel.rowCount(), 0);
}
void test_02_usbId()
{
#if defined(Q_OS_FREEBSD)
QSKIP("No driver available for UsbId(0x0C4B, 0x0501) on FreeBSD");
#endif
mUsbIds += UsbId(0x0C4B, 0x0501); // REINER SCT cyberJack RFID komfort
ReaderDriverModel readerDriverModel;
QCOMPARE(readerDriverModel.rowCount(), 1);
const auto& index = readerDriverModel.index(0, ReaderDriverModel::ColumnId::ReaderStatus, QModelIndex());
QCOMPARE(readerDriverModel.data(index).toString(), tr("No driver installed"));
}
void test_03_usbId_unknown()
{
mUsbIds += UsbId(0x1, 0x2); // Unknown
ReaderDriverModel readerDriverModel;
QCOMPARE(readerDriverModel.rowCount(), 0);
}
void test_04_usbId_readerManager_equal()
{
#if defined(Q_OS_FREEBSD)
QSKIP("No driver available for UsbId(0x0D46, 0x301D) on FreeBSD");
#endif
mUsbIds += UsbId(0x0D46, 0x301D); // KOBIL Systems IDToken
mReaderInfos += ReaderInfo("KOBIL Systems IDToken (NS1252PT188E1) 00 00", ReaderManagerPlugInType::PCSC);
ReaderDriverModel readerDriverModel;
QCOMPARE(readerDriverModel.rowCount(), 1);
const auto& index = readerDriverModel.index(0, ReaderDriverModel::ColumnId::ReaderStatus, QModelIndex());
QCOMPARE(readerDriverModel.data(index).toString(), tr("Driver installed"));
}
void test_05_usbId_readerManager_different()
{
#if defined(Q_OS_FREEBSD)
QSKIP("No driver available for UsbId(0x0C4B, 0x0501) on FreeBSD");
#endif
mUsbIds += UsbId(0x0C4B, 0x0501); // REINER SCT cyberJack RFID komfort
mUsbIds += UsbId(0x0D46, 0x301D); // KOBIL Systems IDToken
mReaderInfos += ReaderInfo("KOBIL Systems IDToken (NS1252PT188E1) 00 00", ReaderManagerPlugInType::PCSC);
QModelIndex index;
ReaderDriverModel readerDriverModel;
QCOMPARE(readerDriverModel.rowCount(), 2);
index = readerDriverModel.index(0, ReaderDriverModel::ColumnId::ReaderStatus, QModelIndex());
QCOMPARE(readerDriverModel.data(index).toString(), tr("Driver installed"));
index = readerDriverModel.index(1, ReaderDriverModel::ColumnId::ReaderStatus, QModelIndex());
QCOMPARE(readerDriverModel.data(index).toString(), tr("No driver installed"));
}
void test_06_settings_readerManager_unknown()
{
mReaderInfos += ReaderInfo("Governikus Special Reader", ReaderManagerPlugInType::PCSC);
ReaderDriverModel readerDriverModel;
QCOMPARE(readerDriverModel.rowCount(), 0);
}
};
QTEST_MAIN(test_ReaderDriverModel)
#include "test_ReaderDriverModel.moc"