diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-09-06 14:29:36 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-09-06 14:29:36 +0000 |
| commit | efbfe4c006cfb6e0bf3ee4ed57d0657c0cd85c19 (patch) | |
| tree | a72723a125c34220772259f051673ff88598bded /test | |
| parent | 552c753dbba55005964ad60698d803a44dac6391 (diff) | |
2010-09-06 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Data from remote server in HTTP/FTP download are now written to
the disk(or memory) through StreamFilter. Decoding chunked and
gziped streams are done cascading StreamFilter.
Removed inefficient 1byte read code.
* src/ChunkedDecodingStreamFilter.cc
* src/ChunkedDecodingStreamFilter.h
* src/DownloadCommand.cc
* src/DownloadCommand.h
* src/GZipDecodingStreamFilter.cc
* src/GZipDecodingStreamFilter.h
* src/HttpConnection.cc
* src/HttpDownloadCommand.cc
* src/HttpResponse.cc
* src/HttpResponse.h
* src/HttpResponseCommand.cc
* src/HttpResponseCommand.h
* src/HttpSkipResponseCommand.cc
* src/HttpSkipResponseCommand.h
* src/Makefile.am
* src/NullSinkStreamFilter.cc
* src/NullSinkStreamFilter.h
* src/RequestGroup.cc
* src/SinkStreamFilter.cc
* src/SinkStreamFilter.h
* src/StreamFilter.cc
* src/StreamFilter.h
* test/ChunkedDecodingStreamFilterTest.cc
* test/GZipDecodingStreamFilterTest.cc
* test/HttpResponseTest.cc
* test/Makefile.am
* test/MockSegment.h
Diffstat (limited to 'test')
| -rw-r--r-- | test/ChunkedDecodingStreamFilterTest.cc | 240 | ||||
| -rw-r--r-- | test/GZipDecodingStreamFilterTest.cc | 81 | ||||
| -rw-r--r-- | test/HttpResponseTest.cc | 41 | ||||
| -rw-r--r-- | test/Makefile.am | 4 | ||||
| -rw-r--r-- | test/Makefile.in | 16 | ||||
| -rw-r--r-- | test/MockSegment.h | 80 |
6 files changed, 439 insertions, 23 deletions
diff --git a/test/ChunkedDecodingStreamFilterTest.cc b/test/ChunkedDecodingStreamFilterTest.cc new file mode 100644 index 00000000..8dea7bd1 --- /dev/null +++ b/test/ChunkedDecodingStreamFilterTest.cc @@ -0,0 +1,240 @@ +#include "ChunkedDecodingStreamFilter.h" + +#include <cstdlib> +#include <iostream> +#include <cppunit/extensions/HelperMacros.h> + +#include "DlAbortEx.h" +#include "Segment.h" +#include "ByteArrayDiskWriter.h" +#include "SinkStreamFilter.h" +#include "MockSegment.h" + +namespace aria2 { + +class ChunkedDecodingStreamFilterTest:public CppUnit::TestFixture { + + CPPUNIT_TEST_SUITE(ChunkedDecodingStreamFilterTest); + CPPUNIT_TEST(testTransform); + CPPUNIT_TEST(testTransform_withoutTrailer); + CPPUNIT_TEST(testTransform_with2Trailers); + CPPUNIT_TEST(testTransform_largeChunkSize); + CPPUNIT_TEST(testTransform_tooLargeChunkSize); + CPPUNIT_TEST(testTransform_chunkSizeMismatch); + CPPUNIT_TEST(testGetName); + CPPUNIT_TEST_SUITE_END(); + + SharedHandle<ChunkedDecodingStreamFilter> filter_; + SharedHandle<SinkStreamFilter> sinkFilter_; + SharedHandle<ByteArrayDiskWriter> writer_; + SharedHandle<Segment> segment_; + + void clearWriter() + { + writer_->setString(""); + } +public: + void setUp() + { + writer_.reset(new ByteArrayDiskWriter()); + sinkFilter_.reset(new SinkStreamFilter()); + filter_.reset(new ChunkedDecodingStreamFilter(sinkFilter_)); + sinkFilter_->init(); + filter_->init(); + segment_.reset(new MockSegment()); + } + + void testTransform(); + void testTransform_withoutTrailer(); + void testTransform_with2Trailers(); + void testTransform_largeChunkSize(); + void testTransform_tooLargeChunkSize(); + void testTransform_chunkSizeMismatch(); + void testGetName(); +}; + + +CPPUNIT_TEST_SUITE_REGISTRATION( ChunkedDecodingStreamFilterTest ); + +void ChunkedDecodingStreamFilterTest::testTransform() +{ + try { + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("a\r\n1234567890\r\n"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)10, r); + CPPUNIT_ASSERT_EQUAL(std::string("1234567890"), writer_->getString()); + } + clearWriter(); + // Feed extension; see it is ignored. + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*> + ("3;extensionIgnored\r\n123\r\n"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)3, r); + CPPUNIT_ASSERT_EQUAL(std::string("123"), writer_->getString()); + } + clearWriter(); + // Feed 2extensions; see it is ignored. + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*> + ("3;extension1;extension2;\r\n123\r\n"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)3, r); + CPPUNIT_ASSERT_EQUAL(std::string("123"), writer_->getString()); + } + clearWriter(); + // Not all chunk size is available + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("1"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)0, r); + } + clearWriter(); + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("0\r\n1234567890123456\r\n"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)16, r); + CPPUNIT_ASSERT_EQUAL(std::string("1234567890123456"), + writer_->getString()); + } + clearWriter(); + // Not all chunk data is available + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("10\r\n1234567890"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)10, r); + CPPUNIT_ASSERT_EQUAL(std::string("1234567890"), writer_->getString()); + } + clearWriter(); + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("123456\r\n"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)6, r); + CPPUNIT_ASSERT_EQUAL(std::string("123456"), writer_->getString()); + } + clearWriter(); + // no trailing CR LF. + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("10\r\n1234567890123456"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)16, r); + CPPUNIT_ASSERT_EQUAL(std::string("1234567890123456"), + writer_->getString()); + } + clearWriter(); + // feed only CR + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("\r"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)0, r); + } + // feed next LF + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("\n"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)0, r); + CPPUNIT_ASSERT_EQUAL(std::string(""), writer_->getString()); + } + // feed 0 CR LF. + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("0\r\n"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)0, r); + } + // feed trailer + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("trailer\r\n"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)0, r); + } + // feed final CRLF + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("\r\n"); + ssize_t r = filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_ASSERT_EQUAL((ssize_t)0, r); + } + // input is over + CPPUNIT_ASSERT(filter_->finished()); + } catch(DlAbortEx& e) { + CPPUNIT_FAIL(e.stackTrace()); + } +} + +void ChunkedDecodingStreamFilterTest::testTransform_withoutTrailer() +{ + CPPUNIT_ASSERT_EQUAL + ((ssize_t)0, + filter_->transform + (writer_, segment_, + reinterpret_cast<const unsigned char*>("0\r\n\r\n"), 5)); + CPPUNIT_ASSERT(filter_->finished()); +} + +void ChunkedDecodingStreamFilterTest::testTransform_with2Trailers() +{ + CPPUNIT_ASSERT_EQUAL + ((ssize_t)0, + filter_->transform + (writer_, segment_, + reinterpret_cast<const unsigned char*>("0\r\nt1\r\nt2\r\n\r\n"), 13)); + CPPUNIT_ASSERT(filter_->finished()); +} + +void ChunkedDecodingStreamFilterTest::testTransform_largeChunkSize() +{ + // chunkSize should be under 2^64-1 + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("ffffffffffffffff\r\n"); + filter_->transform(writer_, segment_, msg.data(), msg.size()); + } +} + +void ChunkedDecodingStreamFilterTest::testTransform_tooLargeChunkSize() +{ + // chunkSize 2^64 causes error + { + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("10000000000000000\r\n"); + try { + filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_FAIL("exception must be thrown."); + } catch(DlAbortEx& e) { + // success + } + } +} + +void ChunkedDecodingStreamFilterTest::testTransform_chunkSizeMismatch() +{ + std::basic_string<unsigned char> msg = + reinterpret_cast<const unsigned char*>("3\r\n1234\r\n"); + try { + filter_->transform(writer_, segment_, msg.data(), msg.size()); + CPPUNIT_FAIL("exception must be thrown."); + } catch(DlAbortEx& e) { + // success + } +} + +void ChunkedDecodingStreamFilterTest::testGetName() +{ + CPPUNIT_ASSERT_EQUAL + (std::string("ChunkedDecodingStreamFilter"), filter_->getName()); +} + +} // namespace aria2 diff --git a/test/GZipDecodingStreamFilterTest.cc b/test/GZipDecodingStreamFilterTest.cc new file mode 100644 index 00000000..250f410e --- /dev/null +++ b/test/GZipDecodingStreamFilterTest.cc @@ -0,0 +1,81 @@ +#include "GZipDecodingStreamFilter.h" + +#include <cassert> +#include <iostream> +#include <fstream> + +#include <cppunit/extensions/HelperMacros.h> + +#include "Exception.h" +#include "util.h" +#include "Segment.h" +#include "ByteArrayDiskWriter.h" +#include "SinkStreamFilter.h" +#include "MockSegment.h" +#ifdef ENABLE_MESSAGE_DIGEST +# include "MessageDigestHelper.h" +#endif // ENABLE_MESSAGE_DIGEST + +namespace aria2 { + +class GZipDecodingStreamFilterTest:public CppUnit::TestFixture { + + CPPUNIT_TEST_SUITE(GZipDecodingStreamFilterTest); + CPPUNIT_TEST(testTransform); + CPPUNIT_TEST_SUITE_END(); + + class MockSegment2:public MockSegment { + private: + off_t positionToWrite_; + public: + MockSegment2():positionToWrite_(0) {} + + virtual void updateWrittenLength(size_t bytes) + { + positionToWrite_ += bytes; + } + + virtual off_t getPositionToWrite() const + { + return positionToWrite_; + } + }; + + SharedHandle<GZipDecodingStreamFilter> filter_; + SharedHandle<SinkStreamFilter> sinkFilter_; + SharedHandle<ByteArrayDiskWriter> writer_; + SharedHandle<MockSegment2> segment_; +public: + void setUp() + { + writer_.reset(new ByteArrayDiskWriter()); + sinkFilter_.reset(new SinkStreamFilter()); + filter_.reset(new GZipDecodingStreamFilter(sinkFilter_)); + sinkFilter_->init(); + filter_->init(); + segment_.reset(new MockSegment2()); + } + + void testTransform(); +}; + + +CPPUNIT_TEST_SUITE_REGISTRATION(GZipDecodingStreamFilterTest); + +void GZipDecodingStreamFilterTest::testTransform() +{ + unsigned char buf[4096]; + std::ifstream in("gzip_decode_test.gz", std::ios::binary); + while(in) { + in.read(reinterpret_cast<char*>(buf), sizeof(buf)); + filter_->transform(writer_, segment_, buf, in.gcount()); + } + CPPUNIT_ASSERT(filter_->finished()); +#ifdef ENABLE_MESSAGE_DIGEST + CPPUNIT_ASSERT_EQUAL(std::string("8b577b33c0411b2be9d4fa74c7402d54a8d21f96"), + MessageDigestHelper::digestString + (MessageDigestContext::SHA1, writer_->getString())); +#endif // ENABLE_MESSAGE_DIGEST +} + +} // namespace aria2 diff --git a/test/HttpResponseTest.cc b/test/HttpResponseTest.cc index dd31da09..a530a884 100644 --- a/test/HttpResponseTest.cc +++ b/test/HttpResponseTest.cc @@ -12,11 +12,11 @@ #include "HttpRequest.h" #include "Exception.h" #include "A2STR.h" -#include "Decoder.h" #include "DlRetryEx.h" #include "CookieStorage.h" #include "AuthConfigFactory.h" #include "AuthConfig.h" +#include "StreamFilter.h" namespace aria2 { @@ -36,10 +36,10 @@ class HttpResponseTest : public CppUnit::TestFixture { CPPUNIT_TEST(testIsRedirect); CPPUNIT_TEST(testIsTransferEncodingSpecified); CPPUNIT_TEST(testGetTransferEncoding); - CPPUNIT_TEST(testGetTransferEncodingDecoder); + CPPUNIT_TEST(testGetTransferEncodingStreamFilter); CPPUNIT_TEST(testIsContentEncodingSpecified); CPPUNIT_TEST(testGetContentEncoding); - CPPUNIT_TEST(testGetContentEncodingDecoder); + CPPUNIT_TEST(testGetContentEncodingStreamFilter); CPPUNIT_TEST(testValidateResponse); CPPUNIT_TEST(testValidateResponse_good_range); CPPUNIT_TEST(testValidateResponse_bad_range); @@ -68,10 +68,10 @@ public: void testIsRedirect(); void testIsTransferEncodingSpecified(); void testGetTransferEncoding(); - void testGetTransferEncodingDecoder(); + void testGetTransferEncodingStreamFilter(); void testIsContentEncodingSpecified(); void testGetContentEncoding(); - void testGetContentEncodingDecoder(); + void testGetContentEncodingStreamFilter(); void testValidateResponse(); void testValidateResponse_good_range(); void testValidateResponse_bad_range(); @@ -253,18 +253,18 @@ void HttpResponseTest::testGetTransferEncoding() httpResponse.getTransferEncoding()); } -void HttpResponseTest::testGetTransferEncodingDecoder() +void HttpResponseTest::testGetTransferEncodingStreamFilter() { HttpResponse httpResponse; SharedHandle<HttpHeader> httpHeader(new HttpHeader()); httpResponse.setHttpHeader(httpHeader); - CPPUNIT_ASSERT(httpResponse.getTransferEncodingDecoder().isNull()); + CPPUNIT_ASSERT(httpResponse.getTransferEncodingStreamFilter().isNull()); httpHeader->put("Transfer-Encoding", "chunked"); - CPPUNIT_ASSERT(!httpResponse.getTransferEncodingDecoder().isNull()); + CPPUNIT_ASSERT(!httpResponse.getTransferEncodingStreamFilter().isNull()); } void HttpResponseTest::testIsContentEncodingSpecified() @@ -295,37 +295,42 @@ void HttpResponseTest::testGetContentEncoding() CPPUNIT_ASSERT_EQUAL(std::string("gzip"), httpResponse.getContentEncoding()); } -void HttpResponseTest::testGetContentEncodingDecoder() +void HttpResponseTest::testGetContentEncodingStreamFilter() { HttpResponse httpResponse; SharedHandle<HttpHeader> httpHeader(new HttpHeader()); httpResponse.setHttpHeader(httpHeader); - CPPUNIT_ASSERT(httpResponse.getContentEncodingDecoder().isNull()); + CPPUNIT_ASSERT(httpResponse.getContentEncodingStreamFilter().isNull()); #ifdef HAVE_LIBZ httpHeader->put("Content-Encoding", "gzip"); { - SharedHandle<Decoder> decoder = httpResponse.getContentEncodingDecoder(); - CPPUNIT_ASSERT(!decoder.isNull()); - CPPUNIT_ASSERT_EQUAL(std::string("GZipDecoder"), decoder->getName()); + SharedHandle<StreamFilter> filter = + httpResponse.getContentEncodingStreamFilter(); + CPPUNIT_ASSERT(!filter.isNull()); + CPPUNIT_ASSERT_EQUAL(std::string("GZipDecodingStreamFilter"), + filter->getName()); } httpHeader.reset(new HttpHeader()); httpResponse.setHttpHeader(httpHeader); httpHeader->put("Content-Encoding", "deflate"); { - SharedHandle<Decoder> decoder = httpResponse.getContentEncodingDecoder(); - CPPUNIT_ASSERT(!decoder.isNull()); - CPPUNIT_ASSERT_EQUAL(std::string("GZipDecoder"), decoder->getName()); + SharedHandle<StreamFilter> filter = + httpResponse.getContentEncodingStreamFilter(); + CPPUNIT_ASSERT(!filter.isNull()); + CPPUNIT_ASSERT_EQUAL(std::string("GZipDecodingStreamFilter"), + filter->getName()); } #endif // HAVE_LIBZ httpHeader.reset(new HttpHeader()); httpResponse.setHttpHeader(httpHeader); httpHeader->put("Content-Encoding", "bzip2"); { - SharedHandle<Decoder> decoder = httpResponse.getContentEncodingDecoder(); - CPPUNIT_ASSERT(decoder.isNull()); + SharedHandle<StreamFilter> filter = + httpResponse.getContentEncodingStreamFilter(); + CPPUNIT_ASSERT(filter.isNull()); } } diff --git a/test/Makefile.am b/test/Makefile.am index 20fc2778..9871cc21 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -72,7 +72,9 @@ aria2c_SOURCES = AllTest.cc\ bitfieldTest.cc\ DownloadContextTest.cc\ SessionSerializerTest.cc\ - ValueBaseTest.cc + ValueBaseTest.cc\ + ChunkedDecodingStreamFilterTest.cc\ + GZipDecodingStreamFilterTest.cc if ENABLE_XML_RPC aria2c_SOURCES += XmlRpcRequestParserControllerTest.cc\ diff --git a/test/Makefile.in b/test/Makefile.in index c81a278e..c6717271 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -213,6 +213,8 @@ am__aria2c_SOURCES_DIST = AllTest.cc TestUtil.cc TestUtil.h \ InOrderPieceSelector.h LongestSequencePieceSelectorTest.cc \ a2algoTest.cc bitfieldTest.cc DownloadContextTest.cc \ SessionSerializerTest.cc ValueBaseTest.cc \ + ChunkedDecodingStreamFilterTest.cc \ + GZipDecodingStreamFilterTest.cc \ XmlRpcRequestParserControllerTest.cc \ XmlRpcRequestProcessorTest.cc XmlRpcMethodTest.cc \ FallocFileAllocationIteratorTest.cc GZipDecoderTest.cc \ @@ -404,9 +406,11 @@ am_aria2c_OBJECTS = AllTest.$(OBJEXT) TestUtil.$(OBJEXT) \ LongestSequencePieceSelectorTest.$(OBJEXT) \ a2algoTest.$(OBJEXT) bitfieldTest.$(OBJEXT) \ DownloadContextTest.$(OBJEXT) SessionSerializerTest.$(OBJEXT) \ - ValueBaseTest.$(OBJEXT) $(am__objects_1) $(am__objects_2) \ - $(am__objects_3) $(am__objects_4) $(am__objects_5) \ - $(am__objects_6) $(am__objects_7) + ValueBaseTest.$(OBJEXT) \ + ChunkedDecodingStreamFilterTest.$(OBJEXT) \ + GZipDecodingStreamFilterTest.$(OBJEXT) $(am__objects_1) \ + $(am__objects_2) $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_7) aria2c_OBJECTS = $(am_aria2c_OBJECTS) am__DEPENDENCIES_1 = aria2c_DEPENDENCIES = ../src/libaria2c.a $(am__DEPENDENCIES_1) @@ -639,7 +643,9 @@ aria2c_SOURCES = AllTest.cc TestUtil.cc TestUtil.h SocketCoreTest.cc \ RarestPieceSelectorTest.cc PieceStatManTest.cc \ InOrderPieceSelector.h LongestSequencePieceSelectorTest.cc \ a2algoTest.cc bitfieldTest.cc DownloadContextTest.cc \ - SessionSerializerTest.cc ValueBaseTest.cc $(am__append_1) \ + SessionSerializerTest.cc ValueBaseTest.cc \ + ChunkedDecodingStreamFilterTest.cc \ + GZipDecodingStreamFilterTest.cc $(am__append_1) \ $(am__append_2) $(am__append_3) $(am__append_4) \ $(am__append_5) $(am__append_6) $(am__append_7) @@ -773,6 +779,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtUnchokeMessageTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ByteArrayDiskWriterTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChunkedDecoderTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChunkedDecodingStreamFilterTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieParserTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieStorageTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieTest.Po@am__quote@ @@ -822,6 +829,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FtpConnectionTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GZipDecoderTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GZipDecodingStreamFilterTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GZipEncoderTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrowSegmentTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HandshakeExtensionMessageTest.Po@am__quote@ diff --git a/test/MockSegment.h b/test/MockSegment.h new file mode 100644 index 00000000..5be67fc8 --- /dev/null +++ b/test/MockSegment.h @@ -0,0 +1,80 @@ +#ifndef D_MOCK_SEGMENT_H +#define D_MOCK_SEGMENT_H + +#include "Segment.h" +#include "Piece.h" +#include "A2STR.h" + +namespace aria2 { + +class MockSegment:public Segment { +public: + virtual bool complete() const + { + return false; + } + + virtual size_t getIndex() const + { + return 0; + } + + virtual off_t getPosition() const + { + return 0; + } + + virtual off_t getPositionToWrite() const + { + return 0; + } + + virtual size_t getLength() const + { + return 0; + } + + virtual size_t getSegmentLength() const + { + return 0; + } + + virtual size_t getWrittenLength() const + { + return 0; + } + + virtual void updateWrittenLength(size_t bytes) {} + +#ifdef ENABLE_MESSAGE_DIGEST + + // `begin' is a offset inside this segment. + virtual bool updateHash + (uint32_t begin, const unsigned char* data, size_t dataLength) + { + return false; + } + + virtual bool isHashCalculated() const + { + return false; + } + + virtual std::string getHashString() + { + return A2STR::NIL; + } + +#endif // ENABLE_MESSAGE_DIGEST + + virtual void clear() {} + + virtual SharedHandle<Piece> getPiece() const + { + return SharedHandle<Piece>(); + } +}; + +} // namespace aria2 + +#endif // D_MOCK_SEGMENT_H |
