GZipDecodingStreamFilterTest.cc 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "GZipDecodingStreamFilter.h"
  2. #include <cassert>
  3. #include <iostream>
  4. #include <fstream>
  5. #include <cppunit/extensions/HelperMacros.h>
  6. #include "Exception.h"
  7. #include "util.h"
  8. #include "Segment.h"
  9. #include "ByteArrayDiskWriter.h"
  10. #include "SinkStreamFilter.h"
  11. #include "MockSegment.h"
  12. #ifdef ENABLE_MESSAGE_DIGEST
  13. # include "MessageDigest.h"
  14. # include "MessageDigestHelper.h"
  15. #endif // ENABLE_MESSAGE_DIGEST
  16. namespace aria2 {
  17. class GZipDecodingStreamFilterTest:public CppUnit::TestFixture {
  18. CPPUNIT_TEST_SUITE(GZipDecodingStreamFilterTest);
  19. CPPUNIT_TEST(testTransform);
  20. CPPUNIT_TEST_SUITE_END();
  21. class MockSegment2:public MockSegment {
  22. private:
  23. off_t positionToWrite_;
  24. public:
  25. MockSegment2():positionToWrite_(0) {}
  26. virtual void updateWrittenLength(size_t bytes)
  27. {
  28. positionToWrite_ += bytes;
  29. }
  30. virtual off_t getPositionToWrite() const
  31. {
  32. return positionToWrite_;
  33. }
  34. };
  35. SharedHandle<GZipDecodingStreamFilter> filter_;
  36. SharedHandle<SinkStreamFilter> sinkFilter_;
  37. SharedHandle<ByteArrayDiskWriter> writer_;
  38. SharedHandle<MockSegment2> segment_;
  39. public:
  40. void setUp()
  41. {
  42. writer_.reset(new ByteArrayDiskWriter());
  43. sinkFilter_.reset(new SinkStreamFilter());
  44. filter_.reset(new GZipDecodingStreamFilter(sinkFilter_));
  45. sinkFilter_->init();
  46. filter_->init();
  47. segment_.reset(new MockSegment2());
  48. }
  49. void testTransform();
  50. };
  51. CPPUNIT_TEST_SUITE_REGISTRATION(GZipDecodingStreamFilterTest);
  52. void GZipDecodingStreamFilterTest::testTransform()
  53. {
  54. unsigned char buf[4096];
  55. std::ifstream in("gzip_decode_test.gz", std::ios::binary);
  56. while(in) {
  57. in.read(reinterpret_cast<char*>(buf), sizeof(buf));
  58. filter_->transform(writer_, segment_, buf, in.gcount());
  59. }
  60. CPPUNIT_ASSERT(filter_->finished());
  61. #ifdef ENABLE_MESSAGE_DIGEST
  62. std::string data = writer_->getString();
  63. SharedHandle<MessageDigest> sha1(MessageDigest::sha1());
  64. sha1->update(data.data(), data.size());
  65. CPPUNIT_ASSERT_EQUAL(std::string("8b577b33c0411b2be9d4fa74c7402d54a8d21f96"),
  66. sha1->hexDigest());
  67. #endif // ENABLE_MESSAGE_DIGEST
  68. }
  69. } // namespace aria2