SinkStreamFilterTest.cc 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "SinkStreamFilter.h"
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <cppunit/extensions/HelperMacros.h>
  5. #include "Segment.h"
  6. #include "ByteArrayDiskWriter.h"
  7. #include "SinkStreamFilter.h"
  8. #include "MockSegment.h"
  9. namespace aria2 {
  10. class SinkStreamFilterTest : public CppUnit::TestFixture {
  11. CPPUNIT_TEST_SUITE(SinkStreamFilterTest);
  12. CPPUNIT_TEST(testTransform_with_length);
  13. CPPUNIT_TEST(testTransform_without_length);
  14. CPPUNIT_TEST_SUITE_END();
  15. class MockSegment2 : public MockSegment {
  16. public:
  17. MockSegment2(int32_t length) : length(length), writtenLength(0) {}
  18. virtual int64_t getLength() const CXX11_OVERRIDE { return length; }
  19. virtual int64_t getWrittenLength() const CXX11_OVERRIDE
  20. {
  21. return writtenLength;
  22. }
  23. virtual void updateWrittenLength(int64_t bytes) CXX11_OVERRIDE
  24. {
  25. writtenLength += bytes;
  26. }
  27. int64_t length;
  28. int64_t writtenLength;
  29. };
  30. std::shared_ptr<SinkStreamFilter> filter_;
  31. std::shared_ptr<ByteArrayDiskWriter> writer_;
  32. std::shared_ptr<MockSegment2> segment_;
  33. void clearWriter() { writer_->setString(""); }
  34. public:
  35. void setUp()
  36. {
  37. writer_.reset(new ByteArrayDiskWriter());
  38. filter_.reset(new SinkStreamFilter());
  39. filter_->init();
  40. segment_.reset(new MockSegment2(16));
  41. }
  42. void testTransform_with_length();
  43. void testTransform_without_length();
  44. };
  45. CPPUNIT_TEST_SUITE_REGISTRATION(SinkStreamFilterTest);
  46. void SinkStreamFilterTest::testTransform_with_length()
  47. {
  48. // If segment_->getLength() > 0, make sure that at most
  49. // segment_->getLength()-segment_->getWrittenLength() bytes are
  50. // written.
  51. std::string msg("01234567890123456");
  52. ssize_t r = filter_->transform(
  53. writer_, segment_, reinterpret_cast<const unsigned char*>(msg.c_str()),
  54. msg.size());
  55. CPPUNIT_ASSERT_EQUAL((ssize_t)16, r);
  56. }
  57. void SinkStreamFilterTest::testTransform_without_length()
  58. {
  59. // If segment_->getLength() == 0, all incoming bytes are written.
  60. segment_->length = 0;
  61. std::string msg("01234567890123456");
  62. ssize_t r = filter_->transform(
  63. writer_, segment_, reinterpret_cast<const unsigned char*>(msg.c_str()),
  64. msg.size());
  65. CPPUNIT_ASSERT_EQUAL((ssize_t)17, r);
  66. }
  67. } // namespace aria2