DefaultPieceStorageTest.cc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #include "DefaultPieceStorage.h"
  2. #include "DefaultBtContext.h"
  3. #include "Util.h"
  4. #include "Exception.h"
  5. #include "FixedNumberRandomizer.h"
  6. #include "BitfieldManFactory.h"
  7. #include "Piece.h"
  8. #include "Peer.h"
  9. #include "Option.h"
  10. #include <cppunit/extensions/HelperMacros.h>
  11. using namespace std;
  12. class DefaultPieceStorageTest:public CppUnit::TestFixture {
  13. CPPUNIT_TEST_SUITE(DefaultPieceStorageTest);
  14. CPPUNIT_TEST(testGetTotalLength);
  15. CPPUNIT_TEST(testGetMissingPiece);
  16. CPPUNIT_TEST(testGetMissingFastPiece);
  17. CPPUNIT_TEST(testHasMissingPiece);
  18. CPPUNIT_TEST(testCompletePiece);
  19. CPPUNIT_TEST(testGetPiece);
  20. CPPUNIT_TEST(testGetPieceInUsedPieces);
  21. CPPUNIT_TEST(testGetPieceCompletedPiece);
  22. CPPUNIT_TEST_SUITE_END();
  23. private:
  24. BtContextHandle btContext;
  25. PeerHandle peer;
  26. Option* option;
  27. public:
  28. DefaultPieceStorageTest():btContext(0), peer(0) {
  29. FixedNumberRandomizer* randomizer = new FixedNumberRandomizer();
  30. randomizer->setFixedNumber(0);
  31. BitfieldManFactory::setDefaultRandomizer(randomizer);
  32. }
  33. void setUp() {
  34. btContext = BtContextHandle(new DefaultBtContext());
  35. btContext->load("test.torrent");
  36. peer = PeerHandle(new Peer("192.168.0.1", 6889,
  37. btContext->getPieceLength(),
  38. btContext->getTotalLength()));
  39. option = new Option();
  40. }
  41. void testGetTotalLength();
  42. void testGetMissingPiece();
  43. void testGetMissingFastPiece();
  44. void testHasMissingPiece();
  45. void testCompletePiece();
  46. void testGetPiece();
  47. void testGetPieceInUsedPieces();
  48. void testGetPieceCompletedPiece();
  49. };
  50. CPPUNIT_TEST_SUITE_REGISTRATION(DefaultPieceStorageTest);
  51. void DefaultPieceStorageTest::testGetTotalLength() {
  52. DefaultPieceStorage pss(btContext, option);
  53. CPPUNIT_ASSERT_EQUAL((long long int)384,
  54. pss.getTotalLength());
  55. }
  56. void DefaultPieceStorageTest::testGetMissingPiece() {
  57. DefaultPieceStorage pss(btContext, option);
  58. pss.setEndGamePieceNum(0);
  59. peer->setAllBitfield();
  60. PieceHandle piece = pss.getMissingPiece(peer);
  61. CPPUNIT_ASSERT_EQUAL(string("piece: index=0, length=128"),
  62. piece->toString());
  63. piece = pss.getMissingPiece(peer);
  64. CPPUNIT_ASSERT_EQUAL(string("piece: index=1, length=128"),
  65. piece->toString());
  66. piece = pss.getMissingPiece(peer);
  67. CPPUNIT_ASSERT_EQUAL(string("piece: index=2, length=128"),
  68. piece->toString());
  69. piece = pss.getMissingPiece(peer);
  70. CPPUNIT_ASSERT(piece.isNull());
  71. }
  72. void DefaultPieceStorageTest::testGetMissingFastPiece() {
  73. DefaultPieceStorage pss(btContext, option);
  74. pss.setEndGamePieceNum(0);
  75. peer->setAllBitfield();
  76. peer->setFastExtensionEnabled(true);
  77. peer->addFastSetIndex(2);
  78. PieceHandle piece = pss.getMissingFastPiece(peer);
  79. CPPUNIT_ASSERT_EQUAL(string("piece: index=2, length=128"),
  80. piece->toString());
  81. }
  82. void DefaultPieceStorageTest::testHasMissingPiece() {
  83. DefaultPieceStorage pss(btContext, option);
  84. CPPUNIT_ASSERT(!pss.hasMissingPiece(peer));
  85. peer->setAllBitfield();
  86. CPPUNIT_ASSERT(pss.hasMissingPiece(peer));
  87. }
  88. void DefaultPieceStorageTest::testCompletePiece() {
  89. DefaultPieceStorage pss(btContext, option);
  90. pss.setEndGamePieceNum(0);
  91. peer->setAllBitfield();
  92. PieceHandle piece = pss.getMissingPiece(peer);
  93. CPPUNIT_ASSERT_EQUAL(string("piece: index=0, length=128"),
  94. piece->toString());
  95. CPPUNIT_ASSERT_EQUAL((long long int)0,
  96. pss.getCompletedLength());
  97. pss.completePiece(piece);
  98. CPPUNIT_ASSERT_EQUAL((long long int)128,
  99. pss.getCompletedLength());
  100. }
  101. void DefaultPieceStorageTest::testGetPiece() {
  102. DefaultPieceStorage pss(btContext, option);
  103. PieceHandle pieceGot = pss.getPiece(0);
  104. CPPUNIT_ASSERT_EQUAL((int32_t)0, pieceGot->getIndex());
  105. CPPUNIT_ASSERT_EQUAL((int32_t)128, pieceGot->getLength());
  106. CPPUNIT_ASSERT_EQUAL(false, pieceGot->pieceComplete());
  107. }
  108. void DefaultPieceStorageTest::testGetPieceInUsedPieces() {
  109. DefaultPieceStorage pss(btContext, option);
  110. PieceHandle piece = PieceHandle(new Piece(0, 128));
  111. piece->completeBlock(0);
  112. pss.addUsedPiece(piece);
  113. PieceHandle pieceGot = pss.getPiece(0);
  114. CPPUNIT_ASSERT_EQUAL((int32_t)0, pieceGot->getIndex());
  115. CPPUNIT_ASSERT_EQUAL((int32_t)128, pieceGot->getLength());
  116. CPPUNIT_ASSERT_EQUAL((int32_t)1, pieceGot->countCompleteBlock());
  117. }
  118. void DefaultPieceStorageTest::testGetPieceCompletedPiece() {
  119. DefaultPieceStorage pss(btContext, option);
  120. PieceHandle piece = PieceHandle(new Piece(0, 128));
  121. pss.completePiece(piece);
  122. PieceHandle pieceGot = pss.getPiece(0);
  123. CPPUNIT_ASSERT_EQUAL((int32_t)0, pieceGot->getIndex());
  124. CPPUNIT_ASSERT_EQUAL((int32_t)128, pieceGot->getLength());
  125. CPPUNIT_ASSERT_EQUAL(true, pieceGot->pieceComplete());
  126. }