testtranschecksumvalidator.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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. #pragma once
  8. #include <QtTest>
  9. #include <QDir>
  10. #include <QString>
  11. #include "transmissionchecksumvalidator.h"
  12. #include "networkjobs.h"
  13. #include "utility.h"
  14. #include "filesystem.h"
  15. #include "propagatorjobs.h"
  16. using namespace OCC;
  17. class TestTransChecksumValidator : public QObject
  18. {
  19. Q_OBJECT
  20. private:
  21. QString _root;
  22. QString _testfile;
  23. QString _expectedError;
  24. QEventLoop _loop;
  25. QByteArray _expected;
  26. bool _successDown;
  27. bool _errorSeen;
  28. void processAndWait() {
  29. _loop.processEvents();
  30. Utility::usleep(200000);
  31. _loop.processEvents();
  32. }
  33. public slots:
  34. void slotUpValidated(const QByteArray& checksum) {
  35. qDebug() << "Checksum: " << checksum;
  36. QVERIFY(_expected == checksum );
  37. }
  38. void slotDownValidated() {
  39. _successDown = true;
  40. }
  41. void slotDownError( const QString& errMsg ) {
  42. QVERIFY(_expectedError == errMsg );
  43. _errorSeen = true;
  44. }
  45. private slots:
  46. void initTestCase() {
  47. qDebug() << Q_FUNC_INFO;
  48. _root = QDir::tempPath() + "/" + "test_" + QString::number(qrand());
  49. QDir rootDir(_root);
  50. rootDir.mkpath(_root );
  51. _testfile = _root+"/csFile";
  52. Utility::writeRandomFile( _testfile);
  53. }
  54. void testUploadChecksummingAdler() {
  55. TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile, this);
  56. vali->setChecksumType("Adler32");
  57. connect(vali, SIGNAL(validated(QByteArray)), this, SLOT(slotUpValidated(QByteArray)));
  58. QString testfile = _testfile;
  59. _expected = "Adler32:"+FileSystem::calcAdler32( testfile );
  60. qDebug() << "XX Expected Checksum: " << _expected;
  61. vali->uploadValidation();
  62. usleep(5000);
  63. _loop.processEvents();
  64. delete vali;
  65. }
  66. void testUploadChecksummingMd5() {
  67. TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile, this);
  68. vali->setChecksumType( OCC::checkSumMD5C );
  69. connect(vali, SIGNAL(validated(QByteArray)), this, SLOT(slotUpValidated(QByteArray)));
  70. _expected = checkSumMD5C;
  71. _expected.append(":"+FileSystem::calcMd5( _testfile ));
  72. vali->uploadValidation();
  73. usleep(2000);
  74. _loop.processEvents();
  75. delete vali;
  76. }
  77. void testUploadChecksummingSha1() {
  78. TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile, this);
  79. vali->setChecksumType( OCC::checkSumSHA1C );
  80. connect(vali, SIGNAL(validated(QByteArray)), this, SLOT(slotUpValidated(QByteArray)));
  81. _expected = checkSumSHA1C;
  82. _expected.append(":"+FileSystem::calcSha1( _testfile ));
  83. vali->uploadValidation();
  84. usleep(2000);
  85. _loop.processEvents();
  86. delete vali;
  87. }
  88. void testDownloadChecksummingAdler() {
  89. QByteArray adler = checkSumAdlerC;
  90. adler.append(":");
  91. adler.append(FileSystem::calcAdler32( _testfile ));
  92. _successDown = false;
  93. TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile, this);
  94. vali->setChecksumType("Adler32");
  95. connect(vali, SIGNAL(validated(QByteArray)), this, SLOT(slotDownValidated()));
  96. connect(vali, SIGNAL(validationFailed(QString)), this, SLOT(slotDownError(QString)));
  97. vali->downloadValidation(adler);
  98. usleep(2000);
  99. _loop.processEvents();
  100. QVERIFY(_successDown);
  101. _expectedError = QLatin1String("The downloaded file does not match the checksum, it will be resumed.");
  102. _errorSeen = false;
  103. vali->downloadValidation("Adler32:543345");
  104. usleep(2000);
  105. _loop.processEvents();
  106. QVERIFY(_errorSeen);
  107. _expectedError = QLatin1String("The checksum header is malformed.");
  108. _errorSeen = false;
  109. vali->downloadValidation("Klaas32:543345");
  110. usleep(2000);
  111. _loop.processEvents();
  112. QVERIFY(_errorSeen);
  113. delete vali;
  114. }
  115. void cleanupTestCase() {
  116. }
  117. };