SegmentManTest.cc 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "SegmentMan.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "DownloadContext.h"
  4. #include "UnknownLengthPieceStorage.h"
  5. #include "DefaultPieceStorage.h"
  6. #include "Segment.h"
  7. #include "Option.h"
  8. #include "PieceSelector.h"
  9. namespace aria2 {
  10. class SegmentManTest:public CppUnit::TestFixture {
  11. CPPUNIT_TEST_SUITE(SegmentManTest);
  12. CPPUNIT_TEST(testNullBitfield);
  13. CPPUNIT_TEST(testCompleteSegment);
  14. CPPUNIT_TEST_SUITE_END();
  15. private:
  16. public:
  17. void setUp() {
  18. }
  19. void testNullBitfield();
  20. void testCompleteSegment();
  21. void testGetPeerStat();
  22. void testGetSegment_segmentForward();
  23. };
  24. CPPUNIT_TEST_SUITE_REGISTRATION( SegmentManTest );
  25. void SegmentManTest::testNullBitfield()
  26. {
  27. Option op;
  28. SharedHandle<DownloadContext> dctx
  29. (new DownloadContext(0, 0, "aria2.tar.bz2"));
  30. SharedHandle<UnknownLengthPieceStorage> ps
  31. (new UnknownLengthPieceStorage(dctx, &op));
  32. SegmentMan segmentMan(&op, dctx, ps);
  33. SharedHandle<Segment> segment = segmentMan.getSegment(1);
  34. CPPUNIT_ASSERT(!segment.isNull());
  35. CPPUNIT_ASSERT_EQUAL((size_t)0, segment->getIndex());
  36. CPPUNIT_ASSERT_EQUAL((size_t)0, segment->getLength());
  37. CPPUNIT_ASSERT_EQUAL((size_t)0, segment->getSegmentLength());
  38. CPPUNIT_ASSERT_EQUAL((size_t)0, segment->getWrittenLength());
  39. SharedHandle<Segment> segment2 = segmentMan.getSegment(2);
  40. CPPUNIT_ASSERT(segment2.isNull());
  41. segmentMan.cancelSegment(1);
  42. CPPUNIT_ASSERT(!segmentMan.getSegment(2).isNull());
  43. }
  44. void SegmentManTest::testCompleteSegment()
  45. {
  46. Option op;
  47. size_t pieceLength = 1024*1024;
  48. uint64_t totalLength = 64*1024*1024;
  49. SharedHandle<DownloadContext> dctx
  50. (new DownloadContext(pieceLength, totalLength, "aria2.tar.bz2"));
  51. SharedHandle<DefaultPieceStorage> ps(new DefaultPieceStorage(dctx, &op));
  52. SegmentMan segmentMan(&op, dctx, ps);
  53. CPPUNIT_ASSERT(!segmentMan.getSegment(1, 0).isNull());
  54. SharedHandle<Segment> seg = segmentMan.getSegment(1, 1);
  55. CPPUNIT_ASSERT(!seg.isNull());
  56. CPPUNIT_ASSERT(!segmentMan.getSegment(1, 2).isNull());
  57. seg->updateWrittenLength(pieceLength);
  58. segmentMan.completeSegment(1, seg);
  59. std::deque<SharedHandle<Segment> > segments;
  60. segmentMan.getInFlightSegment(segments, 1);
  61. CPPUNIT_ASSERT_EQUAL((size_t)2, segments.size());
  62. CPPUNIT_ASSERT_EQUAL((size_t)0, segments[0]->getIndex());
  63. CPPUNIT_ASSERT_EQUAL((size_t)2, segments[1]->getIndex());
  64. }
  65. } // namespace aria2