mirror of https://github.com/aria2/aria2
2007-12-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Allocate bitfield in Peer when it is really used. More specifically, bitfield in Peer is allocated after the connection is established and deallocated when the connection is dropped. Since 2 parameters(piece length and total length) was removed from the constructor of Peer class, many test classes were modified accordingly. See svn log for more detailed information. * src/PeerInteractionCommand.cc * src/CompactPeerListProcessor.cc * src/Peer.cc * src/DefaultPeerListProcessor.cc * src/PeerListenCommand.cc * src/PeerReceiveHandshakeCommand.cc Fixed memory leak * src/Piece.ccpull/1/head
parent
eed41706fc
commit
e39f7a7e9c
18
ChangeLog
18
ChangeLog
|
@ -1,3 +1,21 @@
|
|||
2007-12-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
Allocate bitfield in Peer when it is really used. More specifically,
|
||||
bitfield in Peer is allocated after the connection is established and
|
||||
deallocated when the connection is dropped.
|
||||
Since 2 parameters(piece length and total length) was removed from the
|
||||
constructor of Peer class, many test classes were modified accordingly.
|
||||
See svn log for more detailed information.
|
||||
* src/PeerInteractionCommand.cc
|
||||
* src/CompactPeerListProcessor.cc
|
||||
* src/Peer.cc
|
||||
* src/DefaultPeerListProcessor.cc
|
||||
* src/PeerListenCommand.cc
|
||||
* src/PeerReceiveHandshakeCommand.cc
|
||||
|
||||
Fixed memory leak
|
||||
* src/Piece.cc
|
||||
|
||||
2007-12-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
Changed the default value of PREF_PEER_CONNECTION_TIMEOUT and
|
||||
|
|
|
@ -49,7 +49,7 @@ Peers CompactPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
|
|||
in.s_addr = *(uint32_t*)(peersData->getData()+i);
|
||||
string ipaddr = inet_ntoa(in);
|
||||
uint16_t port = ntohs(*(uint16_t*)(peersData->getData()+i+4));
|
||||
PeerHandle peer = new Peer(ipaddr, port, pieceLength, totalLength);
|
||||
PeerHandle peer = new Peer(ipaddr, port);
|
||||
peers.push_back(peer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,8 +60,7 @@ Peers DefaultPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
|
|||
if(!ip || !port || !port->isNumber()) {
|
||||
continue;
|
||||
}
|
||||
PeerHandle peer = new Peer(ip->toString(), port->toInt(), pieceLength,
|
||||
totalLength);
|
||||
PeerHandle peer = new Peer(ip->toString(), port->toInt());
|
||||
peers.push_back(peer);
|
||||
}
|
||||
return peers;
|
||||
|
|
49
src/Peer.cc
49
src/Peer.cc
|
@ -39,18 +39,19 @@
|
|||
# include "MessageDigestHelper.h"
|
||||
#endif // ENABLE_MESSAGE_DIGEST
|
||||
|
||||
Peer::Peer(string ipaddr, uint16_t port, int32_t pieceLength, int64_t totalLength):
|
||||
#define BAD_CONDITION_INTERVAL 10
|
||||
|
||||
Peer::Peer(string ipaddr, uint16_t port):
|
||||
ipaddr(ipaddr),
|
||||
port(port),
|
||||
_bitfield(0),
|
||||
sessionUploadLength(0),
|
||||
sessionDownloadLength(0),
|
||||
active(false),
|
||||
_badConditionStartTime(0),
|
||||
_badConditionInterval(10)
|
||||
_seeder(false)
|
||||
{
|
||||
resetStatus();
|
||||
this->bitfield = BitfieldManFactory::getFactoryInstance()->
|
||||
createBitfieldMan(pieceLength, totalLength);
|
||||
string idSeed = ipaddr+":"+Util::itos(port);
|
||||
#ifdef ENABLE_MESSAGE_DIGEST
|
||||
id = MessageDigestHelper::digestString("sha1", idSeed);
|
||||
|
@ -59,19 +60,34 @@ Peer::Peer(string ipaddr, uint16_t port, int32_t pieceLength, int64_t totalLengt
|
|||
#endif // ENABLE_MESSAGE_DIGEST
|
||||
}
|
||||
|
||||
void Peer::reconfigure(int32_t pieceLength, int64_t totalLength)
|
||||
void Peer::allocateBitfield(int32_t pieceLength, int64_t totalLength)
|
||||
{
|
||||
delete bitfield;
|
||||
this->bitfield = BitfieldManFactory::getFactoryInstance()->
|
||||
createBitfieldMan(pieceLength, totalLength);
|
||||
delete _bitfield;
|
||||
_bitfield = BitfieldManFactory::getFactoryInstance()->createBitfieldMan(pieceLength, totalLength);
|
||||
}
|
||||
|
||||
void Peer::deallocateBitfield()
|
||||
{
|
||||
delete _bitfield;
|
||||
_bitfield = 0;
|
||||
}
|
||||
|
||||
void Peer::updateSeeder()
|
||||
{
|
||||
assert(_bitfield);
|
||||
if(_bitfield->isAllBitSet()) {
|
||||
_seeder = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Peer::updateBitfield(int32_t index, int32_t operation) {
|
||||
assert(_bitfield);
|
||||
if(operation == 1) {
|
||||
bitfield->setBit(index);
|
||||
_bitfield->setBit(index);
|
||||
} else if(operation == 0) {
|
||||
bitfield->unsetBit(index);
|
||||
_bitfield->unsetBit(index);
|
||||
}
|
||||
updateSeeder();
|
||||
}
|
||||
|
||||
#define THRESHOLD 1024*1024*2
|
||||
|
@ -84,11 +100,8 @@ bool Peer::shouldBeChoking() const {
|
|||
}
|
||||
|
||||
bool Peer::hasPiece(int32_t index) const {
|
||||
return bitfield->isBitSet(index);
|
||||
}
|
||||
|
||||
bool Peer::isSeeder() const {
|
||||
return bitfield->isAllBitSet();
|
||||
assert(_bitfield);
|
||||
return _bitfield->isBitSet(index);
|
||||
}
|
||||
|
||||
void Peer::resetStatus() {
|
||||
|
@ -133,7 +146,9 @@ void Peer::addAmAllowedIndex(int32_t index) {
|
|||
}
|
||||
|
||||
void Peer::setAllBitfield() {
|
||||
bitfield->setAllBit();
|
||||
assert(_bitfield);
|
||||
_bitfield->setAllBit();
|
||||
_seeder = true;
|
||||
}
|
||||
|
||||
void Peer::updateLatency(int32_t latency) {
|
||||
|
@ -147,7 +162,7 @@ void Peer::startBadCondition()
|
|||
|
||||
bool Peer::isGood() const
|
||||
{
|
||||
return _badConditionStartTime.elapsed(_badConditionInterval);
|
||||
return _badConditionStartTime.elapsed(BAD_CONDITION_INTERVAL);
|
||||
}
|
||||
|
||||
uint8_t Peer::getExtensionMessageID(const string& name)
|
||||
|
|
36
src/Peer.h
36
src/Peer.h
|
@ -63,7 +63,7 @@ public:
|
|||
bool snubbing;
|
||||
private:
|
||||
unsigned char peerId[PEER_ID_LENGTH];
|
||||
BitfieldMan* bitfield;
|
||||
BitfieldMan* _bitfield;
|
||||
bool fastExtensionEnabled;
|
||||
// fast index set which a peer has sent to localhost.
|
||||
Integers peerAllowedIndexSet;
|
||||
|
@ -79,12 +79,14 @@ private:
|
|||
string id;
|
||||
Time _firstContactTime;
|
||||
Time _badConditionStartTime;
|
||||
int32_t _badConditionInterval;
|
||||
bool _seeder;
|
||||
|
||||
void updateSeeder();
|
||||
public:
|
||||
Peer(string ipaddr, uint16_t port, int32_t pieceLength, int64_t totalLength);
|
||||
Peer(string ipaddr, uint16_t port);
|
||||
|
||||
~Peer() {
|
||||
delete bitfield;
|
||||
delete _bitfield;
|
||||
}
|
||||
|
||||
bool operator==(const Peer& p) {
|
||||
|
@ -163,10 +165,21 @@ public:
|
|||
const unsigned char* getPeerId() const { return this->peerId; }
|
||||
|
||||
void setBitfield(const unsigned char* bitfield, int32_t bitfieldLength) {
|
||||
this->bitfield->setBitfield(bitfield, bitfieldLength);
|
||||
assert(_bitfield);
|
||||
_bitfield->setBitfield(bitfield, bitfieldLength);
|
||||
updateSeeder();
|
||||
}
|
||||
const unsigned char* getBitfield() const { return bitfield->getBitfield(); }
|
||||
int32_t getBitfieldLength() const { return bitfield->getBitfieldLength(); }
|
||||
|
||||
const unsigned char* getBitfield() const {
|
||||
assert(_bitfield);
|
||||
return _bitfield->getBitfield();
|
||||
}
|
||||
|
||||
int32_t getBitfieldLength() const {
|
||||
assert(_bitfield);
|
||||
return _bitfield->getBitfieldLength();
|
||||
}
|
||||
|
||||
void setAllBitfield();
|
||||
|
||||
/**
|
||||
|
@ -210,7 +223,10 @@ public:
|
|||
|
||||
bool hasPiece(int32_t index) const;
|
||||
|
||||
bool isSeeder() const;
|
||||
bool isSeeder() const
|
||||
{
|
||||
return _seeder;
|
||||
}
|
||||
|
||||
void updateLatency(int32_t latency);
|
||||
int32_t getLatency() const { return latency; }
|
||||
|
@ -223,7 +239,9 @@ public:
|
|||
|
||||
bool isGood() const;
|
||||
|
||||
void reconfigure(int32_t pieceLength, int64_t totalLength);
|
||||
void allocateBitfield(int32_t pieceLength, int64_t totalLength);
|
||||
|
||||
void deallocateBitfield();
|
||||
|
||||
Time getFirstContactTime() const
|
||||
{
|
||||
|
|
|
@ -133,6 +133,7 @@ PeerInteractionCommand::PeerInteractionCommand(int32_t cuid,
|
|||
|
||||
setUploadLimit(e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT));
|
||||
peer->activate();
|
||||
peer->allocateBitfield(btContext->getPieceLength(), btContext->getTotalLength());
|
||||
|
||||
maxDownloadSpeedLimit = e->option->getAsInt(PREF_MAX_DOWNLOAD_LIMIT);
|
||||
|
||||
|
@ -140,6 +141,7 @@ PeerInteractionCommand::PeerInteractionCommand(int32_t cuid,
|
|||
}
|
||||
|
||||
PeerInteractionCommand::~PeerInteractionCommand() {
|
||||
peer->deallocateBitfield();
|
||||
peer->deactivate();
|
||||
PEER_OBJECT_CLUSTER(btContext)->unregisterHandle(peer->getId());
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ bool PeerListenCommand::execute() {
|
|||
if(peerInfo.first == localInfo.first) {
|
||||
continue;
|
||||
}
|
||||
PeerHandle peer = new Peer(peerInfo.first, 0, 0, 0);
|
||||
PeerHandle peer = new Peer(peerInfo.first, 0);
|
||||
PeerReceiveHandshakeCommand* command =
|
||||
new PeerReceiveHandshakeCommand(CUIDCounterSingletonHolder::instance()->newID(),
|
||||
peer, e, peerSocket);
|
||||
|
|
|
@ -76,7 +76,6 @@ bool PeerReceiveHandshakeCommand::executeInternal()
|
|||
TransferStat tstat = PEER_STORAGE(btContext)->calculateStat();
|
||||
if(!PIECE_STORAGE(btContext)->downloadFinished() && tstat.getDownloadSpeed() < _lowestSpeedLimit ||
|
||||
BT_RUNTIME(btContext)->getConnections() < MAX_PEERS) {
|
||||
peer->reconfigure(btContext->getPieceLength(), btContext->getTotalLength());
|
||||
if(PEER_STORAGE(btContext)->addPeer(peer)) {
|
||||
|
||||
peer->cuid = cuid;
|
||||
|
|
|
@ -105,6 +105,7 @@ string Piece::toString() const {
|
|||
|
||||
void Piece::reconfigure(int32_t length)
|
||||
{
|
||||
delete bitfield;
|
||||
this->length = length;
|
||||
bitfield =
|
||||
BitfieldManFactory::getFactoryInstance()->createBitfieldMan(_blockLength, length);
|
||||
|
|
|
@ -68,7 +68,7 @@ void BtAllowedFastMessageTest::testGetMessage() {
|
|||
void BtAllowedFastMessageTest::testDoReceivedAction() {
|
||||
BtAllowedFastMessage msg;
|
||||
msg.setIndex(1);
|
||||
PeerHandle peer = new Peer("localhost", 6969, 16*1024, 256*1024*1024);
|
||||
PeerHandle peer = new Peer("localhost", 6969);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(!peer->isInPeerAllowedIndexSet(1));
|
||||
|
@ -85,7 +85,7 @@ void BtAllowedFastMessageTest::testDoReceivedAction() {
|
|||
void BtAllowedFastMessageTest::testOnSendComplete() {
|
||||
BtAllowedFastMessage msg;
|
||||
msg.setIndex(1);
|
||||
PeerHandle peer = new Peer("localhost", 6969, 16*1024, 256*1024*1024);
|
||||
PeerHandle peer = new Peer("localhost", 6969);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(!peer->isInAmAllowedIndexSet(1));
|
||||
|
|
|
@ -68,7 +68,8 @@ void BtBitfieldMessageTest::testGetMessage() {
|
|||
}
|
||||
|
||||
void BtBitfieldMessageTest::testDoReceivedAction() {
|
||||
PeerHandle peer = new Peer("host1", 6969, 16*1024, 16*16*1024);
|
||||
PeerHandle peer = new Peer("host1", 6969);
|
||||
peer->allocateBitfield(16*1024, 16*16*1024);
|
||||
BtBitfieldMessage msg;
|
||||
msg.setPeer(peer);
|
||||
unsigned char bitfield[] = { 0xff, 0xff };
|
||||
|
|
|
@ -23,7 +23,7 @@ public:
|
|||
|
||||
void setUp() {
|
||||
BtRegistry::unregisterAll();
|
||||
peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
peer = new Peer("host", 6969);
|
||||
btContext = new MockBtContext();
|
||||
btContext->setInfoHash((const unsigned char*)"12345678901234567890");
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
|
|
|
@ -26,7 +26,7 @@ public:
|
|||
|
||||
void setUp() {
|
||||
BtRegistry::unregisterAll();
|
||||
peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
peer = new Peer("host", 6969);
|
||||
btContext = new MockBtContext();
|
||||
btContext->setInfoHash((const unsigned char*)"12345678901234567890");
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
|
@ -108,7 +108,6 @@ void BtChokeMessageTest::testGetMessage() {
|
|||
|
||||
void BtChokeMessageTest::testDoReceivedAction() {
|
||||
BtChokeMessage msg;
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
msg.setPeer(peer);
|
||||
msg.setBtContext(btContext);
|
||||
|
||||
|
@ -125,7 +124,6 @@ void BtChokeMessageTest::testDoReceivedAction() {
|
|||
|
||||
void BtChokeMessageTest::testOnSendComplete() {
|
||||
BtChokeMessage msg;
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
msg.setPeer(peer);
|
||||
msg.setBtContext(btContext);
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ public:
|
|||
CPPUNIT_TEST_SUITE_REGISTRATION(BtExtendedMessageTest);
|
||||
|
||||
void BtExtendedMessageTest::testCreate() {
|
||||
PeerHandle peer = new Peer("192.168.0.1", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("192.168.0.1", 6969);
|
||||
peer->setExtension("charlie", 1);
|
||||
MockBtContextHandle ctx = new MockBtContext();
|
||||
unsigned char infohash[20];
|
||||
|
|
|
@ -58,7 +58,8 @@ void BtHaveAllMessageTest::testGetMessage() {
|
|||
|
||||
void BtHaveAllMessageTest::testDoReceivedAction() {
|
||||
BtHaveAllMessage msg;
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
peer->allocateBitfield(16*1024, 256*1024);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg.setPeer(peer);
|
||||
|
||||
|
|
|
@ -63,7 +63,8 @@ void BtHaveMessageTest::testGetMessage() {
|
|||
}
|
||||
|
||||
void BtHaveMessageTest::testDoReceivedAction() {
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
peer->allocateBitfield(16*1024, 256*1024);
|
||||
BtHaveMessage msg;
|
||||
msg.setIndex(1);
|
||||
msg.setPeer(peer);
|
||||
|
|
|
@ -60,7 +60,7 @@ void BtHaveNoneMessageTest::testGetMessage() {
|
|||
|
||||
void BtHaveNoneMessageTest::testDoReceivedAction() {
|
||||
BtHaveNoneMessage msg;
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
peer->setFastExtensionEnabled(true);
|
||||
msg.setPeer(peer);
|
||||
msg.doReceivedAction();
|
||||
|
|
|
@ -62,7 +62,7 @@ void BtInterestedMessageTest::testGetMessage() {
|
|||
|
||||
void BtInterestedMessageTest::testDoReceivedAction() {
|
||||
BtInterestedMessage msg;
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(!peer->peerInterested);
|
||||
msg.doReceivedAction();
|
||||
|
@ -71,7 +71,7 @@ void BtInterestedMessageTest::testDoReceivedAction() {
|
|||
|
||||
void BtInterestedMessageTest::testOnSendComplete() {
|
||||
BtInterestedMessage msg;
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
msg.setPeer(peer);
|
||||
CPPUNIT_ASSERT(!peer->amInterested);
|
||||
msg.onSendComplete();
|
||||
|
|
|
@ -61,7 +61,7 @@ void BtNotInterestedMessageTest::testGetMessage() {
|
|||
}
|
||||
|
||||
void BtNotInterestedMessageTest::testDoReceivedAction() {
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
peer->peerInterested = true;
|
||||
BtNotInterestedMessage msg;
|
||||
msg.setPeer(peer);
|
||||
|
@ -71,7 +71,7 @@ void BtNotInterestedMessageTest::testDoReceivedAction() {
|
|||
}
|
||||
|
||||
void BtNotInterestedMessageTest::testOnSendComplete() {
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
peer->amInterested = true;
|
||||
BtNotInterestedMessage msg;
|
||||
msg.setPeer(peer);
|
||||
|
|
|
@ -80,7 +80,7 @@ public:
|
|||
btContext->setPieceLength(16*1024);
|
||||
btContext->setTotalLength(256*1024);
|
||||
|
||||
peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
peer = new Peer("host", 6969);
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
new PeerObjectCluster());
|
||||
PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), new PeerObject());
|
||||
|
|
|
@ -66,7 +66,7 @@ public:
|
|||
|
||||
void setUp() {
|
||||
BtRegistry::unregisterAll();
|
||||
peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
peer = new Peer("host", 6969);
|
||||
|
||||
MockBtContextHandle btContext = new MockBtContext();
|
||||
btContext->setInfoHash((const unsigned char*)"12345678901234567890");
|
||||
|
|
|
@ -98,7 +98,7 @@ public:
|
|||
BtRegistry::registerPieceStorage(btContext->getInfoHashAsString(),
|
||||
pieceStorage);
|
||||
|
||||
peer = new Peer("host", 6969, btContext->getPieceLength(), btContext->getTotalLength());
|
||||
peer = new Peer("host", 6969);
|
||||
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
new PeerObjectCluster());
|
||||
|
|
|
@ -60,7 +60,7 @@ void BtUnchokeMessageTest::testGetMessage() {
|
|||
}
|
||||
|
||||
void BtUnchokeMessageTest::testDoReceivedAction() {
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
peer->peerChoking = true;
|
||||
BtUnchokeMessage msg;
|
||||
msg.setPeer(peer);
|
||||
|
@ -71,7 +71,7 @@ void BtUnchokeMessageTest::testDoReceivedAction() {
|
|||
}
|
||||
|
||||
void BtUnchokeMessageTest::testOnSendComplete() {
|
||||
PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
peer->amChoking = true;
|
||||
BtUnchokeMessage msg;
|
||||
msg.setPeer(peer);
|
||||
|
|
|
@ -129,9 +129,7 @@ public:
|
|||
void setUp() {
|
||||
btContext = new DefaultBtContext();
|
||||
btContext->load("test.torrent");
|
||||
peer = new Peer("192.168.0.1", 6969,
|
||||
btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
peer = new Peer("192.168.0.1", 6969);
|
||||
peerStorage = new MockPeerStorage();
|
||||
pieceStorage = new MockPieceStorage();
|
||||
BtRegistry::unregisterAll();
|
||||
|
|
|
@ -27,7 +27,7 @@ public:
|
|||
btContext->setInfoHash(infohash);
|
||||
_btContext = btContext;
|
||||
|
||||
_peer = new Peer("192.168.0.1", 6969, 16*1024, 256*1024);
|
||||
_peer = new Peer("192.168.0.1", 6969);
|
||||
_peer->setExtendedMessagingEnabled(true);
|
||||
|
||||
MockExtensionMessageFactoryHandle exmsgFactory = new MockExtensionMessageFactory();
|
||||
|
|
|
@ -84,7 +84,7 @@ public:
|
|||
BtRegistry::registerPieceStorage(btContext->getInfoHashAsString(),
|
||||
new MockPieceStorage());
|
||||
|
||||
PeerHandle peer = new Peer("host", 6969, btContext->getPieceLength(), btContext->getTotalLength());
|
||||
PeerHandle peer = new Peer("host", 6969);
|
||||
|
||||
BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
|
||||
new PeerObjectCluster());
|
||||
|
|
|
@ -35,7 +35,7 @@ public:
|
|||
BtRegistry::registerBtRuntime(_btContext->getInfoHashAsString(),
|
||||
btRuntime);
|
||||
|
||||
_peer = new Peer("192.168.0.1", 6969, 16*1024, 256*1024);
|
||||
_peer = new Peer("192.168.0.1", 6969);
|
||||
_peer->setExtension("ut_pex", 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -54,8 +54,8 @@ void DefaultPeerStorageTest::testCountPeer() {
|
|||
CPPUNIT_ASSERT_EQUAL((int32_t)0,
|
||||
ps.countPeer());
|
||||
|
||||
PeerHandle peer(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer(new Peer("192.168.0.1", 6889));
|
||||
|
||||
ps.addPeer(peer);
|
||||
CPPUNIT_ASSERT_EQUAL((int32_t)1,
|
||||
ps.countPeer());
|
||||
|
@ -64,12 +64,9 @@ void DefaultPeerStorageTest::testCountPeer() {
|
|||
void DefaultPeerStorageTest::testDeleteUnusedPeer() {
|
||||
DefaultPeerStorage ps(btContext, option);
|
||||
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer2(new Peer("192.168.0.2", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer3(new Peer("192.168.0.3", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889));
|
||||
PeerHandle peer2(new Peer("192.168.0.2", 6889));
|
||||
PeerHandle peer3(new Peer("192.168.0.3", 6889));
|
||||
|
||||
ps.addPeer(peer1);
|
||||
ps.addPeer(peer2);
|
||||
|
@ -98,12 +95,9 @@ void DefaultPeerStorageTest::testDeleteUnusedPeer() {
|
|||
void DefaultPeerStorageTest::testAddPeer() {
|
||||
DefaultPeerStorage ps(btContext, option);
|
||||
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer2(new Peer("192.168.0.2", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer3(new Peer("192.168.0.3", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889));
|
||||
PeerHandle peer2(new Peer("192.168.0.2", 6889));
|
||||
PeerHandle peer3(new Peer("192.168.0.3", 6889));
|
||||
|
||||
ps.addPeer(peer1);
|
||||
ps.addPeer(peer2);
|
||||
|
@ -118,15 +112,14 @@ void DefaultPeerStorageTest::testAddPeer() {
|
|||
|
||||
ps.setMaxPeerListSize(3);
|
||||
|
||||
PeerHandle peer4(new Peer("192.168.0.4", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer4(new Peer("192.168.0.4", 6889));
|
||||
|
||||
CPPUNIT_ASSERT(ps.addPeer(peer4));
|
||||
// peer1 was deleted.
|
||||
CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
|
||||
|
||||
PeerHandle peer5(new Peer("192.168.0.4", 0, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer5(new Peer("192.168.0.4", 0));
|
||||
|
||||
peer5->port = 6889;
|
||||
|
||||
// this returns false because the peer which has same ip and port has already added
|
||||
|
@ -137,8 +130,7 @@ void DefaultPeerStorageTest::testGetPeer() {
|
|||
DefaultPeerStorage ps(btContext, option);
|
||||
ps.setBtRuntime(btRuntime);
|
||||
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889));
|
||||
|
||||
ps.addPeer(peer1);
|
||||
|
||||
|
@ -161,8 +153,7 @@ void DefaultPeerStorageTest::testIsPeerAvailable() {
|
|||
|
||||
CPPUNIT_ASSERT_EQUAL(false, ps.isPeerAvailable());
|
||||
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889));
|
||||
|
||||
ps.addPeer(peer1);
|
||||
|
||||
|
@ -184,8 +175,7 @@ void DefaultPeerStorageTest::testActivatePeer() {
|
|||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getActivePeers().size());
|
||||
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889));
|
||||
|
||||
ps.addPeer(peer1);
|
||||
|
||||
|
@ -205,15 +195,12 @@ void DefaultPeerStorageTest::testReturnPeer()
|
|||
{
|
||||
DefaultPeerStorage ps(btContext, option);
|
||||
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer2(new Peer("192.168.0.2", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer1(new Peer("192.168.0.1", 6889));
|
||||
PeerHandle peer2(new Peer("192.168.0.2", 6889));
|
||||
ps.addPeer(peer1);
|
||||
ps.addPeer(peer2);
|
||||
|
||||
PeerHandle peer3(new Peer("192.168.0.3", 0, btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
PeerHandle peer3(new Peer("192.168.0.3", 0));
|
||||
ps.addPeer(peer3);
|
||||
|
||||
ps.returnPeer(peer2);
|
||||
|
|
|
@ -41,9 +41,9 @@ public:
|
|||
void setUp() {
|
||||
btContext = new DefaultBtContext();
|
||||
btContext->load("test.torrent");
|
||||
peer = PeerHandle(new Peer("192.168.0.1", 6889,
|
||||
btContext->getPieceLength(),
|
||||
btContext->getTotalLength()));
|
||||
peer = new Peer("192.168.0.1", 6889);
|
||||
peer->allocateBitfield(btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
option = new Option();
|
||||
}
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ void HandshakeExtensionMessageTest::testToString()
|
|||
|
||||
void HandshakeExtensionMessageTest::testDoReceivedAction()
|
||||
{
|
||||
PeerHandle peer = new Peer("192.168.0.1", 0, 1, 1);
|
||||
PeerHandle peer = new Peer("192.168.0.1", 0);
|
||||
HandshakeExtensionMessage msg;
|
||||
msg.setClientVersion("aria2");
|
||||
msg.setTCPPort(6889);
|
||||
|
|
|
@ -16,7 +16,7 @@ public:
|
|||
PeerTest():peer(0) {}
|
||||
|
||||
void setUp() {
|
||||
peer = new Peer("localhost", 6969, 16*1024, 256*1024*1024);
|
||||
peer = new Peer("localhost", 6969);
|
||||
}
|
||||
|
||||
void testPeerAllowedIndexSet();
|
||||
|
|
|
@ -1,191 +0,0 @@
|
|||
#include "TorrentMan.h"
|
||||
#include <string>
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class TorrentManTest:public CppUnit::TestFixture {
|
||||
|
||||
CPPUNIT_TEST_SUITE(TorrentManTest);
|
||||
/*
|
||||
CPPUNIT_TEST(testUpdatePeers);
|
||||
//CPPUNIT_TEST(testUpdatePeer);
|
||||
CPPUNIT_TEST(testGetPeer);
|
||||
CPPUNIT_TEST(testGetMissingPiece);
|
||||
CPPUNIT_TEST(testCancelPiece);
|
||||
CPPUNIT_TEST(testAddPeer);
|
||||
*/
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
private:
|
||||
|
||||
public:
|
||||
void setUp() {
|
||||
}
|
||||
|
||||
void testUpdatePeers();
|
||||
//void testUpdatePeer();
|
||||
void testGetPeer();
|
||||
void testGetMissingPiece();
|
||||
void testCancelPiece();
|
||||
void testAddPeer();
|
||||
};
|
||||
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION( TorrentManTest );
|
||||
|
||||
Peers createPeers() {
|
||||
Peers peers;
|
||||
Peer* peer1 = new Peer("192.168.0.1", 6881, 512*1024, 5242870);
|
||||
peer1->entryId = 1;
|
||||
Peer* peer2 = new Peer("192.168.0.2", 6881, 512*1024, 5242870);
|
||||
peer2->entryId = 2;
|
||||
Peer* peer3 = new Peer("192.168.0.3", 6881, 512*1024, 5242870);
|
||||
peer3->entryId = 3;
|
||||
peers.push_back(peer1);
|
||||
peers.push_back(peer2);
|
||||
peers.push_back(peer3);
|
||||
return peers;
|
||||
}
|
||||
/*
|
||||
void TorrentManTest::testUpdatePeers() {
|
||||
TorrentMan tm;
|
||||
Peers peers = createPeers();
|
||||
tm.updatePeers(peers);
|
||||
const Peers& peersGot = tm.getPeers();
|
||||
Peers::const_iterator itr = peersGot.begin();
|
||||
CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"), (*itr)->ipaddr);
|
||||
itr++;
|
||||
CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"), (*itr)->ipaddr);
|
||||
itr++;
|
||||
CPPUNIT_ASSERT_EQUAL(string("192.168.0.3"), (*itr)->ipaddr);
|
||||
itr++;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
void TorrentManTest::testUpdatePeer() {
|
||||
TorrentMan tm;
|
||||
Peers peers = createPeers();
|
||||
tm.updatePeers(peers);
|
||||
Peer* peer = tm.getPeer(1);
|
||||
peer->amChocking = true;
|
||||
peer->amInterested = true;
|
||||
tm.updatePeer(peer);
|
||||
|
||||
Peers::const_iterator itr = tm.getPeers().begin();
|
||||
CPPUNIT_ASSERT_EQUAL(3, (int)tm.getPeers().size());
|
||||
CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"), itr->ipaddr);
|
||||
CPPUNIT_ASSERT_EQUAL(true, itr->amChocking);
|
||||
CPPUNIT_ASSERT_EQUAL(true, itr->amInterested);
|
||||
CPPUNIT_ASSERT_EQUAL(1, itr->cuid);
|
||||
itr++;
|
||||
CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"), itr->ipaddr);
|
||||
CPPUNIT_ASSERT_EQUAL(false, itr->amChocking);
|
||||
CPPUNIT_ASSERT_EQUAL(false, itr->amInterested);
|
||||
CPPUNIT_ASSERT_EQUAL(0, itr->cuid);
|
||||
itr++;
|
||||
CPPUNIT_ASSERT_EQUAL(string("192.168.0.3"), itr->ipaddr);
|
||||
CPPUNIT_ASSERT_EQUAL(false, itr->amChocking);
|
||||
CPPUNIT_ASSERT_EQUAL(false, itr->amInterested);
|
||||
CPPUNIT_ASSERT_EQUAL(0, itr->cuid);
|
||||
itr++;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
void TorrentManTest::testGetPeer() {
|
||||
TorrentMan tm;
|
||||
Peers peers = createPeers();
|
||||
tm.updatePeers(peers);
|
||||
CPPUNIT_ASSERT(tm.getPeer() != Peer::nullPeer);
|
||||
CPPUNIT_ASSERT(tm.getPeer() != Peer::nullPeer);
|
||||
CPPUNIT_ASSERT(tm.getPeer() != Peer::nullPeer);
|
||||
CPPUNIT_ASSERT(tm.getPeer() == Peer::nullPeer);
|
||||
}
|
||||
|
||||
void TorrentManTest::testGetMissingPiece() {
|
||||
TorrentMan tm;
|
||||
tm.pieceLength = 512*1024;
|
||||
tm.pieces = 10;
|
||||
tm.totalSize = 5242870;
|
||||
tm.initBitfield();
|
||||
|
||||
unsigned char peerBitfield[2] = { 0xff, 0xff };
|
||||
Piece piece1 = tm.getMissingPiece(peerBitfield, 2);
|
||||
CPPUNIT_ASSERT_EQUAL(0, piece1.getIndex());
|
||||
CPPUNIT_ASSERT_EQUAL(512*1024, piece1.getLength());
|
||||
|
||||
Piece piece2 = tm.getMissingPiece(peerBitfield, 2);
|
||||
CPPUNIT_ASSERT_EQUAL(1, piece2.getIndex());
|
||||
CPPUNIT_ASSERT_EQUAL(512*1024, piece2.getLength());
|
||||
|
||||
tm.completePiece(piece1);
|
||||
|
||||
int len = tm.getBitfieldLength();
|
||||
const unsigned char* bitfield = tm.getBitfield();
|
||||
CPPUNIT_ASSERT_EQUAL(2, len);
|
||||
CPPUNIT_ASSERT(bitfield[0]&(1 << 7));
|
||||
for(int i = 0; i < 7; i++) {
|
||||
CPPUNIT_ASSERT(!(bitfield[0]&(1 << i)));
|
||||
}
|
||||
|
||||
tm.completePiece(piece2);
|
||||
bitfield = tm.getBitfield();
|
||||
CPPUNIT_ASSERT_EQUAL(2, len);
|
||||
CPPUNIT_ASSERT(bitfield[0]&(1 << 7));
|
||||
CPPUNIT_ASSERT(bitfield[0]&(1 << 6));
|
||||
for(int i = 0; i < 6; i++) {
|
||||
CPPUNIT_ASSERT(!(bitfield[0]&(1 << i)));
|
||||
}
|
||||
|
||||
for(int i = 0; i < 8; i++) {
|
||||
CPPUNIT_ASSERT(!IS_NULL_PIECE(tm.getMissingPiece(peerBitfield, 2)));
|
||||
}
|
||||
CPPUNIT_ASSERT(IS_NULL_PIECE(tm.getMissingPiece(peerBitfield, 2)));
|
||||
}
|
||||
|
||||
void TorrentManTest::testCancelPiece() {
|
||||
TorrentMan tm;
|
||||
tm.pieceLength = 512*1024;
|
||||
tm.pieces = 10;
|
||||
tm.totalSize = 5242870;
|
||||
tm.initBitfield();
|
||||
|
||||
unsigned char peerBitfield[2] = { 0xff, 0xff };
|
||||
Piece piece = tm.getMissingPiece(peerBitfield, 2);
|
||||
CPPUNIT_ASSERT_EQUAL(0, piece.getIndex());
|
||||
CPPUNIT_ASSERT_EQUAL(512*1024, piece.getLength());
|
||||
|
||||
tm.cancelPiece(piece);
|
||||
int len = tm.getBitfieldLength();
|
||||
const unsigned char* bitfield = tm.getBitfield();
|
||||
for(int i = 0; i < 8; i++) {
|
||||
CPPUNIT_ASSERT(!(bitfield[0]&(1 << i)));
|
||||
}
|
||||
}
|
||||
|
||||
void TorrentManTest::testAddPeer() {
|
||||
TorrentMan tm;
|
||||
Peers peers = createPeers();
|
||||
tm.updatePeers(peers);
|
||||
|
||||
// try to add already added peer
|
||||
Peer* dupPeer = new Peer("192.168.0.2", 6881);
|
||||
CPPUNIT_ASSERT(!tm.addPeer(dupPeer));
|
||||
CPPUNIT_ASSERT_EQUAL(3, (int)tm.getPeers().size());
|
||||
|
||||
// duplicate flag on
|
||||
CPPUNIT_ASSERT(tm.addPeer(dupPeer, true));
|
||||
CPPUNIT_ASSERT_EQUAL(4, (int)tm.getPeers().size());
|
||||
|
||||
// cannot add error peer even though duplicte flag turns on
|
||||
dupPeer->error = 1;
|
||||
Peer* dupPeer2 = new Peer("192.168.0.2", 6881);
|
||||
CPPUNIT_ASSERT(!tm.addPeer(dupPeer2, true));
|
||||
CPPUNIT_ASSERT_EQUAL(4, (int)tm.getPeers().size());
|
||||
|
||||
// try to add new peer
|
||||
Peer* newPeer = new Peer("10.1.0.1", 6881);
|
||||
CPPUNIT_ASSERT(tm.addPeer(newPeer));
|
||||
CPPUNIT_ASSERT_EQUAL(5, (int)tm.getPeers().size());
|
||||
|
||||
}
|
||||
*/
|
|
@ -67,14 +67,15 @@ void UTPexExtensionMessageTest::testGetExtensionName()
|
|||
void UTPexExtensionMessageTest::testGetBencodedData()
|
||||
{
|
||||
UTPexExtensionMessage msg(1);
|
||||
PeerHandle p1 = new Peer("192.168.0.1", 6881, 1, 1);
|
||||
PeerHandle p1 = new Peer("192.168.0.1", 6881);
|
||||
p1->allocateBitfield(256*1024, 1024*1024);
|
||||
p1->setAllBitfield();
|
||||
msg.addFreshPeer(p1);// added seeder, check add.f flag
|
||||
PeerHandle p2 = new Peer("10.1.1.2", 9999, 1, 1);
|
||||
PeerHandle p2 = new Peer("10.1.1.2", 9999);
|
||||
msg.addFreshPeer(p2);
|
||||
PeerHandle p3 = new Peer("192.168.0.2", 6882, 1, 1);
|
||||
PeerHandle p3 = new Peer("192.168.0.2", 6882);
|
||||
msg.addDroppedPeer(p3);
|
||||
PeerHandle p4 = new Peer("10.1.1.3", 10000, 1, 1);
|
||||
PeerHandle p4 = new Peer("10.1.1.3", 10000);
|
||||
msg.addDroppedPeer(p4);
|
||||
|
||||
char c1[6];
|
||||
|
@ -99,14 +100,15 @@ void UTPexExtensionMessageTest::testGetBencodedData()
|
|||
void UTPexExtensionMessageTest::testToString()
|
||||
{
|
||||
UTPexExtensionMessage msg(1);
|
||||
PeerHandle p1 = new Peer("192.168.0.1", 6881, 1, 1);
|
||||
PeerHandle p1 = new Peer("192.168.0.1", 6881);
|
||||
p1->allocateBitfield(256*1024, 1024*1024);
|
||||
p1->setAllBitfield();
|
||||
msg.addFreshPeer(p1);// added seeder, check add.f flag
|
||||
PeerHandle p2 = new Peer("10.1.1.2", 9999, 1, 1);
|
||||
PeerHandle p2 = new Peer("10.1.1.2", 9999);
|
||||
msg.addFreshPeer(p2);
|
||||
PeerHandle p3 = new Peer("192.168.0.2", 6882, 1, 1);
|
||||
PeerHandle p3 = new Peer("192.168.0.2", 6882);
|
||||
msg.addDroppedPeer(p3);
|
||||
PeerHandle p4 = new Peer("10.1.1.3", 10000, 1, 1);
|
||||
PeerHandle p4 = new Peer("10.1.1.3", 10000);
|
||||
msg.addDroppedPeer(p4);
|
||||
CPPUNIT_ASSERT_EQUAL(string("ut_pex added=2, dropped=2"), msg.toString());
|
||||
}
|
||||
|
@ -114,14 +116,15 @@ void UTPexExtensionMessageTest::testToString()
|
|||
void UTPexExtensionMessageTest::testDoReceivedAction()
|
||||
{
|
||||
UTPexExtensionMessage msg(1);
|
||||
PeerHandle p1 = new Peer("192.168.0.1", 6881, 1, 1);
|
||||
PeerHandle p1 = new Peer("192.168.0.1", 6881);
|
||||
p1->allocateBitfield(256*1024, 1024*1024);
|
||||
p1->setAllBitfield();
|
||||
msg.addFreshPeer(p1);// added seeder, check add.f flag
|
||||
PeerHandle p2 = new Peer("10.1.1.2", 9999, 1, 1);
|
||||
PeerHandle p2 = new Peer("10.1.1.2", 9999);
|
||||
msg.addFreshPeer(p2);
|
||||
PeerHandle p3 = new Peer("192.168.0.2", 6882, 1, 1);
|
||||
PeerHandle p3 = new Peer("192.168.0.2", 6882);
|
||||
msg.addDroppedPeer(p3);
|
||||
PeerHandle p4 = new Peer("10.1.1.3", 10000, 1, 1);
|
||||
PeerHandle p4 = new Peer("10.1.1.3", 10000);
|
||||
msg.addDroppedPeer(p4);
|
||||
msg.setBtContext(_btContext);
|
||||
|
||||
|
|
Loading…
Reference in New Issue