aheinecke@7: #include "certlistparsertest.h" aheinecke@7: #include "certificatelist.h" aheinecke@87: #include "certificate.h" aheinecke@7: aheinecke@7: #include aheinecke@7: aheinecke@31: void CertListTest::testValidList() aheinecke@31: { aheinecke@31: const char *fname = "list-valid-signed.txt"; aheinecke@87: QFile validList(fname); aheinecke@87: validList.open(QIODevice::ReadOnly); aheinecke@87: QString validData = QString::fromLatin1(validList.readAll()); aheinecke@87: QStringList instLines; aheinecke@87: QStringList remoLines; aheinecke@87: aheinecke@31: CertificateList *certList = testWithFile(fname); aheinecke@87: QCOMPARE(certList->getStatus(), Valid); aheinecke@87: QVERIFY(certList->isValid()); aheinecke@87: aheinecke@87: QVERIFY(certList->rawData() == validData.toLatin1()); aheinecke@87: aheinecke@87: const QList instList = certList->getInstallCertificates(); aheinecke@87: const QList remoList = certList->getInstallCertificates(); aheinecke@87: aheinecke@87: foreach (QString act, validData.split("\r\n")) { aheinecke@87: if (act.startsWith("I:")) { aheinecke@87: instLines << act; aheinecke@87: continue; aheinecke@87: } aheinecke@87: if (act.startsWith("R:")) { aheinecke@87: remoLines << act; aheinecke@87: continue; aheinecke@87: } aheinecke@87: } aheinecke@87: aheinecke@87: foreach (const Certificate& cert, instList) { aheinecke@87: QVERIFY(cert.isValid()); aheinecke@87: QVERIFY(instLines.contains(cert.base64Line())); aheinecke@87: } aheinecke@87: foreach (const Certificate& cert, remoList) { aheinecke@87: QVERIFY(cert.isValid()); aheinecke@87: QVERIFY(remoLines.contains(cert.base64Line())); aheinecke@87: } aheinecke@87: aheinecke@87: /* Be variable if test data changes later */ aheinecke@87: QVERIFY(instList.size() >= 1); aheinecke@87: QVERIFY(remoList.size() >= 1); aheinecke@87: QVERIFY(instLines.size() == instList.size()); aheinecke@87: QVERIFY(remoLines.size() == remoList.size()); aheinecke@87: aheinecke@87: aheinecke@31: delete certList; aheinecke@31: } aheinecke@7: aheinecke@7: void CertListTest::testInvalidSig() aheinecke@7: { aheinecke@42: const char *fnames[] = {"list-invalid-signed.txt", aheinecke@42: "list-valid-other-signature.txt", aheinecke@42: "list-valid-sha1-signature.txt", aheinecke@42: NULL}; aheinecke@42: for (int i=0; fnames[i] != NULL; i++) { aheinecke@42: CertificateList *certList = testWithFile(fnames[i]); aheinecke@42: QCOMPARE (certList->getStatus(), InvalidSignature); aheinecke@42: delete certList; aheinecke@42: } aheinecke@7: } aheinecke@7: aheinecke@7: void verifyInvalidFile(const char *fName) { aheinecke@7: CertificateList *certList = new CertificateList(fName); aheinecke@7: QVERIFY (certList->getStatus() != Valid); aheinecke@7: delete certList; aheinecke@7: } aheinecke@7: aheinecke@7: void CertListTest::testInvalidFileNames() aheinecke@7: { aheinecke@7: verifyInvalidFile("/dev/random"); aheinecke@7: verifyInvalidFile("/tmp/"); aheinecke@7: verifyInvalidFile(NULL); aheinecke@7: verifyInvalidFile("ä"); aheinecke@7: verifyInvalidFile("💩 "); aheinecke@7: } aheinecke@7: aheinecke@42: void CertListTest::testEmptyFile() aheinecke@42: { aheinecke@42: const char *fname = "empty_file"; aheinecke@42: CertificateList *certList = testWithFile(fname); aheinecke@42: printf("Status :%i\n ",certList->getStatus()); aheinecke@42: QCOMPARE (certList->getStatus(), UnknownError); aheinecke@42: delete certList; aheinecke@42: } aheinecke@42: aheinecke@7: void CertListTest::testGarbage() aheinecke@7: { aheinecke@50: const char *fnames[] = {"garbage_500KB", aheinecke@42: "list-with-null.txt", aheinecke@42: NULL}; aheinecke@42: for (int i=0; fnames[i] != NULL; i++) { aheinecke@42: CertificateList *certList = testWithFile(fnames[i]); aheinecke@42: QCOMPARE (certList->getStatus(), InvalidFormat); aheinecke@42: delete certList; aheinecke@42: } aheinecke@7: } aheinecke@7: aheinecke@7: void CertListTest::testTooLarge() aheinecke@7: { aheinecke@50: const char *fname = "garbage_2MB"; aheinecke@7: CertificateList *certList = testWithFile(fname); aheinecke@7: QCOMPARE (certList->getStatus(), TooLarge); aheinecke@7: QVERIFY (!certList->isValid()); aheinecke@7: delete certList; aheinecke@7: } aheinecke@7: aheinecke@7: void CertListTest::benchmarkValid() aheinecke@7: { aheinecke@7: const char *fname = "list-valid-signed.txt"; aheinecke@7: aheinecke@9: QBENCHMARK_ONCE { aheinecke@7: CertificateList *certList = testWithFile(fname); aheinecke@7: delete certList; aheinecke@7: } aheinecke@7: } aheinecke@7: aheinecke@7: CertificateList* CertListTest::testWithFile(const char *filename) aheinecke@7: { aheinecke@7: QDir dataDir = QDir(SOURCE_DIR"/data/"); aheinecke@7: QString fileName = dataDir.absoluteFilePath(filename); aheinecke@7: return new CertificateList(fileName.toLocal8Bit().data()); aheinecke@7: } aheinecke@7: aheinecke@7: int main( int argc, char **argv ) aheinecke@7: { aheinecke@7: CertListTest tc; aheinecke@7: return QTest::qExec( &tc, argc, argv ); aheinecke@7: } aheinecke@7: aheinecke@7: