# HG changeset patch # User Andre Heinecke # Date 1395834773 -3600 # Node ID 0861069fd6d09321f5be717808d151d1ec8b262b # Parent 45f6b62f91e7a5fbe30764d8f2901343de4a4f95 Fix testing for handling garbage input and generate the data ad hoc. diff -r 45f6b62f91e7 -r 0861069fd6d0 ui/tests/certlistparsertest.cpp --- a/ui/tests/certlistparsertest.cpp Wed Mar 26 13:30:33 2014 +0100 +++ b/ui/tests/certlistparsertest.cpp Wed Mar 26 12:52:53 2014 +0100 @@ -54,6 +54,11 @@ Certificate cert; QVERIFY(!cert.isValid()); + CertificateList *certList2= testWithFile(fname); + const QList instList2 = certList2->getInstallCertificates(); + const QList remoList2 = certList2->getRemoveCertificates(); + QVERIFY(instLines.size() == instList2.size()); + QVERIFY(remoLines.size() == remoList2.size()); delete certList; } @@ -97,22 +102,55 @@ void CertListTest::testGarbage() { - const char *fnames[] = {"garbage_500KB", - "list-with-null.txt", - NULL}; - for (int i=0; fnames[i] != NULL; i++) { - CertificateList *certList = testWithFile(fnames[i]); - QCOMPARE (certList->getStatus(), InvalidFormat); - delete certList; + const char *fname = "list-with-null.txt"; + QString fname2 = getRandomDataFile(200); + CertificateList *certList = testWithFile(fname); + QCOMPARE (certList->getStatus(), InvalidFormat); + delete certList; + certList = testWithFile(fname2.toLocal8Bit().constData()); + QVERIFY(QFile::remove(fname2)); + QCOMPARE (certList->getStatus(), InvalidFormat); + delete certList; +} + +QString CertListTest::getRandomDataFile(size_t size) +{ + QTemporaryFile tmpfile; + tmpfile.setAutoRemove(false); + tmpfile.open(); + size_t bufsize = 1024 * 1024; + if (bufsize > size) { + bufsize = size; } + char buf[bufsize]; + + for (size_t i = 0; i < bufsize; i++) { + buf[i] = (char) qrand() % 255; + } + + size_t bytesWritten=0; + int retval = 0; + do { + size_t toWrite = size - bytesWritten; + if (toWrite < bufsize) { + retval = tmpfile.write(buf, toWrite); + } else { + retval = tmpfile.write(buf, bufsize); + } + bytesWritten += retval; + } while (retval != -1 && bytesWritten < size); + + tmpfile.close(); + return tmpfile.fileName(); } void CertListTest::testTooLarge() { - const char *fname = "garbage_2MB"; - CertificateList *certList = testWithFile(fname); - QCOMPARE (certList->getStatus(), TooLarge); - QVERIFY (!certList->isValid()); + QString fname = getRandomDataFile(MAX_LINE_LENGTH * MAX_LINES + 1); + CertificateList *certList = testWithFile(fname.toLocal8Bit().constData()); + QVERIFY(QFile::remove(fname)); + QCOMPARE(certList->getStatus(), TooLarge); + QVERIFY(!certList->isValid()); delete certList; } diff -r 45f6b62f91e7 -r 0861069fd6d0 ui/tests/certlistparsertest.h --- a/ui/tests/certlistparsertest.h Wed Mar 26 13:30:33 2014 +0100 +++ b/ui/tests/certlistparsertest.h Wed Mar 26 12:52:53 2014 +0100 @@ -11,6 +11,7 @@ Q_OBJECT CertificateList* testWithFile(const char *filename); + QString getRandomDataFile(size_t size); private Q_SLOTS: void testInvalidSig(); diff -r 45f6b62f91e7 -r 0861069fd6d0 ui/tests/data/garbage_2MB Binary file ui/tests/data/garbage_2MB has changed diff -r 45f6b62f91e7 -r 0861069fd6d0 ui/tests/data/garbage_500KB Binary file ui/tests/data/garbage_500KB has changed