SegmentManTest.cc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "SegmentMan.h"
  2. #include "File.h"
  3. #include "prefs.h"
  4. #include "Util.h"
  5. #include <cppunit/extensions/HelperMacros.h>
  6. using namespace std;
  7. class SegmentManTest:public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(SegmentManTest);
  9. CPPUNIT_TEST(testSaveAndLoad);
  10. CPPUNIT_TEST(testNullBitfield);
  11. CPPUNIT_TEST(testCancelSegmentOnNullBitfield);
  12. CPPUNIT_TEST(testBug);
  13. CPPUNIT_TEST_SUITE_END();
  14. private:
  15. public:
  16. void setUp() {
  17. }
  18. void testSaveAndLoad();
  19. void testNullBitfield();
  20. void testCancelSegmentOnNullBitfield();
  21. void testBug();
  22. };
  23. CPPUNIT_TEST_SUITE_REGISTRATION( SegmentManTest );
  24. void SegmentManTest::testSaveAndLoad() {
  25. string filename = "save-temp";
  26. string aria2filename = filename+".aria2";
  27. File saveFile(aria2filename);
  28. if(saveFile.exists()) {
  29. saveFile.remove();
  30. assert(!saveFile.exists());
  31. }
  32. try {
  33. SegmentMan segmentMan;
  34. segmentMan.totalSize = 10*1024*1024;
  35. segmentMan.ufilename = filename;
  36. segmentMan.initBitfield(1024*1024, segmentMan.totalSize);
  37. Segment seg1;
  38. segmentMan.getSegment(seg1, 1);
  39. seg1.writtenLength = seg1.length;
  40. segmentMan.completeSegment(1, seg1);
  41. Segment seg2;
  42. segmentMan.getSegment(seg2, 2);
  43. seg2.writtenLength = 512*1024;
  44. segmentMan.updateSegment(2, seg2);
  45. Segment seg3;
  46. segmentMan.getSegment(seg3, 3);
  47. seg2.writtenLength = 512*1024;
  48. segmentMan.updateSegment(2, seg2);
  49. segmentMan.save();
  50. CPPUNIT_ASSERT(saveFile.exists());
  51. SegmentMan segmentManLoad;
  52. segmentManLoad.ufilename = filename;
  53. segmentManLoad.load();
  54. CPPUNIT_ASSERT_EQUAL(segmentMan.totalSize, segmentManLoad.totalSize);
  55. Segment seg2Load;
  56. segmentManLoad.getSegment(seg2Load, 2, seg2.index);
  57. CPPUNIT_ASSERT_EQUAL(seg2, seg2Load);
  58. Segment seg3Load;
  59. segmentManLoad.getSegment(seg3Load, 3, seg3.index);
  60. CPPUNIT_ASSERT_EQUAL(seg3, seg3Load);
  61. CPPUNIT_ASSERT_EQUAL(segmentMan.getDownloadLength(), segmentManLoad.getDownloadLength());
  62. } catch(Exception* e) {
  63. cerr << e->getMsg() << endl;
  64. delete e;
  65. }
  66. }
  67. void SegmentManTest::testNullBitfield() {
  68. SegmentMan segmentMan;
  69. Option op;
  70. op.put(PREF_SEGMENT_SIZE, Util::itos(1024*1024));
  71. segmentMan.option = &op;
  72. Segment segment;
  73. CPPUNIT_ASSERT(segmentMan.getSegment(segment, 1));
  74. CPPUNIT_ASSERT_EQUAL(Segment(0, 0, 0), segment);
  75. Segment segment2;
  76. CPPUNIT_ASSERT(!segmentMan.getSegment(segment2, 2));
  77. long long int totalLength = 1024*1024;
  78. segment.writtenLength = totalLength;
  79. CPPUNIT_ASSERT(segmentMan.updateSegment(1, segment));
  80. CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
  81. CPPUNIT_ASSERT(segmentMan.completeSegment(1, segment));
  82. CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
  83. }
  84. void SegmentManTest::testCancelSegmentOnNullBitfield() {
  85. SegmentMan segmentMan;
  86. Segment segment;
  87. CPPUNIT_ASSERT(segmentMan.getSegment(segment, 1));
  88. segmentMan.cancelSegment(1);
  89. CPPUNIT_ASSERT(segmentMan.getSegment(segment, 1));
  90. }
  91. void SegmentManTest::testBug() {
  92. SegmentMan segmentMan;
  93. segmentMan.ufilename = "bug";
  94. cerr << "########################################" << endl;
  95. segmentMan.load();
  96. }