summaryrefslogtreecommitdiff
path: root/test/SinkStreamFilterTest.cc
blob: e711a5348cdb2971d9a09e5007dec5559587c7c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "SinkStreamFilter.h"

#include <cstdlib>
#include <iostream>
#include <cppunit/extensions/HelperMacros.h>

#include "Segment.h"
#include "ByteArrayDiskWriter.h"
#include "SinkStreamFilter.h"
#include "MockSegment.h"

namespace aria2 {

class SinkStreamFilterTest:public CppUnit::TestFixture {

  CPPUNIT_TEST_SUITE(SinkStreamFilterTest);
  CPPUNIT_TEST(testTransform_with_length);
  CPPUNIT_TEST(testTransform_without_length);
  CPPUNIT_TEST_SUITE_END();

  class MockSegment2:public MockSegment {
  public:
    MockSegment2(int32_t length):length(length), writtenLength(0) {}

    virtual int32_t getLength() const CXX11_OVERRIDE
    {
      return length;
    }

    virtual int32_t getWrittenLength() const CXX11_OVERRIDE
    {
      return writtenLength;
    }

    virtual void updateWrittenLength(int32_t bytes) CXX11_OVERRIDE
    {
      writtenLength += bytes;
    }

    int32_t length;
    int32_t writtenLength;
  };

  std::shared_ptr<SinkStreamFilter> filter_;
  std::shared_ptr<ByteArrayDiskWriter> writer_;
  std::shared_ptr<MockSegment2> segment_;

  void clearWriter()
  {
    writer_->setString("");
  }
public:
  void setUp()
  {
    writer_.reset(new ByteArrayDiskWriter());
    filter_.reset(new SinkStreamFilter());
    filter_->init();
    segment_.reset(new MockSegment2(16));
  }

  void testTransform_with_length();
  void testTransform_without_length();
};


CPPUNIT_TEST_SUITE_REGISTRATION( SinkStreamFilterTest );

void SinkStreamFilterTest::testTransform_with_length()
{
  // If segment_->getLength() > 0, make sure that at most
  // segment_->getLength()-segment_->getWrittenLength() bytes are
  // written.
  std::string msg("01234567890123456");
  ssize_t r = filter_->transform
    (writer_, segment_,
     reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
  CPPUNIT_ASSERT_EQUAL((ssize_t)16, r);
}

void SinkStreamFilterTest::testTransform_without_length()
{
  // If segment_->getLength() == 0, all incoming bytes are written.
  segment_->length = 0;
  std::string msg("01234567890123456");
  ssize_t r = filter_->transform
    (writer_, segment_,
     reinterpret_cast<const unsigned char*>(msg.c_str()), msg.size());
  CPPUNIT_ASSERT_EQUAL((ssize_t)17, r);
}

} // namespace aria2