testchecksumvalidator.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /*
  2. * This software is in the public domain, furnished "as is", without technical
  3. * support, and with no warranty, express or implied, as to its usefulness for
  4. * any purpose.
  5. *
  6. */
  7. #include <QtTest>
  8. #include <QDir>
  9. #include <QString>
  10. #include "checksums.h"
  11. #include "networkjobs.h"
  12. #include "utility.h"
  13. #include "filesystem.h"
  14. #include "propagatorjobs.h"
  15. #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
  16. // poor man QTRY_VERIFY when Qt5 is not available.
  17. #define QTRY_VERIFY(Cond) QTest::qWait(1000); QVERIFY(Cond)
  18. #endif
  19. using namespace OCC;
  20. class TestChecksumValidator : public QObject
  21. {
  22. Q_OBJECT
  23. private:
  24. QString _root;
  25. QString _testfile;
  26. QString _expectedError;
  27. QByteArray _expected;
  28. QByteArray _expectedType;
  29. bool _successDown;
  30. bool _errorSeen;
  31. public slots:
  32. void slotUpValidated(const QByteArray& type, const QByteArray& checksum) {
  33. qDebug() << "Checksum: " << checksum;
  34. QVERIFY(_expected == checksum );
  35. QVERIFY(_expectedType == type );
  36. }
  37. void slotDownValidated() {
  38. _successDown = true;
  39. }
  40. void slotDownError( const QString& errMsg ) {
  41. QVERIFY(_expectedError == errMsg );
  42. _errorSeen = true;
  43. }
  44. private slots:
  45. void initTestCase() {
  46. qDebug() << Q_FUNC_INFO;
  47. _root = QDir::tempPath() + "/" + "test_" + QString::number(qrand());
  48. QDir rootDir(_root);
  49. rootDir.mkpath(_root );
  50. _testfile = _root+"/csFile";
  51. Utility::writeRandomFile( _testfile);
  52. }
  53. void testUploadChecksummingAdler() {
  54. ComputeChecksum *vali = new ComputeChecksum(this);
  55. _expectedType = "Adler32";
  56. vali->setChecksumType(_expectedType);
  57. connect(vali, SIGNAL(done(QByteArray,QByteArray)), SLOT(slotUpValidated(QByteArray,QByteArray)));
  58. _expected = FileSystem::calcAdler32( _testfile );
  59. qDebug() << "XX Expected Checksum: " << _expected;
  60. vali->start(_testfile);
  61. QEventLoop loop;
  62. connect(vali, SIGNAL(done(QByteArray,QByteArray)), &loop, SLOT(quit()), Qt::QueuedConnection);
  63. loop.exec();
  64. delete vali;
  65. }
  66. void testUploadChecksummingMd5() {
  67. ComputeChecksum *vali = new ComputeChecksum(this);
  68. _expectedType = OCC::checkSumMD5C;
  69. vali->setChecksumType(_expectedType);
  70. connect(vali, SIGNAL(done(QByteArray,QByteArray)), this, SLOT(slotUpValidated(QByteArray,QByteArray)));
  71. _expected = FileSystem::calcMd5( _testfile );
  72. vali->start(_testfile);
  73. QEventLoop loop;
  74. connect(vali, SIGNAL(done(QByteArray,QByteArray)), &loop, SLOT(quit()), Qt::QueuedConnection);
  75. loop.exec();
  76. delete vali;
  77. }
  78. void testUploadChecksummingSha1() {
  79. ComputeChecksum *vali = new ComputeChecksum(this);
  80. _expectedType = OCC::checkSumSHA1C;
  81. vali->setChecksumType(_expectedType);
  82. connect(vali, SIGNAL(done(QByteArray,QByteArray)), this, SLOT(slotUpValidated(QByteArray,QByteArray)));
  83. _expected = FileSystem::calcSha1( _testfile );
  84. vali->start(_testfile);
  85. QEventLoop loop;
  86. connect(vali, SIGNAL(done(QByteArray,QByteArray)), &loop, SLOT(quit()), Qt::QueuedConnection);
  87. loop.exec();
  88. delete vali;
  89. }
  90. void testDownloadChecksummingAdler() {
  91. QByteArray adler = checkSumAdlerC;
  92. adler.append(":");
  93. adler.append(FileSystem::calcAdler32( _testfile ));
  94. _successDown = false;
  95. ValidateChecksumHeader *vali = new ValidateChecksumHeader(this);
  96. connect(vali, SIGNAL(validated(QByteArray,QByteArray)), this, SLOT(slotDownValidated()));
  97. connect(vali, SIGNAL(validationFailed(QString)), this, SLOT(slotDownError(QString)));
  98. vali->start(_testfile, adler);
  99. QTRY_VERIFY(_successDown);
  100. _expectedError = QLatin1String("The downloaded file does not match the checksum, it will be resumed.");
  101. _errorSeen = false;
  102. vali->start(_testfile, "Adler32:543345");
  103. QTRY_VERIFY(_errorSeen);
  104. _expectedError = QLatin1String("The checksum header contained an unknown checksum type 'Klaas32'");
  105. _errorSeen = false;
  106. vali->start(_testfile, "Klaas32:543345");
  107. QTRY_VERIFY(_errorSeen);
  108. delete vali;
  109. }
  110. void cleanupTestCase() {
  111. }
  112. };
  113. #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
  114. // Qt4 does not have QTEST_GUILESS_MAIN, so we simulate it.
  115. int main(int argc, char *argv[])
  116. {
  117. QCoreApplication app(argc, argv);
  118. TestChecksumValidator tc;
  119. return QTest::qExec(&tc, argc, argv);
  120. }
  121. #else
  122. QTEST_GUILESS_MAIN(TestChecksumValidator)
  123. #endif
  124. #include "testchecksumvalidator.moc"