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);