From c1730aeea945f80b5bf152dc6e7b7d9a42a40b5c Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 22 Nov 2009 15:31:47 +0000 Subject: 2009-11-23 Tatsuhiro Tsujikawa Fixed ut_metadata data handling. Implemented UTMetadataDataExtensionMessage::doReceivedAction(). Initialize PeerStorage in HandshakeExtensionMessage::doReceivedAction() when metadata_size is received. * src/DefaultExtensionMessageFactory.cc * src/DefaultExtensionMessageFactory.h * src/HandshakeExtensionMessage.cc * src/HandshakeExtensionMessage.h * src/UTMetadataDataExtensionMessage.cc * src/UTMetadataDataExtensionMessage.h * src/UTMetadataRequestExtensionMessage.cc * src/UTMetadataRequestFactory.cc * src/UTMetadataRequestFactory.h * src/UTMetadataRequestTracker.cc * src/UTMetadataRequestTracker.h * test/DefaultExtensionMessageFactoryTest.cc * test/HandshakeExtensionMessageTest.cc * test/MockBtMessage.h * test/UTMetadataDataExtensionMessageTest.cc * test/UTMetadataRequestExtensionMessageTest.cc * test/UTMetadataRequestFactoryTest.cc * test/UTMetadataRequestTrackerTest.cc * test/extension_message_test_helper.h --- test/UTMetadataDataExtensionMessageTest.cc | 59 +++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) (limited to 'test/UTMetadataDataExtensionMessageTest.cc') diff --git a/test/UTMetadataDataExtensionMessageTest.cc b/test/UTMetadataDataExtensionMessageTest.cc index 463aa3a1..9d8c6ccb 100644 --- a/test/UTMetadataDataExtensionMessageTest.cc +++ b/test/UTMetadataDataExtensionMessageTest.cc @@ -5,6 +5,17 @@ #include #include "BtConstants.h" +#include "PieceStorage.h" +#include "DownloadContext.h" +#include "BtRuntime.h" +#include "DirectDiskAdaptor.h" +#include "ByteArrayDiskWriter.h" +#include "BDE.h" +#include "DownloadContext.h" +#include "MockPieceStorage.h" +#include "UTMetadataRequestTracker.h" +#include "bittorrent_helper.h" +#include "MessageDigestHelper.h" namespace aria2 { @@ -41,7 +52,7 @@ void UTMetadataDataExtensionMessageTest::testGetBencodedData() msg.setTotalSize(data.size()); msg.setData(data); CPPUNIT_ASSERT_EQUAL - (std::string("d8:msg_typei1e5:piecei1e10:total_sizei16384ee16384:")+data, + (std::string("d8:msg_typei1e5:piecei1e10:total_sizei16384ee")+data, msg.getBencodedData()); } @@ -55,6 +66,52 @@ void UTMetadataDataExtensionMessageTest::testToString() void UTMetadataDataExtensionMessageTest::testDoReceivedAction() { + SharedHandle diskAdaptor(new DirectDiskAdaptor()); + SharedHandle diskWriter(new ByteArrayDiskWriter()); + diskAdaptor->setDiskWriter(diskWriter); + SharedHandle pieceStorage(new MockPieceStorage()); + pieceStorage->setDiskAdaptor(diskAdaptor); + SharedHandle btRuntime(new BtRuntime()); + SharedHandle tracker + (new UTMetadataRequestTracker()); + SharedHandle dctx(new DownloadContext()); + BDE attrs = BDE::dict(); + + std::string piece0 = std::string(METADATA_PIECE_SIZE, '0'); + std::string piece1 = std::string(METADATA_PIECE_SIZE, '1'); + std::string metadata = piece0+piece1; + + unsigned char infoHash[INFO_HASH_LENGTH]; + MessageDigestHelper::digest(infoHash, INFO_HASH_LENGTH, + MessageDigestContext::SHA1, + metadata.data(), metadata.size()); + attrs[bittorrent::INFO_HASH] = std::string(&infoHash[0], &infoHash[20]); + + dctx->setAttribute(bittorrent::BITTORRENT, attrs); + + UTMetadataDataExtensionMessage m(1); + m.setPieceStorage(pieceStorage); + m.setBtRuntime(btRuntime); + m.setUTMetadataRequestTracker(tracker); + m.setDownloadContext(dctx); + + m.setIndex(1); + m.setData(piece1); + + tracker->add(1); + m.doReceivedAction(); + CPPUNIT_ASSERT(!tracker->tracks(1)); + + pieceStorage->setDownloadFinished(true); + // If piece is not tracked, it is ignored. + m.setIndex(0); + m.setData(piece0); + m.doReceivedAction(); + CPPUNIT_ASSERT(!btRuntime->isHalt()); + + tracker->add(0); + m.doReceivedAction(); + CPPUNIT_ASSERT(btRuntime->isHalt()); } } // namespace aria2 -- cgit