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
|
#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 int64_t getLength() const CXX11_OVERRIDE { return length; }
virtual int64_t getWrittenLength() const CXX11_OVERRIDE
{
return writtenLength;
}
virtual void updateWrittenLength(int64_t bytes) CXX11_OVERRIDE
{
writtenLength += bytes;
}
int64_t length;
int64_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
|