DefaultPeerStorageTest.cc 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. #include "DefaultPeerStorage.h"
  2. #include "DefaultBtContext.h"
  3. #include "Util.h"
  4. #include "Exception.h"
  5. #include <cppunit/extensions/HelperMacros.h>
  6. using namespace std;
  7. class DefaultPeerStorageTest:public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(DefaultPeerStorageTest);
  9. CPPUNIT_TEST(testCountPeer);
  10. CPPUNIT_TEST(testDeleteUnusedPeer);
  11. CPPUNIT_TEST(testAddPeer);
  12. CPPUNIT_TEST(testGetPeer);
  13. CPPUNIT_TEST(testIsPeerAvailable);
  14. CPPUNIT_TEST(testActivatePeer);
  15. CPPUNIT_TEST(testCalculateStat);
  16. CPPUNIT_TEST(testReturnPeer);
  17. CPPUNIT_TEST(testOnErasingPeer);
  18. CPPUNIT_TEST(testReturnPeer);
  19. CPPUNIT_TEST_SUITE_END();
  20. private:
  21. BtContextHandle btContext;
  22. BtRuntimeHandle btRuntime;
  23. Option* option;
  24. public:
  25. DefaultPeerStorageTest():btContext(0) {}
  26. void setUp() {
  27. btContext = BtContextHandle(new DefaultBtContext());
  28. btContext->load("test.torrent");
  29. option = new Option();
  30. btRuntime = BtRuntimeHandle(new BtRuntime());
  31. }
  32. void testCountPeer();
  33. void testDeleteUnusedPeer();
  34. void testAddPeer();
  35. void testGetPeer();
  36. void testIsPeerAvailable();
  37. void testActivatePeer();
  38. void testCalculateStat();
  39. void testReturnPeer();
  40. void testOnErasingPeer();
  41. };
  42. CPPUNIT_TEST_SUITE_REGISTRATION(DefaultPeerStorageTest);
  43. void DefaultPeerStorageTest::testCountPeer() {
  44. DefaultPeerStorage ps(btContext, option);
  45. CPPUNIT_ASSERT_EQUAL((int32_t)0,
  46. ps.countPeer());
  47. PeerHandle peer(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
  48. btContext->getTotalLength()));
  49. ps.addPeer(peer);
  50. CPPUNIT_ASSERT_EQUAL((int32_t)1,
  51. ps.countPeer());
  52. }
  53. void DefaultPeerStorageTest::testDeleteUnusedPeer() {
  54. DefaultPeerStorage ps(btContext, option);
  55. PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
  56. btContext->getTotalLength()));
  57. PeerHandle peer2(new Peer("192.168.0.2", 6889, btContext->getPieceLength(),
  58. btContext->getTotalLength()));
  59. PeerHandle peer3(new Peer("192.168.0.3", 6889, btContext->getPieceLength(),
  60. btContext->getTotalLength()));
  61. ps.addPeer(peer1);
  62. ps.addPeer(peer2);
  63. ps.addPeer(peer3);
  64. ps.deleteUnusedPeer(2);
  65. CPPUNIT_ASSERT_EQUAL((int32_t)1, ps.countPeer());
  66. CPPUNIT_ASSERT_EQUAL(string("192.168.0.3"),
  67. ps.getPeer("192.168.0.3", 6889)->ipaddr);
  68. ps.addPeer(peer1);
  69. ps.addPeer(peer2);
  70. peer2->cuid = 1;
  71. ps.deleteUnusedPeer(3);
  72. // peer2 has been in use, so it did't deleted.
  73. CPPUNIT_ASSERT_EQUAL((int32_t)1, ps.countPeer());
  74. CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"),
  75. ps.getPeer("192.168.0.2", 6889)->ipaddr);
  76. }
  77. void DefaultPeerStorageTest::testAddPeer() {
  78. DefaultPeerStorage ps(btContext, option);
  79. PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
  80. btContext->getTotalLength()));
  81. PeerHandle peer2(new Peer("192.168.0.2", 6889, btContext->getPieceLength(),
  82. btContext->getTotalLength()));
  83. PeerHandle peer3(new Peer("192.168.0.3", 6889, btContext->getPieceLength(),
  84. btContext->getTotalLength()));
  85. ps.addPeer(peer1);
  86. ps.addPeer(peer2);
  87. ps.addPeer(peer3);
  88. CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
  89. // this returns false, because peer1 is already in the container
  90. CPPUNIT_ASSERT_EQUAL(false, ps.addPeer(peer1));
  91. // the number of peers doesn't change.
  92. CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
  93. ps.setMaxPeerListSize(3);
  94. PeerHandle peer4(new Peer("192.168.0.4", 6889, btContext->getPieceLength(),
  95. btContext->getTotalLength()));
  96. CPPUNIT_ASSERT(ps.addPeer(peer4));
  97. // peer1 was deleted.
  98. CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
  99. PeerHandle peer5(new Peer("192.168.0.4", 0, btContext->getPieceLength(),
  100. btContext->getTotalLength()));
  101. peer5->port = 6889;
  102. // this returns false because the peer which has same ip and port has already added
  103. CPPUNIT_ASSERT_EQUAL(false, ps.addPeer(peer5));
  104. }
  105. void DefaultPeerStorageTest::testGetPeer() {
  106. DefaultPeerStorage ps(btContext, option);
  107. ps.setBtRuntime(btRuntime);
  108. PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
  109. btContext->getTotalLength()));
  110. ps.addPeer(peer1);
  111. CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"),
  112. ps.getUnusedPeer()->ipaddr);
  113. peer1->cuid = 1;
  114. CPPUNIT_ASSERT(ps.getUnusedPeer().isNull());
  115. peer1->resetStatus();
  116. peer1->startBadCondition();
  117. CPPUNIT_ASSERT(ps.getUnusedPeer().isNull());
  118. }
  119. void DefaultPeerStorageTest::testIsPeerAvailable() {
  120. DefaultPeerStorage ps(btContext, option);
  121. ps.setBtRuntime(btRuntime);
  122. CPPUNIT_ASSERT_EQUAL(false, ps.isPeerAvailable());
  123. PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
  124. btContext->getTotalLength()));
  125. ps.addPeer(peer1);
  126. CPPUNIT_ASSERT_EQUAL(true, ps.isPeerAvailable());
  127. peer1->cuid = 1;
  128. CPPUNIT_ASSERT_EQUAL(false, ps.isPeerAvailable());
  129. peer1->resetStatus();
  130. peer1->startBadCondition();
  131. CPPUNIT_ASSERT_EQUAL(false, ps.isPeerAvailable());
  132. }
  133. void DefaultPeerStorageTest::testActivatePeer() {
  134. DefaultPeerStorage ps(btContext, option);
  135. CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getActivePeers().size());
  136. PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
  137. btContext->getTotalLength()));
  138. ps.addPeer(peer1);
  139. Peers activePeer = ps.getActivePeers();
  140. CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getActivePeers().size());
  141. peer1->activate();
  142. CPPUNIT_ASSERT_EQUAL((size_t)1, ps.getActivePeers().size());
  143. }
  144. void DefaultPeerStorageTest::testCalculateStat() {
  145. }
  146. void DefaultPeerStorageTest::testReturnPeer()
  147. {
  148. DefaultPeerStorage ps(btContext, option);
  149. PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
  150. btContext->getTotalLength()));
  151. PeerHandle peer2(new Peer("192.168.0.2", 6889, btContext->getPieceLength(),
  152. btContext->getTotalLength()));
  153. ps.addPeer(peer1);
  154. ps.addPeer(peer2);
  155. PeerHandle peer3(new Peer("192.168.0.3", 0, btContext->getPieceLength(),
  156. btContext->getTotalLength()));
  157. ps.addPeer(peer3);
  158. ps.returnPeer(peer2);
  159. // peer2 is moved to the end of container
  160. CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"),
  161. ps.getPeers().back()->ipaddr);
  162. ps.returnPeer(peer3); // peer3 is removed from the container
  163. CPPUNIT_ASSERT_EQUAL((size_t)2, ps.getPeers().size());
  164. CPPUNIT_ASSERT(find(ps.getPeers().begin(), ps.getPeers().end(), peer3) == ps.getPeers().end());
  165. }
  166. void DefaultPeerStorageTest::testOnErasingPeer()
  167. {
  168. // test this
  169. }