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
pull/1/head
Tatsuhiro Tsujikawa 2007-12-26 14:26:55 +00:00
parent eed41706fc
commit e39f7a7e9c
33 changed files with 145 additions and 295 deletions

View File

@ -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

View File

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

View File

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

View File

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

View File

@ -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
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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 };

View File

@ -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(),

View File

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

View File

@ -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];

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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();
}

View File

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

View File

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

View File

@ -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());
}
*/

View File

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