DefaultPieceStorageTest.cc 4.5 KB

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