SinkStreamFilterTest.cc 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 int32_t getLength() const
  19. {
  20. return length;
  21. }
  22. virtual int32_t getWrittenLength() const
  23. {
  24. return writtenLength;
  25. }
  26. virtual void updateWrittenLength(int32_t bytes)
  27. {
  28. writtenLength += bytes;
  29. }
  30. int32_t length;
  31. int32_t writtenLength;
  32. };
  33. SharedHandle<SinkStreamFilter> filter_;
  34. SharedHandle<SinkStreamFilter> sinkFilter_;
  35. SharedHandle<ByteArrayDiskWriter> writer_;
  36. SharedHandle<MockSegment2> segment_;
  37. void clearWriter()
  38. {
  39. writer_->setString("");
  40. }
  41. public:
  42. void setUp()
  43. {
  44. writer_.reset(new ByteArrayDiskWriter());
  45. sinkFilter_.reset(new SinkStreamFilter());
  46. filter_.reset(new SinkStreamFilter(sinkFilter_));
  47. sinkFilter_->init();
  48. filter_->init();
  49. segment_.reset(new MockSegment2(16));
  50. }
  51. void testTransform_with_length();
  52. void testTransform_without_length();
  53. };
  54. CPPUNIT_TEST_SUITE_REGISTRATION( SinkStreamFilterTest );
  55. void SinkStreamFilterTest::testTransform_with_length()
  56. {
  57. // If segment_->getLength() > 0, make sure that at most
  58. // segment_->getLength()-segment_->getWrittenLength() bytes are
  59. // written.
  60. std::string msg("01234567890123456");
  61. ssize_t r = filter_->transform
  62. (writer_, segment_,
  63. reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
  64. CPPUNIT_ASSERT_EQUAL((ssize_t)16, r);
  65. }
  66. void SinkStreamFilterTest::testTransform_without_length()
  67. {
  68. // If segment_->getLength() == 0, all incoming bytes are written.
  69. segment_->length = 0;
  70. std::string msg("01234567890123456");
  71. ssize_t r = filter_->transform
  72. (writer_, segment_,
  73. reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
  74. CPPUNIT_ASSERT_EQUAL((ssize_t)17, r);
  75. }
  76. } // namespace aria2