From e39f7a7e9ce1e42e7a46332f664d6a6810ee55fa Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 26 Dec 2007 14:26:55 +0000 Subject: [PATCH] 2007-12-26 Tatsuhiro Tsujikawa 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 --- ChangeLog | 18 ++ src/CompactPeerListProcessor.cc | 2 +- src/DefaultPeerListProcessor.cc | 3 +- src/Peer.cc | 49 ++++-- src/Peer.h | 36 +++- src/PeerInteractionCommand.cc | 2 + src/PeerListenCommand.cc | 2 +- src/PeerReceiveHandshakeCommand.cc | 1 - src/Piece.cc | 1 + test/BtAllowedFastMessageTest.cc | 4 +- test/BtBitfieldMessageTest.cc | 3 +- test/BtCancelMessageTest.cc | 2 +- test/BtChokeMessageTest.cc | 4 +- test/BtExtendedMessageTest.cc | 2 +- test/BtHaveAllMessageTest.cc | 3 +- test/BtHaveMessageTest.cc | 3 +- test/BtHaveNoneMessageTest.cc | 2 +- test/BtInterestedMessageTest.cc | 4 +- test/BtNotInterestedMessageTest.cc | 4 +- test/BtPieceMessageTest.cc | 2 +- test/BtRejectMessageTest.cc | 2 +- test/BtRequestMessageTest.cc | 2 +- test/BtUnchokeMessageTest.cc | 4 +- test/DefaultBtMessageDispatcherTest.cc | 4 +- test/DefaultBtMessageFactoryTest.cc | 2 +- test/DefaultBtRequestFactoryTest.cc | 2 +- test/DefaultExtensionMessageFactoryTest.cc | 2 +- test/DefaultPeerStorageTest.cc | 47 ++--- test/DefaultPieceStorageTest.cc | 6 +- test/HandshakeExtensionMessageTest.cc | 2 +- test/PeerTest.cc | 2 +- test/TorrentManTest.cc | 191 --------------------- test/UTPexExtensionMessageTest.cc | 27 +-- 33 files changed, 145 insertions(+), 295 deletions(-) delete mode 100644 test/TorrentManTest.cc diff --git a/ChangeLog b/ChangeLog index c42aea83..f14a21e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2007-12-26 Tatsuhiro Tsujikawa + + 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 Changed the default value of PREF_PEER_CONNECTION_TIMEOUT and diff --git a/src/CompactPeerListProcessor.cc b/src/CompactPeerListProcessor.cc index b98b5da8..d51bc9aa 100644 --- a/src/CompactPeerListProcessor.cc +++ b/src/CompactPeerListProcessor.cc @@ -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); } } diff --git a/src/DefaultPeerListProcessor.cc b/src/DefaultPeerListProcessor.cc index e731be03..ea8eeaca 100644 --- a/src/DefaultPeerListProcessor.cc +++ b/src/DefaultPeerListProcessor.cc @@ -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; diff --git a/src/Peer.cc b/src/Peer.cc index 10d1a27d..51245cd8 100644 --- a/src/Peer.cc +++ b/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) diff --git a/src/Peer.h b/src/Peer.h index 44dd68c9..407bc7a7 100644 --- a/src/Peer.h +++ b/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 { diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index 677fdc4f..2cd64a27 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -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()); diff --git a/src/PeerListenCommand.cc b/src/PeerListenCommand.cc index c4b61003..188040b4 100644 --- a/src/PeerListenCommand.cc +++ b/src/PeerListenCommand.cc @@ -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); diff --git a/src/PeerReceiveHandshakeCommand.cc b/src/PeerReceiveHandshakeCommand.cc index b1282e3f..fc6db478 100644 --- a/src/PeerReceiveHandshakeCommand.cc +++ b/src/PeerReceiveHandshakeCommand.cc @@ -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; diff --git a/src/Piece.cc b/src/Piece.cc index cabaa8db..4ed9fab7 100644 --- a/src/Piece.cc +++ b/src/Piece.cc @@ -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); diff --git a/test/BtAllowedFastMessageTest.cc b/test/BtAllowedFastMessageTest.cc index 6a04f2e0..449c6b3c 100644 --- a/test/BtAllowedFastMessageTest.cc +++ b/test/BtAllowedFastMessageTest.cc @@ -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)); diff --git a/test/BtBitfieldMessageTest.cc b/test/BtBitfieldMessageTest.cc index 891803a0..da28563f 100644 --- a/test/BtBitfieldMessageTest.cc +++ b/test/BtBitfieldMessageTest.cc @@ -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 }; diff --git a/test/BtCancelMessageTest.cc b/test/BtCancelMessageTest.cc index 58f4be7b..dee1e14c 100644 --- a/test/BtCancelMessageTest.cc +++ b/test/BtCancelMessageTest.cc @@ -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(), diff --git a/test/BtChokeMessageTest.cc b/test/BtChokeMessageTest.cc index 1917709e..432c22fc 100644 --- a/test/BtChokeMessageTest.cc +++ b/test/BtChokeMessageTest.cc @@ -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); diff --git a/test/BtExtendedMessageTest.cc b/test/BtExtendedMessageTest.cc index 43c1ca94..34ee594e 100644 --- a/test/BtExtendedMessageTest.cc +++ b/test/BtExtendedMessageTest.cc @@ -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]; diff --git a/test/BtHaveAllMessageTest.cc b/test/BtHaveAllMessageTest.cc index 80180c71..362735f9 100644 --- a/test/BtHaveAllMessageTest.cc +++ b/test/BtHaveAllMessageTest.cc @@ -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); diff --git a/test/BtHaveMessageTest.cc b/test/BtHaveMessageTest.cc index 1b576716..e794550c 100644 --- a/test/BtHaveMessageTest.cc +++ b/test/BtHaveMessageTest.cc @@ -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); diff --git a/test/BtHaveNoneMessageTest.cc b/test/BtHaveNoneMessageTest.cc index f0eb00ba..41d13cce 100644 --- a/test/BtHaveNoneMessageTest.cc +++ b/test/BtHaveNoneMessageTest.cc @@ -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(); diff --git a/test/BtInterestedMessageTest.cc b/test/BtInterestedMessageTest.cc index bff4eec5..372cb2c0 100644 --- a/test/BtInterestedMessageTest.cc +++ b/test/BtInterestedMessageTest.cc @@ -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(); diff --git a/test/BtNotInterestedMessageTest.cc b/test/BtNotInterestedMessageTest.cc index abf75eea..6b33640a 100644 --- a/test/BtNotInterestedMessageTest.cc +++ b/test/BtNotInterestedMessageTest.cc @@ -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); diff --git a/test/BtPieceMessageTest.cc b/test/BtPieceMessageTest.cc index 22f78b1b..f82dc6fe 100644 --- a/test/BtPieceMessageTest.cc +++ b/test/BtPieceMessageTest.cc @@ -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()); diff --git a/test/BtRejectMessageTest.cc b/test/BtRejectMessageTest.cc index ed46ea6f..73bfb163 100644 --- a/test/BtRejectMessageTest.cc +++ b/test/BtRejectMessageTest.cc @@ -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"); diff --git a/test/BtRequestMessageTest.cc b/test/BtRequestMessageTest.cc index 06925f5d..d8ec67e2 100644 --- a/test/BtRequestMessageTest.cc +++ b/test/BtRequestMessageTest.cc @@ -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()); diff --git a/test/BtUnchokeMessageTest.cc b/test/BtUnchokeMessageTest.cc index da6cdd5b..281e67f8 100644 --- a/test/BtUnchokeMessageTest.cc +++ b/test/BtUnchokeMessageTest.cc @@ -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); diff --git a/test/DefaultBtMessageDispatcherTest.cc b/test/DefaultBtMessageDispatcherTest.cc index f21ae2e5..ef9b36d5 100644 --- a/test/DefaultBtMessageDispatcherTest.cc +++ b/test/DefaultBtMessageDispatcherTest.cc @@ -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(); diff --git a/test/DefaultBtMessageFactoryTest.cc b/test/DefaultBtMessageFactoryTest.cc index 95c8de66..31f2232a 100644 --- a/test/DefaultBtMessageFactoryTest.cc +++ b/test/DefaultBtMessageFactoryTest.cc @@ -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(); diff --git a/test/DefaultBtRequestFactoryTest.cc b/test/DefaultBtRequestFactoryTest.cc index a3b76e91..33910d56 100644 --- a/test/DefaultBtRequestFactoryTest.cc +++ b/test/DefaultBtRequestFactoryTest.cc @@ -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()); diff --git a/test/DefaultExtensionMessageFactoryTest.cc b/test/DefaultExtensionMessageFactoryTest.cc index 0c222543..3dfca2d2 100644 --- a/test/DefaultExtensionMessageFactoryTest.cc +++ b/test/DefaultExtensionMessageFactoryTest.cc @@ -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); } diff --git a/test/DefaultPeerStorageTest.cc b/test/DefaultPeerStorageTest.cc index fd4f4576..1e008614 100644 --- a/test/DefaultPeerStorageTest.cc +++ b/test/DefaultPeerStorageTest.cc @@ -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); diff --git a/test/DefaultPieceStorageTest.cc b/test/DefaultPieceStorageTest.cc index fb297cc8..a3ad533e 100644 --- a/test/DefaultPieceStorageTest.cc +++ b/test/DefaultPieceStorageTest.cc @@ -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(); } diff --git a/test/HandshakeExtensionMessageTest.cc b/test/HandshakeExtensionMessageTest.cc index 37d43b39..62543c31 100644 --- a/test/HandshakeExtensionMessageTest.cc +++ b/test/HandshakeExtensionMessageTest.cc @@ -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); diff --git a/test/PeerTest.cc b/test/PeerTest.cc index 6904a1b5..0443525d 100644 --- a/test/PeerTest.cc +++ b/test/PeerTest.cc @@ -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(); diff --git a/test/TorrentManTest.cc b/test/TorrentManTest.cc deleted file mode 100644 index 0ee3dd4b..00000000 --- a/test/TorrentManTest.cc +++ /dev/null @@ -1,191 +0,0 @@ -#include "TorrentMan.h" -#include -#include - -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()); - -} -*/ diff --git a/test/UTPexExtensionMessageTest.cc b/test/UTPexExtensionMessageTest.cc index 1b837802..b9c741f2 100644 --- a/test/UTPexExtensionMessageTest.cc +++ b/test/UTPexExtensionMessageTest.cc @@ -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);