123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #include "UTMetadataDataExtensionMessage.h"
- #include <iostream>
- #include <cppunit/extensions/HelperMacros.h>
- #include "BtConstants.h"
- #include "PieceStorage.h"
- #include "DownloadContext.h"
- #include "DirectDiskAdaptor.h"
- #include "ByteArrayDiskWriter.h"
- #include "DownloadContext.h"
- #include "MockPieceStorage.h"
- #include "UTMetadataRequestTracker.h"
- #include "bittorrent_helper.h"
- #include "MessageDigest.h"
- #include "message_digest_helper.h"
- namespace aria2 {
- class UTMetadataDataExtensionMessageTest : public CppUnit::TestFixture {
- CPPUNIT_TEST_SUITE(UTMetadataDataExtensionMessageTest);
- CPPUNIT_TEST(testGetExtensionMessageID);
- CPPUNIT_TEST(testGetBencodedData);
- CPPUNIT_TEST(testToString);
- CPPUNIT_TEST(testDoReceivedAction);
- CPPUNIT_TEST_SUITE_END();
- public:
- void testGetExtensionMessageID();
- void testGetBencodedData();
- void testToString();
- void testDoReceivedAction();
- };
- CPPUNIT_TEST_SUITE_REGISTRATION(UTMetadataDataExtensionMessageTest);
- void UTMetadataDataExtensionMessageTest::testGetExtensionMessageID()
- {
- UTMetadataDataExtensionMessage msg(1);
- CPPUNIT_ASSERT_EQUAL((uint8_t)1, msg.getExtensionMessageID());
- }
- void UTMetadataDataExtensionMessageTest::testGetBencodedData()
- {
- std::string data(METADATA_PIECE_SIZE, '0');
- UTMetadataDataExtensionMessage msg(1);
- msg.setIndex(1);
- msg.setTotalSize(data.size());
- msg.setData(data);
- CPPUNIT_ASSERT_EQUAL(
- std::string("d8:msg_typei1e5:piecei1e10:total_sizei16384ee") + data,
- msg.getPayload());
- }
- void UTMetadataDataExtensionMessageTest::testToString()
- {
- UTMetadataDataExtensionMessage msg(1);
- msg.setIndex(100);
- CPPUNIT_ASSERT_EQUAL(std::string("ut_metadata data piece=100"),
- msg.toString());
- }
- void UTMetadataDataExtensionMessageTest::testDoReceivedAction()
- {
- auto diskAdaptor = std::make_shared<DirectDiskAdaptor>();
- ByteArrayDiskWriter* diskWriter;
- {
- auto dw = make_unique<ByteArrayDiskWriter>();
- diskWriter = dw.get();
- diskAdaptor->setDiskWriter(std::move(dw));
- }
- auto pieceStorage = make_unique<MockPieceStorage>();
- pieceStorage->setDiskAdaptor(diskAdaptor);
- auto tracker = make_unique<UTMetadataRequestTracker>();
- auto dctx = make_unique<DownloadContext>();
- 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];
- message_digest::digest(infoHash, INFO_HASH_LENGTH,
- MessageDigest::sha1().get(), metadata.data(),
- metadata.size());
- {
- auto attrs = make_unique<TorrentAttribute>();
- attrs->infoHash = std::string(&infoHash[0], &infoHash[20]);
- dctx->setAttribute(CTX_ATTR_BT, std::move(attrs));
- }
- UTMetadataDataExtensionMessage m(1);
- m.setPieceStorage(pieceStorage.get());
- m.setUTMetadataRequestTracker(tracker.get());
- m.setDownloadContext(dctx.get());
- 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();
- tracker->add(0);
- m.doReceivedAction();
- CPPUNIT_ASSERT_EQUAL(metadata, diskWriter->getString());
- }
- } // namespace aria2
|