DefaultPeerStorageTest.cc 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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));
  48. ps.addPeer(peer);
  49. CPPUNIT_ASSERT_EQUAL((int32_t)1,
  50. ps.countPeer());
  51. }
  52. void DefaultPeerStorageTest::testDeleteUnusedPeer() {
  53. DefaultPeerStorage ps(btContext, option);
  54. PeerHandle peer1(new Peer("192.168.0.1", 6889));
  55. PeerHandle peer2(new Peer("192.168.0.2", 6889));
  56. PeerHandle peer3(new Peer("192.168.0.3", 6889));
  57. ps.addPeer(peer1);
  58. ps.addPeer(peer2);
  59. ps.addPeer(peer3);
  60. ps.deleteUnusedPeer(2);
  61. CPPUNIT_ASSERT_EQUAL((int32_t)1, ps.countPeer());
  62. CPPUNIT_ASSERT_EQUAL(string("192.168.0.3"),
  63. ps.getPeer("192.168.0.3", 6889)->ipaddr);
  64. ps.addPeer(peer1);
  65. ps.addPeer(peer2);
  66. peer2->cuid = 1;
  67. ps.deleteUnusedPeer(3);
  68. // peer2 has been in use, so it did't deleted.
  69. CPPUNIT_ASSERT_EQUAL((int32_t)1, ps.countPeer());
  70. CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"),
  71. ps.getPeer("192.168.0.2", 6889)->ipaddr);
  72. }
  73. void DefaultPeerStorageTest::testAddPeer() {
  74. DefaultPeerStorage ps(btContext, option);
  75. PeerHandle peer1(new Peer("192.168.0.1", 6889));
  76. PeerHandle peer2(new Peer("192.168.0.2", 6889));
  77. PeerHandle peer3(new Peer("192.168.0.3", 6889));
  78. ps.addPeer(peer1);
  79. ps.addPeer(peer2);
  80. ps.addPeer(peer3);
  81. CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
  82. // this returns false, because peer1 is already in the container
  83. CPPUNIT_ASSERT_EQUAL(false, ps.addPeer(peer1));
  84. // the number of peers doesn't change.
  85. CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
  86. ps.setMaxPeerListSize(3);
  87. PeerHandle peer4(new Peer("192.168.0.4", 6889));
  88. CPPUNIT_ASSERT(ps.addPeer(peer4));
  89. // peer1 was deleted.
  90. CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
  91. PeerHandle peer5(new Peer("192.168.0.4", 0));
  92. peer5->port = 6889;
  93. // this returns false because the peer which has same ip and port has already added
  94. CPPUNIT_ASSERT_EQUAL(false, ps.addPeer(peer5));
  95. }
  96. void DefaultPeerStorageTest::testGetPeer() {
  97. DefaultPeerStorage ps(btContext, option);
  98. ps.setBtRuntime(btRuntime);
  99. PeerHandle peer1(new Peer("192.168.0.1", 6889));
  100. ps.addPeer(peer1);
  101. CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"),
  102. ps.getUnusedPeer()->ipaddr);
  103. peer1->cuid = 1;
  104. CPPUNIT_ASSERT(ps.getUnusedPeer().isNull());
  105. peer1->resetStatus();
  106. peer1->startBadCondition();
  107. CPPUNIT_ASSERT(ps.getUnusedPeer().isNull());
  108. }
  109. void DefaultPeerStorageTest::testIsPeerAvailable() {
  110. DefaultPeerStorage ps(btContext, option);
  111. ps.setBtRuntime(btRuntime);
  112. CPPUNIT_ASSERT_EQUAL(false, ps.isPeerAvailable());
  113. PeerHandle peer1(new Peer("192.168.0.1", 6889));
  114. ps.addPeer(peer1);
  115. CPPUNIT_ASSERT_EQUAL(true, ps.isPeerAvailable());
  116. peer1->cuid = 1;
  117. CPPUNIT_ASSERT_EQUAL(false, ps.isPeerAvailable());
  118. peer1->resetStatus();
  119. peer1->startBadCondition();
  120. CPPUNIT_ASSERT_EQUAL(false, ps.isPeerAvailable());
  121. }
  122. void DefaultPeerStorageTest::testActivatePeer() {
  123. DefaultPeerStorage ps(btContext, option);
  124. CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getActivePeers().size());
  125. PeerHandle peer1(new Peer("192.168.0.1", 6889));
  126. ps.addPeer(peer1);
  127. Peers activePeer = ps.getActivePeers();
  128. CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getActivePeers().size());
  129. peer1->activate();
  130. CPPUNIT_ASSERT_EQUAL((size_t)1, ps.getActivePeers().size());
  131. }
  132. void DefaultPeerStorageTest::testCalculateStat() {
  133. }
  134. void DefaultPeerStorageTest::testReturnPeer()
  135. {
  136. DefaultPeerStorage ps(btContext, option);
  137. PeerHandle peer1(new Peer("192.168.0.1", 6889));
  138. PeerHandle peer2(new Peer("192.168.0.2", 6889));
  139. ps.addPeer(peer1);
  140. ps.addPeer(peer2);
  141. PeerHandle peer3(new Peer("192.168.0.3", 0));
  142. ps.addPeer(peer3);
  143. ps.returnPeer(peer2);
  144. // peer2 is moved to the end of container
  145. CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"),
  146. ps.getPeers().back()->ipaddr);
  147. ps.returnPeer(peer3); // peer3 is removed from the container
  148. CPPUNIT_ASSERT_EQUAL((size_t)2, ps.getPeers().size());
  149. CPPUNIT_ASSERT(find(ps.getPeers().begin(), ps.getPeers().end(), peer3) == ps.getPeers().end());
  150. }
  151. void DefaultPeerStorageTest::testOnErasingPeer()
  152. {
  153. // test this
  154. }