TestHashedBlockStream.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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 "TestGlobal.h"
  19. #include <QBuffer>
  20. #include "FailDevice.h"
  21. #include "crypto/Crypto.h"
  22. #include "streams/HashedBlockStream.h"
  23. QTEST_GUILESS_MAIN(TestHashedBlockStream)
  24. void TestHashedBlockStream::initTestCase()
  25. {
  26. QVERIFY(Crypto::init());
  27. }
  28. void TestHashedBlockStream::testWriteRead()
  29. {
  30. QByteArray data = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4");
  31. QBuffer buffer;
  32. QVERIFY(buffer.open(QIODevice::ReadWrite));
  33. HashedBlockStream writer(&buffer, 16);
  34. QVERIFY(writer.open(QIODevice::WriteOnly));
  35. HashedBlockStream reader(&buffer);
  36. QVERIFY(reader.open(QIODevice::ReadOnly));
  37. QCOMPARE(writer.write(data.left(16)), qint64(16));
  38. QVERIFY(writer.reset());
  39. buffer.reset();
  40. QCOMPARE(reader.read(17), data.left(16));
  41. QVERIFY(reader.reset());
  42. buffer.reset();
  43. buffer.buffer().clear();
  44. QCOMPARE(writer.write(data.left(10)), qint64(10));
  45. QVERIFY(writer.reset());
  46. buffer.reset();
  47. QCOMPARE(reader.read(5), data.left(5));
  48. QCOMPARE(reader.read(5), data.mid(5, 5));
  49. QCOMPARE(reader.read(1).size(), 0);
  50. QVERIFY(reader.reset());
  51. buffer.reset();
  52. buffer.buffer().clear();
  53. QCOMPARE(writer.write(data.left(20)), qint64(20));
  54. QVERIFY(writer.reset());
  55. buffer.reset();
  56. QCOMPARE(reader.read(20), data.left(20));
  57. QCOMPARE(reader.read(1).size(), 0);
  58. QVERIFY(reader.reset());
  59. buffer.reset();
  60. buffer.buffer().clear();
  61. }
  62. void TestHashedBlockStream::testReset()
  63. {
  64. QBuffer buffer;
  65. QVERIFY(buffer.open(QIODevice::WriteOnly));
  66. HashedBlockStream writer(&buffer, 16);
  67. QVERIFY(writer.open(QIODevice::WriteOnly));
  68. QCOMPARE(writer.write(QByteArray(8, 'Z')), qint64(8));
  69. // test if reset() and close() write only one final block
  70. QVERIFY(writer.reset());
  71. QVERIFY(writer.reset());
  72. writer.close();
  73. QCOMPARE(buffer.buffer().size(), 8 + (32 + 4 + 4) * 2);
  74. }
  75. void TestHashedBlockStream::testWriteFailure()
  76. {
  77. FailDevice failDevice(1500);
  78. QVERIFY(failDevice.open(QIODevice::WriteOnly));
  79. QByteArray input(2000, 'Z');
  80. HashedBlockStream writer(&failDevice, 500);
  81. QVERIFY(writer.open(QIODevice::WriteOnly));
  82. QCOMPARE(writer.write(input.left(900)), qint64(900));
  83. writer.write(input.left(900));
  84. QVERIFY(!writer.reset());
  85. QCOMPARE(writer.errorString(), QString("FAILDEVICE"));
  86. }