TestHashedBlockStream.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 2 or (at your option)
  7. * version 3 of the License.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #include "TestHashedBlockStream.h"
  18. #include <QTest>
  19. #include "FailDevice.h"
  20. #include "crypto/Crypto.h"
  21. #include "streams/HashedBlockStream.h"
  22. QTEST_GUILESS_MAIN(TestHashedBlockStream)
  23. void TestHashedBlockStream::initTestCase()
  24. {
  25. QVERIFY(Crypto::init());
  26. }
  27. void TestHashedBlockStream::testWriteRead()
  28. {
  29. QByteArray data = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4");
  30. QBuffer buffer;
  31. QVERIFY(buffer.open(QIODevice::ReadWrite));
  32. HashedBlockStream writer(&buffer, 16);
  33. QVERIFY(writer.open(QIODevice::WriteOnly));
  34. HashedBlockStream reader(&buffer);
  35. QVERIFY(reader.open(QIODevice::ReadOnly));
  36. QCOMPARE(writer.write(data.left(16)), qint64(16));
  37. QVERIFY(writer.reset());
  38. buffer.reset();
  39. QCOMPARE(reader.read(17), data.left(16));
  40. QVERIFY(reader.reset());
  41. buffer.reset();
  42. buffer.buffer().clear();
  43. QCOMPARE(writer.write(data.left(10)), qint64(10));
  44. QVERIFY(writer.reset());
  45. buffer.reset();
  46. QCOMPARE(reader.read(5), data.left(5));
  47. QCOMPARE(reader.read(5), data.mid(5, 5));
  48. QCOMPARE(reader.read(1).size(), 0);
  49. QVERIFY(reader.reset());
  50. buffer.reset();
  51. buffer.buffer().clear();
  52. QCOMPARE(writer.write(data.left(20)), qint64(20));
  53. QVERIFY(writer.reset());
  54. buffer.reset();
  55. QCOMPARE(reader.read(20), data.left(20));
  56. QCOMPARE(reader.read(1).size(), 0);
  57. QVERIFY(reader.reset());
  58. buffer.reset();
  59. buffer.buffer().clear();
  60. }
  61. void TestHashedBlockStream::testReset()
  62. {
  63. QBuffer buffer;
  64. QVERIFY(buffer.open(QIODevice::WriteOnly));
  65. HashedBlockStream writer(&buffer, 16);
  66. QVERIFY(writer.open(QIODevice::WriteOnly));
  67. QCOMPARE(writer.write(QByteArray(8, 'Z')), qint64(8));
  68. // test if reset() and close() write only one final block
  69. QVERIFY(writer.reset());
  70. QVERIFY(writer.reset());
  71. writer.close();
  72. QCOMPARE(buffer.buffer().size(), 8 + (32 + 4 + 4) * 2);
  73. }
  74. void TestHashedBlockStream::testWriteFailure()
  75. {
  76. FailDevice failDevice(1500);
  77. QVERIFY(failDevice.open(QIODevice::WriteOnly));
  78. QByteArray input(2000, 'Z');
  79. HashedBlockStream writer(&failDevice, 500);
  80. QVERIFY(writer.open(QIODevice::WriteOnly));
  81. QCOMPARE(writer.write(input.left(900)), qint64(900));
  82. writer.write(input.left(900));
  83. QVERIFY(!writer.reset());
  84. QCOMPARE(writer.errorString(), QString("FAILDEVICE"));
  85. }