mirror of
https://github.com/aria2/aria2.git
synced 2025-02-26 08:22:11 +00:00
Extract the Peer class's member variables, which are only needed after PeerInteractionCommand, into PeerSessionResource class. This class is instantiated in PeerInteractionCommand class's ctor and released in its dtor. This will make Peer class lightweight and uses less memory for peers which are not connected and wait in the queue. * src/PeerChokeCommand.cc * src/PeerSessionResource.{h, cc} * src/PeerInteractionCommand.cc * src/PeerAbstractCommand.cc: Note: 0 is given to onAbort() function. * src/DefaultBtInteractive.cc * src/BtPieceMessage.cc * src/BtInterestedMessage.cc * src/BtUnchokeMessage.cc * src/DefaultPeerStorage.{h, cc} * src/PeerInitiateConnectionCommand.cc * src/ActivePeerConnectionCommand.cc * src/BtNotInterestedMessage.cc * src/DefaultBtMessageDispatcher.cc * src/BtChokeMessage.cc * src/BtRequestMessage.cc * src/Peer.{h, cc} * src/BtRegistry.h * src/TrackerWatcherCommand.cc * src/PeerReceiveHandshakeCommand.cc * test/BtExtendedMessageTest.cc * test/BtAllowedFastMessageTest.cc * test/BtCancelMessageTest.cc * test/DefaultPieceStorageTest.cc * test/BtBitfieldMessageTest.cc * test/BtHaveMessageTest.cc * test/BtNotInterestedMessageTest.cc * test/BtRequestMessageTest.cc * test/PeerSessionResourceTest.cc * test/DefaultBtMessageDispatcherTest.cc * test/PeerTest.cc * test/BtInterestedMessageTest.cc * test/BtRejectMessageTest.cc * test/BtChokeMessageTest.cc * test/DefaultPeerStorageTest.cc * test/BtHaveNoneMessageTest.cc * test/BtHaveAllMessageTest.cc * test/DefaultExtensionMessageFactoryTest.cc * test/BtUnchokeMessageTest.cc * test/DefaultBtMessageFactoryTest.cc * test/HandshakeExtensionMessageTest.cc * test/UTPexExtensionMessageTest.cc * test/DefaultBtRequestFactoryTest.cc * test/BtPieceMessageTest.cc Removed typedef PeerStats. * src/PeerStat.h * src/SegmentMan.cc
189 lines
5.6 KiB
C++
189 lines
5.6 KiB
C++
#include "BtRejectMessage.h"
|
|
#include "PeerMessageUtil.h"
|
|
#include "Peer.h"
|
|
#include "FileEntry.h"
|
|
#include "BtRegistry.h"
|
|
#include "PeerObject.h"
|
|
#include "BtMessageFactory.h"
|
|
#include "BtRequestFactory.h"
|
|
#include "BtMessageReceiver.h"
|
|
#include "ExtensionMessageFactory.h"
|
|
#include "PeerConnection.h"
|
|
#include "MockBtMessageDispatcher.h"
|
|
#include "MockBtContext.h"
|
|
#include <cstring>
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
namespace aria2 {
|
|
|
|
class BtRejectMessageTest:public CppUnit::TestFixture {
|
|
|
|
CPPUNIT_TEST_SUITE(BtRejectMessageTest);
|
|
CPPUNIT_TEST(testCreate);
|
|
CPPUNIT_TEST(testGetMessage);
|
|
CPPUNIT_TEST(testDoReceivedAction);
|
|
CPPUNIT_TEST(testDoReceivedActionNoMatch);
|
|
CPPUNIT_TEST(testDoReceivedActionFastExtensionDisabled);
|
|
CPPUNIT_TEST(testToString);
|
|
CPPUNIT_TEST_SUITE_END();
|
|
private:
|
|
|
|
public:
|
|
void testCreate();
|
|
void testGetMessage();
|
|
void testDoReceivedAction();
|
|
void testDoReceivedActionNoMatch();
|
|
void testDoReceivedActionFastExtensionDisabled();
|
|
void testToString();
|
|
|
|
class MockBtMessageDispatcher2 : public MockBtMessageDispatcher {
|
|
public:
|
|
RequestSlot slot;
|
|
public:
|
|
MockBtMessageDispatcher2():slot(RequestSlot::nullSlot) {}
|
|
|
|
void setRequestSlot(const RequestSlot& slot) {
|
|
this->slot = slot;
|
|
}
|
|
|
|
virtual RequestSlot getOutstandingRequest(int32_t index, int32_t begin,
|
|
int32_t length) {
|
|
if(slot.getIndex() == index && slot.getBegin() == begin &&
|
|
slot.getLength() == length) {
|
|
return slot;
|
|
} else {
|
|
return RequestSlot::nullSlot;
|
|
}
|
|
}
|
|
|
|
virtual void removeOutstandingRequest(const RequestSlot& slot) {
|
|
if(this->slot.getIndex() == slot.getIndex() &&
|
|
this->slot.getBegin() == slot.getBegin() &&
|
|
this->slot.getLength() == slot.getLength()) {
|
|
this->slot = RequestSlot::nullSlot;
|
|
}
|
|
}
|
|
};
|
|
|
|
typedef SharedHandle<MockBtMessageDispatcher2> MockBtMessageDispatcher2Handle;
|
|
|
|
SharedHandle<Peer> peer;
|
|
SharedHandle<MockBtMessageDispatcher2> dispatcher;
|
|
SharedHandle<BtRejectMessage> msg;
|
|
|
|
BtRejectMessageTest():peer(0), dispatcher(0), msg(0) {}
|
|
|
|
void setUp() {
|
|
BtRegistry::unregisterAll();
|
|
peer = new Peer("host", 6969);
|
|
peer->allocateSessionResource(1024, 1024*1024);
|
|
|
|
SharedHandle<MockBtContext> btContext = new MockBtContext();
|
|
btContext->setInfoHash((const unsigned char*)"12345678901234567890");
|
|
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
|
new PeerObjectCluster());
|
|
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getID(), new PeerObject());
|
|
dispatcher = new MockBtMessageDispatcher2();
|
|
PEER_OBJECT(btContext, peer)->btMessageDispatcher = dispatcher;
|
|
|
|
msg = new BtRejectMessage();
|
|
msg->setPeer(peer);
|
|
msg->setBtContext(btContext);
|
|
msg->setIndex(1);
|
|
msg->setBegin(16);
|
|
msg->setLength(32);
|
|
msg->setBtMessageDispatcher(dispatcher);
|
|
|
|
}
|
|
};
|
|
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION(BtRejectMessageTest);
|
|
|
|
void BtRejectMessageTest::testCreate() {
|
|
unsigned char msg[17];
|
|
PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 13, 16);
|
|
PeerMessageUtil::setIntParam(&msg[5], 12345);
|
|
PeerMessageUtil::setIntParam(&msg[9], 256);
|
|
PeerMessageUtil::setIntParam(&msg[13], 1024);
|
|
SharedHandle<BtRejectMessage> pm = BtRejectMessage::create(&msg[4], 13);
|
|
CPPUNIT_ASSERT_EQUAL((int8_t)16, pm->getId());
|
|
CPPUNIT_ASSERT_EQUAL((int32_t)12345, pm->getIndex());
|
|
CPPUNIT_ASSERT_EQUAL((int32_t)256, pm->getBegin());
|
|
CPPUNIT_ASSERT_EQUAL((int32_t)1024, pm->getLength());
|
|
|
|
// case: payload size is wrong
|
|
try {
|
|
unsigned char msg[18];
|
|
PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 14, 16);
|
|
BtRejectMessage::create(&msg[4], 14);
|
|
CPPUNIT_FAIL("exception must be thrown.");
|
|
} catch(...) {
|
|
}
|
|
// case: id is wrong
|
|
try {
|
|
unsigned char msg[17];
|
|
PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 13, 17);
|
|
BtRejectMessage::create(&msg[4], 13);
|
|
CPPUNIT_FAIL("exception must be thrown.");
|
|
} catch(...) {
|
|
}
|
|
}
|
|
|
|
void BtRejectMessageTest::testGetMessage() {
|
|
BtRejectMessage msg;
|
|
msg.setIndex(12345);
|
|
msg.setBegin(256);
|
|
msg.setLength(1024);
|
|
unsigned char data[17];
|
|
PeerMessageUtil::createPeerMessageString(data, sizeof(data), 13, 16);
|
|
PeerMessageUtil::setIntParam(&data[5], 12345);
|
|
PeerMessageUtil::setIntParam(&data[9], 256);
|
|
PeerMessageUtil::setIntParam(&data[13], 1024);
|
|
CPPUNIT_ASSERT(memcmp(msg.getMessage(), data, 17) == 0);
|
|
}
|
|
|
|
void BtRejectMessageTest::testDoReceivedAction() {
|
|
peer->setFastExtensionEnabled(true);
|
|
RequestSlot slot(1, 16, 32, 2);
|
|
dispatcher->setRequestSlot(slot);
|
|
|
|
CPPUNIT_ASSERT(!RequestSlot::isNull(dispatcher->getOutstandingRequest(1, 16, 32)));
|
|
|
|
msg->doReceivedAction();
|
|
|
|
CPPUNIT_ASSERT(RequestSlot::isNull(dispatcher->getOutstandingRequest(1, 16, 32)));
|
|
}
|
|
|
|
void BtRejectMessageTest::testDoReceivedActionNoMatch() {
|
|
peer->setFastExtensionEnabled(true);
|
|
RequestSlot slot(2, 16, 32, 2);
|
|
dispatcher->setRequestSlot(slot);
|
|
|
|
CPPUNIT_ASSERT(!RequestSlot::isNull(dispatcher->getOutstandingRequest(2, 16, 32)));
|
|
|
|
msg->doReceivedAction();
|
|
|
|
CPPUNIT_ASSERT(!RequestSlot::isNull(dispatcher->getOutstandingRequest(2, 16, 32)));
|
|
|
|
}
|
|
|
|
void BtRejectMessageTest::testDoReceivedActionFastExtensionDisabled() {
|
|
RequestSlot slot(1, 16, 32, 2);
|
|
dispatcher->setRequestSlot(slot);
|
|
|
|
CPPUNIT_ASSERT(!RequestSlot::isNull(dispatcher->getOutstandingRequest(1, 16, 32)));
|
|
try {
|
|
msg->doReceivedAction();
|
|
CPPUNIT_FAIL("exception must be thrown.");
|
|
} catch(...) {}
|
|
|
|
}
|
|
|
|
void BtRejectMessageTest::testToString() {
|
|
CPPUNIT_ASSERT_EQUAL(std::string("reject index=1, begin=16, length=32"),
|
|
msg->toString());
|
|
}
|
|
|
|
} // namespace aria2
|