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