TorrentManTest.cc 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. #include "TorrentMan.h"
  2. #include <string>
  3. #include <cppunit/extensions/HelperMacros.h>
  4. using namespace std;
  5. class TorrentManTest:public CppUnit::TestFixture {
  6. CPPUNIT_TEST_SUITE(TorrentManTest);
  7. /*
  8. CPPUNIT_TEST(testUpdatePeers);
  9. //CPPUNIT_TEST(testUpdatePeer);
  10. CPPUNIT_TEST(testGetPeer);
  11. CPPUNIT_TEST(testGetMissingPiece);
  12. CPPUNIT_TEST(testCancelPiece);
  13. CPPUNIT_TEST(testAddPeer);
  14. */
  15. CPPUNIT_TEST_SUITE_END();
  16. private:
  17. public:
  18. void setUp() {
  19. }
  20. void testUpdatePeers();
  21. //void testUpdatePeer();
  22. void testGetPeer();
  23. void testGetMissingPiece();
  24. void testCancelPiece();
  25. void testAddPeer();
  26. };
  27. CPPUNIT_TEST_SUITE_REGISTRATION( TorrentManTest );
  28. Peers createPeers() {
  29. Peers peers;
  30. Peer* peer1 = new Peer("192.168.0.1", 6881, 512*1024, 5242870);
  31. peer1->entryId = 1;
  32. Peer* peer2 = new Peer("192.168.0.2", 6881, 512*1024, 5242870);
  33. peer2->entryId = 2;
  34. Peer* peer3 = new Peer("192.168.0.3", 6881, 512*1024, 5242870);
  35. peer3->entryId = 3;
  36. peers.push_back(peer1);
  37. peers.push_back(peer2);
  38. peers.push_back(peer3);
  39. return peers;
  40. }
  41. /*
  42. void TorrentManTest::testUpdatePeers() {
  43. TorrentMan tm;
  44. Peers peers = createPeers();
  45. tm.updatePeers(peers);
  46. const Peers& peersGot = tm.getPeers();
  47. Peers::const_iterator itr = peersGot.begin();
  48. CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"), (*itr)->ipaddr);
  49. itr++;
  50. CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"), (*itr)->ipaddr);
  51. itr++;
  52. CPPUNIT_ASSERT_EQUAL(string("192.168.0.3"), (*itr)->ipaddr);
  53. itr++;
  54. }
  55. */
  56. /*
  57. void TorrentManTest::testUpdatePeer() {
  58. TorrentMan tm;
  59. Peers peers = createPeers();
  60. tm.updatePeers(peers);
  61. Peer* peer = tm.getPeer(1);
  62. peer->amChocking = true;
  63. peer->amInterested = true;
  64. tm.updatePeer(peer);
  65. Peers::const_iterator itr = tm.getPeers().begin();
  66. CPPUNIT_ASSERT_EQUAL(3, (int)tm.getPeers().size());
  67. CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"), itr->ipaddr);
  68. CPPUNIT_ASSERT_EQUAL(true, itr->amChocking);
  69. CPPUNIT_ASSERT_EQUAL(true, itr->amInterested);
  70. CPPUNIT_ASSERT_EQUAL(1, itr->cuid);
  71. itr++;
  72. CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"), itr->ipaddr);
  73. CPPUNIT_ASSERT_EQUAL(false, itr->amChocking);
  74. CPPUNIT_ASSERT_EQUAL(false, itr->amInterested);
  75. CPPUNIT_ASSERT_EQUAL(0, itr->cuid);
  76. itr++;
  77. CPPUNIT_ASSERT_EQUAL(string("192.168.0.3"), itr->ipaddr);
  78. CPPUNIT_ASSERT_EQUAL(false, itr->amChocking);
  79. CPPUNIT_ASSERT_EQUAL(false, itr->amInterested);
  80. CPPUNIT_ASSERT_EQUAL(0, itr->cuid);
  81. itr++;
  82. }
  83. */
  84. /*
  85. void TorrentManTest::testGetPeer() {
  86. TorrentMan tm;
  87. Peers peers = createPeers();
  88. tm.updatePeers(peers);
  89. CPPUNIT_ASSERT(tm.getPeer() != Peer::nullPeer);
  90. CPPUNIT_ASSERT(tm.getPeer() != Peer::nullPeer);
  91. CPPUNIT_ASSERT(tm.getPeer() != Peer::nullPeer);
  92. CPPUNIT_ASSERT(tm.getPeer() == Peer::nullPeer);
  93. }
  94. void TorrentManTest::testGetMissingPiece() {
  95. TorrentMan tm;
  96. tm.pieceLength = 512*1024;
  97. tm.pieces = 10;
  98. tm.totalSize = 5242870;
  99. tm.initBitfield();
  100. unsigned char peerBitfield[2] = { 0xff, 0xff };
  101. Piece piece1 = tm.getMissingPiece(peerBitfield, 2);
  102. CPPUNIT_ASSERT_EQUAL(0, piece1.getIndex());
  103. CPPUNIT_ASSERT_EQUAL(512*1024, piece1.getLength());
  104. Piece piece2 = tm.getMissingPiece(peerBitfield, 2);
  105. CPPUNIT_ASSERT_EQUAL(1, piece2.getIndex());
  106. CPPUNIT_ASSERT_EQUAL(512*1024, piece2.getLength());
  107. tm.completePiece(piece1);
  108. int len = tm.getBitfieldLength();
  109. const unsigned char* bitfield = tm.getBitfield();
  110. CPPUNIT_ASSERT_EQUAL(2, len);
  111. CPPUNIT_ASSERT(bitfield[0]&(1 << 7));
  112. for(int i = 0; i < 7; i++) {
  113. CPPUNIT_ASSERT(!(bitfield[0]&(1 << i)));
  114. }
  115. tm.completePiece(piece2);
  116. bitfield = tm.getBitfield();
  117. CPPUNIT_ASSERT_EQUAL(2, len);
  118. CPPUNIT_ASSERT(bitfield[0]&(1 << 7));
  119. CPPUNIT_ASSERT(bitfield[0]&(1 << 6));
  120. for(int i = 0; i < 6; i++) {
  121. CPPUNIT_ASSERT(!(bitfield[0]&(1 << i)));
  122. }
  123. for(int i = 0; i < 8; i++) {
  124. CPPUNIT_ASSERT(!IS_NULL_PIECE(tm.getMissingPiece(peerBitfield, 2)));
  125. }
  126. CPPUNIT_ASSERT(IS_NULL_PIECE(tm.getMissingPiece(peerBitfield, 2)));
  127. }
  128. void TorrentManTest::testCancelPiece() {
  129. TorrentMan tm;
  130. tm.pieceLength = 512*1024;
  131. tm.pieces = 10;
  132. tm.totalSize = 5242870;
  133. tm.initBitfield();
  134. unsigned char peerBitfield[2] = { 0xff, 0xff };
  135. Piece piece = tm.getMissingPiece(peerBitfield, 2);
  136. CPPUNIT_ASSERT_EQUAL(0, piece.getIndex());
  137. CPPUNIT_ASSERT_EQUAL(512*1024, piece.getLength());
  138. tm.cancelPiece(piece);
  139. int len = tm.getBitfieldLength();
  140. const unsigned char* bitfield = tm.getBitfield();
  141. for(int i = 0; i < 8; i++) {
  142. CPPUNIT_ASSERT(!(bitfield[0]&(1 << i)));
  143. }
  144. }
  145. void TorrentManTest::testAddPeer() {
  146. TorrentMan tm;
  147. Peers peers = createPeers();
  148. tm.updatePeers(peers);
  149. // try to add already added peer
  150. Peer* dupPeer = new Peer("192.168.0.2", 6881);
  151. CPPUNIT_ASSERT(!tm.addPeer(dupPeer));
  152. CPPUNIT_ASSERT_EQUAL(3, (int)tm.getPeers().size());
  153. // duplicate flag on
  154. CPPUNIT_ASSERT(tm.addPeer(dupPeer, true));
  155. CPPUNIT_ASSERT_EQUAL(4, (int)tm.getPeers().size());
  156. // cannot add error peer even though duplicte flag turns on
  157. dupPeer->error = 1;
  158. Peer* dupPeer2 = new Peer("192.168.0.2", 6881);
  159. CPPUNIT_ASSERT(!tm.addPeer(dupPeer2, true));
  160. CPPUNIT_ASSERT_EQUAL(4, (int)tm.getPeers().size());
  161. // try to add new peer
  162. Peer* newPeer = new Peer("10.1.0.1", 6881);
  163. CPPUNIT_ASSERT(tm.addPeer(newPeer));
  164. CPPUNIT_ASSERT_EQUAL(5, (int)tm.getPeers().size());
  165. }
  166. */