DefaultPieceStorageTest.cc 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "DefaultPieceStorage.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 DefaultPieceStorageTest:public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(DefaultPieceStorageTest);
  9. CPPUNIT_TEST(testGetTotalLength);
  10. CPPUNIT_TEST(testGetMissingPiece);
  11. CPPUNIT_TEST(testGetMissingFastPiece);
  12. CPPUNIT_TEST(testHasMissingPiece);
  13. CPPUNIT_TEST(testCompletePiece);
  14. CPPUNIT_TEST_SUITE_END();
  15. private:
  16. BtContextHandle btContext;
  17. PeerHandle peer;
  18. Option* option;
  19. public:
  20. DefaultPieceStorageTest():btContext(0) {}
  21. void setUp() {
  22. btContext = BtContextHandle(new DefaultBtContext());
  23. btContext->load("test.torrent");
  24. peer = PeerHandle(new Peer("192.168.0.1", 6889,
  25. btContext->getPieceLength(),
  26. btContext->getTotalLength()));
  27. option = new Option();
  28. }
  29. void testGetTotalLength();
  30. void testGetMissingPiece();
  31. void testGetMissingFastPiece();
  32. void testHasMissingPiece();
  33. void testCompletePiece();
  34. };
  35. CPPUNIT_TEST_SUITE_REGISTRATION(DefaultPieceStorageTest);
  36. void DefaultPieceStorageTest::testGetTotalLength() {
  37. DefaultPieceStorage pss(btContext, option);
  38. CPPUNIT_ASSERT_EQUAL((long long int)384,
  39. pss.getTotalLength());
  40. }
  41. void DefaultPieceStorageTest::testGetMissingPiece() {
  42. DefaultPieceStorage pss(btContext, option);
  43. pss.setEndGamePieceNum(0);
  44. peer->setAllBitfield();
  45. Piece piece = pss.getMissingPiece(peer);
  46. CPPUNIT_ASSERT_EQUAL(string("piece: index=0, length=128"),
  47. piece.toString());
  48. piece = pss.getMissingPiece(peer);
  49. CPPUNIT_ASSERT_EQUAL(string("piece: index=1, length=128"),
  50. piece.toString());
  51. piece = pss.getMissingPiece(peer);
  52. CPPUNIT_ASSERT_EQUAL(string("piece: index=2, length=128"),
  53. piece.toString());
  54. piece = pss.getMissingPiece(peer);
  55. CPPUNIT_ASSERT(Piece::isNull(piece));
  56. }
  57. void DefaultPieceStorageTest::testGetMissingFastPiece() {
  58. DefaultPieceStorage pss(btContext, option);
  59. pss.setEndGamePieceNum(0);
  60. peer->setAllBitfield();
  61. peer->setFastExtensionEnabled(true);
  62. peer->addFastSetIndex(2);
  63. Piece piece = pss.getMissingFastPiece(peer);
  64. CPPUNIT_ASSERT_EQUAL(string("piece: index=2, length=128"),
  65. piece.toString());
  66. }
  67. void DefaultPieceStorageTest::testHasMissingPiece() {
  68. DefaultPieceStorage pss(btContext, option);
  69. CPPUNIT_ASSERT(!pss.hasMissingPiece(peer));
  70. peer->setAllBitfield();
  71. CPPUNIT_ASSERT(pss.hasMissingPiece(peer));
  72. }
  73. void DefaultPieceStorageTest::testCompletePiece() {
  74. DefaultPieceStorage pss(btContext, option);
  75. pss.setEndGamePieceNum(0);
  76. peer->setAllBitfield();
  77. Piece piece = pss.getMissingPiece(peer);
  78. CPPUNIT_ASSERT_EQUAL(string("piece: index=0, length=128"),
  79. piece.toString());
  80. CPPUNIT_ASSERT_EQUAL((long long int)0,
  81. pss.getCompletedLength());
  82. pss.completePiece(piece);
  83. CPPUNIT_ASSERT_EQUAL((long long int)128,
  84. pss.getCompletedLength());
  85. }