284 lines
8.4 KiB
C++
284 lines
8.4 KiB
C++
/*!
|
|
* \brief Unit tests for \ref RemoteSertviceSettings
|
|
*
|
|
* \copyright Copyright (c) 2017-2018 Governikus GmbH & Co. KG, Germany
|
|
*/
|
|
|
|
#include "RemoteServiceSettings.h"
|
|
|
|
#include "DeviceInfo.h"
|
|
#include "KeyPair.h"
|
|
#include "TestFileHelper.h"
|
|
|
|
#include <QtTest>
|
|
|
|
using namespace governikus;
|
|
|
|
|
|
class test_RemoteServiceSettings
|
|
: public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
private Q_SLOTS:
|
|
void init()
|
|
{
|
|
AbstractSettings::mTestDir.clear();
|
|
}
|
|
|
|
|
|
void testStandardValues()
|
|
{
|
|
RemoteServiceSettings settings;
|
|
|
|
QCOMPARE(settings.getServerName(), DeviceInfo::getName());
|
|
}
|
|
|
|
|
|
void testServerName()
|
|
{
|
|
RemoteServiceSettings settings;
|
|
QCOMPARE(settings.getServerName(), DeviceInfo::getName());
|
|
settings.save();
|
|
QCOMPARE(settings.getServerName(), DeviceInfo::getName());
|
|
settings.setServerName(QLatin1String("Google Pixel"));
|
|
QCOMPARE(settings.getServerName(), QLatin1String("Google Pixel"));
|
|
}
|
|
|
|
|
|
void testPinPadMode()
|
|
{
|
|
RemoteServiceSettings settings;
|
|
QCOMPARE(settings.getPinPadMode(), false);
|
|
settings.save();
|
|
QCOMPARE(settings.getPinPadMode(), false);
|
|
settings.setPinPadMode(true);
|
|
QCOMPARE(settings.getPinPadMode(), true);
|
|
}
|
|
|
|
|
|
void testDuplicatedTrustedCertificates()
|
|
{
|
|
const KeyPair pair1 = KeyPair::generate();
|
|
const KeyPair pair2 = KeyPair::generate();
|
|
const KeyPair pair3 = KeyPair::generate();
|
|
|
|
RemoteServiceSettings settings;
|
|
QVERIFY(settings.getTrustedCertificates().isEmpty());
|
|
|
|
const QList<QSslCertificate> certs{
|
|
pair1.getCertificate(), pair1.getCertificate(), pair2.getCertificate()
|
|
};
|
|
settings.setTrustedCertificates(certs);
|
|
|
|
auto storedCerts = settings.getTrustedCertificates();
|
|
QCOMPARE(storedCerts.size(), 2);
|
|
QVERIFY(storedCerts.contains(pair1.getCertificate()));
|
|
QVERIFY(storedCerts.contains(pair2.getCertificate()));
|
|
|
|
settings.addTrustedCertificate(pair3.getCertificate());
|
|
storedCerts = settings.getTrustedCertificates();
|
|
QCOMPARE(storedCerts.size(), 3);
|
|
QVERIFY(storedCerts.contains(pair1.getCertificate()));
|
|
QVERIFY(storedCerts.contains(pair2.getCertificate()));
|
|
QVERIFY(storedCerts.contains(pair3.getCertificate()));
|
|
|
|
settings.addTrustedCertificate(pair3.getCertificate());
|
|
QCOMPARE(storedCerts.size(), 3);
|
|
QVERIFY(storedCerts.contains(pair1.getCertificate()));
|
|
QVERIFY(storedCerts.contains(pair2.getCertificate()));
|
|
QVERIFY(storedCerts.contains(pair3.getCertificate()));
|
|
}
|
|
|
|
|
|
void testTrustedCertificates()
|
|
{
|
|
const KeyPair pair1 = KeyPair::generate();
|
|
|
|
RemoteServiceSettings settings;
|
|
QVERIFY(settings.getTrustedCertificates().isEmpty());
|
|
QList<QSslCertificate> certs;
|
|
certs << QSslCertificate();
|
|
certs << pair1.getCertificate();
|
|
|
|
settings.setTrustedCertificates(certs);
|
|
auto storedCerts = settings.getTrustedCertificates();
|
|
QCOMPARE(settings.getTrustedCertificates().size(), 2);
|
|
for (const auto& entry : qAsConst(certs))
|
|
{
|
|
QVERIFY(storedCerts.contains(entry));
|
|
}
|
|
|
|
certs.pop_front();
|
|
QCOMPARE(storedCerts.size(), 2);
|
|
|
|
const KeyPair pair2 = KeyPair::generate();
|
|
QVERIFY(!storedCerts.contains(pair2.getCertificate()));
|
|
settings.addTrustedCertificate(pair2.getCertificate());
|
|
storedCerts = settings.getTrustedCertificates();
|
|
QCOMPARE(storedCerts.size(), 3);
|
|
|
|
certs << pair2.getCertificate();
|
|
for (const auto& entry : qAsConst(certs))
|
|
{
|
|
QVERIFY(storedCerts.contains(entry));
|
|
}
|
|
|
|
settings.setTrustedCertificates({});
|
|
QCOMPARE(settings.getTrustedCertificates().size(), 0);
|
|
}
|
|
|
|
|
|
void testRemoveTrustedCertificates()
|
|
{
|
|
RemoteServiceSettings settings;
|
|
QVERIFY(settings.getTrustedCertificates().isEmpty());
|
|
|
|
const KeyPair pair1 = KeyPair::generate();
|
|
const KeyPair pair2 = KeyPair::generate();
|
|
settings.addTrustedCertificate(pair1.getCertificate());
|
|
settings.addTrustedCertificate(pair2.getCertificate());
|
|
QCOMPARE(settings.getTrustedCertificates().size(), 2);
|
|
|
|
const auto& fingerprint = QString::fromLatin1(pair1.getCertificate().digest(QCryptographicHash::Sha256).toHex());
|
|
settings.removeTrustedCertificate(fingerprint);
|
|
QCOMPARE(settings.getTrustedCertificates().size(), 1);
|
|
QCOMPARE(settings.getTrustedCertificates().at(0), pair2.getCertificate());
|
|
}
|
|
|
|
|
|
void testKey()
|
|
{
|
|
RemoteServiceSettings settings;
|
|
QCOMPARE(settings.getKey(), QSslKey());
|
|
settings.save();
|
|
QCOMPARE(settings.getKey(), QSslKey());
|
|
|
|
const KeyPair pair = KeyPair::generate();
|
|
settings.setKey(pair.getKey());
|
|
QCOMPARE(settings.getKey(), pair.getKey());
|
|
QVERIFY(!settings.getKey().isNull());
|
|
settings.save();
|
|
}
|
|
|
|
|
|
void testCertificate()
|
|
{
|
|
RemoteServiceSettings settings;
|
|
QCOMPARE(settings.getCertificate(), QSslCertificate());
|
|
settings.save();
|
|
QCOMPARE(settings.getCertificate(), QSslCertificate());
|
|
|
|
const KeyPair pair = KeyPair::generate();
|
|
settings.setCertificate(pair.getCertificate());
|
|
QCOMPARE(settings.getCertificate(), pair.getCertificate());
|
|
QVERIFY(!settings.getCertificate().isNull());
|
|
settings.save();
|
|
}
|
|
|
|
|
|
void testRemoteInfos()
|
|
{
|
|
RemoteServiceSettings settings;
|
|
QCOMPARE(settings.getRemoteInfos().size(), 0);
|
|
|
|
const auto& current = QDateTime::currentDateTime();
|
|
RemoteServiceSettings::RemoteInfo a(QString("a"), current, QString("dummy for A"));
|
|
RemoteServiceSettings::RemoteInfo b(QString("b"), current, QString("dummy for B"));
|
|
|
|
QVERIFY(a == a);
|
|
QVERIFY(b == b);
|
|
QVERIFY(a != b);
|
|
settings.setRemoteInfos({a, b});
|
|
QCOMPARE(settings.getRemoteInfos().size(), 2);
|
|
|
|
auto first = settings.getRemoteInfos().at(0);
|
|
auto second = settings.getRemoteInfos().at(1);
|
|
QCOMPARE(first, a);
|
|
QCOMPARE(second, b);
|
|
QCOMPARE(first.getFingerprint(), QString("a"));
|
|
QCOMPARE(first.getName(), QString("dummy for A"));
|
|
QCOMPARE(first.getLastConnected(), current);
|
|
QCOMPARE(second.getFingerprint(), QString("b"));
|
|
QCOMPARE(second.getName(), QString("dummy for B"));
|
|
QCOMPARE(second.getLastConnected(), current);
|
|
|
|
settings.setRemoteInfos({});
|
|
QCOMPARE(settings.getRemoteInfos().size(), 0);
|
|
|
|
settings.setRemoteInfos({a, b});
|
|
QCOMPARE(settings.getRemoteInfos().size(), 2);
|
|
}
|
|
|
|
|
|
void testRemoteInfosUpdates()
|
|
{
|
|
RemoteServiceSettings settings;
|
|
QCOMPARE(settings.getRemoteInfos().size(), 0);
|
|
|
|
auto a = KeyPair::generate().getCertificate();
|
|
auto b = KeyPair::generate().getCertificate();
|
|
|
|
settings.addTrustedCertificate(a);
|
|
settings.addTrustedCertificate(b);
|
|
QCOMPARE(settings.getRemoteInfos().size(), 2);
|
|
QCOMPARE(settings.getRemoteInfos().at(0).getName(), QString());
|
|
|
|
auto aInfo = settings.getRemoteInfo(a);
|
|
aInfo.setName(QString("dummy"));
|
|
QVERIFY(settings.updateRemoteInfo(aInfo));
|
|
QCOMPARE(settings.getRemoteInfos().at(0).getName(), QString("dummy"));
|
|
QCOMPARE(settings.getRemoteInfos().size(), 2);
|
|
|
|
auto c = KeyPair::generate().getCertificate();
|
|
auto cInfo = settings.getRemoteInfo(c);
|
|
QCOMPARE(cInfo.getFingerprint(), QString());
|
|
QCOMPARE(settings.getRemoteInfos().size(), 2);
|
|
|
|
settings.addTrustedCertificate(c);
|
|
cInfo = settings.getRemoteInfo(c);
|
|
cInfo.setName("c");
|
|
settings.updateRemoteInfo(cInfo);
|
|
QCOMPARE(settings.getRemoteInfos().size(), 3);
|
|
QCOMPARE(settings.getRemoteInfos().at(0).getName(), QString("dummy"));
|
|
QCOMPARE(settings.getRemoteInfos().at(1).getName(), QString());
|
|
QCOMPARE(settings.getRemoteInfos().at(2).getName(), QString("c"));
|
|
QCOMPARE(settings.getRemoteInfos().at(2).getFingerprint(),
|
|
QString::fromLatin1(c.digest(QCryptographicHash::Sha256).toHex()));
|
|
}
|
|
|
|
|
|
void testRemoteInfosSync()
|
|
{
|
|
RemoteServiceSettings settings;
|
|
QCOMPARE(settings.getRemoteInfos().size(), 0);
|
|
QVERIFY(!settings.updateRemoteInfo(RemoteServiceSettings::RemoteInfo()));
|
|
|
|
auto a = KeyPair::generate().getCertificate();
|
|
settings.addTrustedCertificate(a);
|
|
|
|
auto aInfo = settings.getRemoteInfo(a);
|
|
aInfo.setName("hallo");
|
|
QVERIFY(settings.updateRemoteInfo(aInfo));
|
|
|
|
QCOMPARE(settings.getRemoteInfos().size(), 1);
|
|
QCOMPARE(settings.getRemoteInfos().at(0).getName(), QString("hallo"));
|
|
}
|
|
|
|
|
|
void testGenerateFingerprint()
|
|
{
|
|
QCOMPARE(RemoteServiceSettings::generateFingerprint(QSslCertificate()), QLatin1String());
|
|
auto cert = KeyPair::generate().getCertificate();
|
|
QVERIFY(!cert.isNull());
|
|
const auto& fingerprint = QString::fromLatin1(cert.digest(QCryptographicHash::Sha256).toHex());
|
|
QVERIFY(!fingerprint.isEmpty());
|
|
QCOMPARE(RemoteServiceSettings::generateFingerprint(cert), fingerprint);
|
|
}
|
|
|
|
|
|
};
|
|
|
|
QTEST_GUILESS_MAIN(test_RemoteServiceSettings)
|
|
#include "test_RemoteServiceSettings.moc"
|