mirror of https://github.com/aria2/aria2
174 lines
5.0 KiB
C++
174 lines
5.0 KiB
C++
#include "UTMetadataRequestExtensionMessage.h"
|
|
|
|
#include <iostream>
|
|
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
#include "Peer.h"
|
|
#include "DownloadContext.h"
|
|
#include "MockBtMessage.h"
|
|
#include "MockBtMessageDispatcher.h"
|
|
#include "MockBtMessageFactory.h"
|
|
#include "bittorrent_helper.h"
|
|
#include "BtHandshakeMessage.h"
|
|
#include "UTMetadataRejectExtensionMessage.h"
|
|
#include "UTMetadataDataExtensionMessage.h"
|
|
#include "PieceStorage.h"
|
|
#include "extension_message_test_helper.h"
|
|
#include "DlAbortEx.h"
|
|
|
|
namespace aria2 {
|
|
|
|
class UTMetadataRequestExtensionMessageTest:public CppUnit::TestFixture {
|
|
|
|
CPPUNIT_TEST_SUITE(UTMetadataRequestExtensionMessageTest);
|
|
CPPUNIT_TEST(testGetExtensionMessageID);
|
|
CPPUNIT_TEST(testGetExtensionName);
|
|
CPPUNIT_TEST(testGetBencodedData);
|
|
CPPUNIT_TEST(testToString);
|
|
CPPUNIT_TEST(testDoReceivedAction_reject);
|
|
CPPUNIT_TEST(testDoReceivedAction_data);
|
|
CPPUNIT_TEST_SUITE_END();
|
|
public:
|
|
SharedHandle<DownloadContext> dctx_;
|
|
SharedHandle<WrapExtBtMessageFactory> messageFactory_;
|
|
SharedHandle<MockBtMessageDispatcher> dispatcher_;
|
|
SharedHandle<Peer> peer_;
|
|
|
|
void setUp()
|
|
{
|
|
messageFactory_.reset(new WrapExtBtMessageFactory());
|
|
dispatcher_.reset(new MockBtMessageDispatcher());
|
|
dctx_.reset(new DownloadContext());
|
|
SharedHandle<TorrentAttribute> attrs(new TorrentAttribute());
|
|
dctx_->setAttribute(bittorrent::BITTORRENT, attrs);
|
|
peer_.reset(new Peer("host", 6880));
|
|
peer_->allocateSessionResource(0, 0);
|
|
peer_->setExtension("ut_metadata", 1);
|
|
}
|
|
|
|
template<typename T>
|
|
SharedHandle<T> getFirstDispatchedMessage()
|
|
{
|
|
SharedHandle<WrapExtBtMessage> wrapmsg =
|
|
dynamic_pointer_cast<WrapExtBtMessage>
|
|
(dispatcher_->messageQueue.front());
|
|
|
|
SharedHandle<T> msg = dynamic_pointer_cast<T>(wrapmsg->m_);
|
|
return msg;
|
|
}
|
|
|
|
void testGetExtensionMessageID();
|
|
void testGetExtensionName();
|
|
void testGetBencodedData();
|
|
void testToString();
|
|
void testDoReceivedAction_reject();
|
|
void testDoReceivedAction_data();
|
|
};
|
|
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION(UTMetadataRequestExtensionMessageTest);
|
|
|
|
void UTMetadataRequestExtensionMessageTest::testGetExtensionMessageID()
|
|
{
|
|
UTMetadataRequestExtensionMessage msg(1);
|
|
CPPUNIT_ASSERT_EQUAL((uint8_t)1, msg.getExtensionMessageID());
|
|
}
|
|
|
|
void UTMetadataRequestExtensionMessageTest::testGetExtensionName()
|
|
{
|
|
UTMetadataRequestExtensionMessage msg(1);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("ut_metadata"), msg.getExtensionName());
|
|
}
|
|
|
|
void UTMetadataRequestExtensionMessageTest::testGetBencodedData()
|
|
{
|
|
UTMetadataRequestExtensionMessage msg(1);
|
|
msg.setIndex(99);
|
|
CPPUNIT_ASSERT_EQUAL
|
|
(std::string("d8:msg_typei0e5:piecei99ee"), msg.getPayload());
|
|
}
|
|
|
|
void UTMetadataRequestExtensionMessageTest::testToString()
|
|
{
|
|
UTMetadataRequestExtensionMessage msg(1);
|
|
msg.setIndex(100);
|
|
CPPUNIT_ASSERT_EQUAL(std::string("ut_metadata request piece=100"),
|
|
msg.toString());
|
|
}
|
|
|
|
void UTMetadataRequestExtensionMessageTest::testDoReceivedAction_reject()
|
|
{
|
|
UTMetadataRequestExtensionMessage msg(1);
|
|
msg.setIndex(10);
|
|
msg.setDownloadContext(dctx_);
|
|
msg.setPeer(peer_);
|
|
msg.setBtMessageFactory(messageFactory_.get());
|
|
msg.setBtMessageDispatcher(dispatcher_.get());
|
|
msg.doReceivedAction();
|
|
|
|
SharedHandle<UTMetadataRejectExtensionMessage> m =
|
|
getFirstDispatchedMessage<UTMetadataRejectExtensionMessage>();
|
|
|
|
CPPUNIT_ASSERT(m);
|
|
CPPUNIT_ASSERT_EQUAL((size_t)10, m->getIndex());
|
|
CPPUNIT_ASSERT_EQUAL((uint8_t)1, m->getExtensionMessageID());
|
|
}
|
|
|
|
void UTMetadataRequestExtensionMessageTest::testDoReceivedAction_data()
|
|
{
|
|
UTMetadataRequestExtensionMessage msg(1);
|
|
msg.setIndex(1);
|
|
msg.setDownloadContext(dctx_);
|
|
msg.setPeer(peer_);
|
|
msg.setBtMessageFactory(messageFactory_.get());
|
|
msg.setBtMessageDispatcher(dispatcher_.get());
|
|
|
|
size_t metadataSize = METADATA_PIECE_SIZE*2;
|
|
SharedHandle<TorrentAttribute> attrs = bittorrent::getTorrentAttrs(dctx_);
|
|
std::string first(METADATA_PIECE_SIZE, '0');
|
|
std::string second(METADATA_PIECE_SIZE, '1');
|
|
attrs->metadata = first+second;
|
|
attrs->metadataSize = metadataSize;
|
|
|
|
msg.doReceivedAction();
|
|
|
|
SharedHandle<UTMetadataDataExtensionMessage> m =
|
|
getFirstDispatchedMessage<UTMetadataDataExtensionMessage>();
|
|
|
|
CPPUNIT_ASSERT(m);
|
|
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getIndex());
|
|
CPPUNIT_ASSERT_EQUAL(second, m->getData());
|
|
CPPUNIT_ASSERT_EQUAL(metadataSize, m->getTotalSize());
|
|
CPPUNIT_ASSERT_EQUAL((uint8_t)1, m->getExtensionMessageID());
|
|
|
|
dispatcher_->messageQueue.clear();
|
|
|
|
msg.setIndex(2);
|
|
|
|
metadataSize += 100;
|
|
std::string third(100, '2');
|
|
attrs->metadata = first+second+third;
|
|
attrs->metadataSize = metadataSize;
|
|
|
|
msg.doReceivedAction();
|
|
|
|
m = getFirstDispatchedMessage<UTMetadataDataExtensionMessage>();
|
|
|
|
CPPUNIT_ASSERT(m);
|
|
CPPUNIT_ASSERT_EQUAL((size_t)2, m->getIndex());
|
|
CPPUNIT_ASSERT_EQUAL(third, m->getData());
|
|
CPPUNIT_ASSERT_EQUAL(metadataSize, m->getTotalSize());
|
|
|
|
msg.setIndex(3);
|
|
|
|
try {
|
|
msg.doReceivedAction();
|
|
CPPUNIT_FAIL("exception must be thrown.");
|
|
} catch(DlAbortEx& e) {
|
|
// success
|
|
}
|
|
}
|
|
|
|
} // namespace aria2
|