MultiDiskWriterTest.cc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include "MultiDiskWriter.h"
  2. #include <string>
  3. #include <cppunit/extensions/HelperMacros.h>
  4. using namespace std;
  5. class MultiDiskWriterTest:public CppUnit::TestFixture {
  6. CPPUNIT_TEST_SUITE(MultiDiskWriterTest);
  7. CPPUNIT_TEST(testWriteData);
  8. CPPUNIT_TEST(testReadData);
  9. CPPUNIT_TEST(testMessageDigest);
  10. CPPUNIT_TEST_SUITE_END();
  11. private:
  12. public:
  13. void setUp() {
  14. }
  15. void testWriteData();
  16. void testReadData();
  17. void testMessageDigest();
  18. };
  19. CPPUNIT_TEST_SUITE_REGISTRATION( MultiDiskWriterTest );
  20. FileEntries createEntries() {
  21. FileEntryHandle entry1(new FileEntry("file1.txt", 15, 0));
  22. FileEntryHandle entry2(new FileEntry("file2.txt", 7, 15));
  23. FileEntryHandle entry3(new FileEntry("file3.txt", 3, 22));
  24. unlink("file1.txt");
  25. unlink("file2.txt");
  26. unlink("file3.txt");
  27. FileEntries entries;
  28. entries.push_back(entry1);
  29. entries.push_back(entry2);
  30. entries.push_back(entry3);
  31. return entries;
  32. }
  33. void readFile(const string& filename, char* buf, int bufLength) {
  34. FILE* f = fopen(filename.c_str(), "r");
  35. if(f == NULL) {
  36. abort();
  37. }
  38. int retval = fread(buf, bufLength, 1, f);
  39. fclose(f);
  40. if(retval != 1) {
  41. abort();
  42. }
  43. }
  44. void MultiDiskWriterTest::testWriteData() {
  45. MultiDiskWriter dw(2);
  46. dw.setFileEntries(createEntries());
  47. dw.openFile(".");
  48. string msg = "12345";
  49. dw.writeData(msg.c_str(), msg.size(), 0);
  50. dw.closeFile();
  51. char buf[128];
  52. readFile("file1.txt", buf, 5);
  53. buf[5] = '\0';
  54. CPPUNIT_ASSERT_EQUAL(msg, string(buf));
  55. dw.openFile(".");
  56. string msg2 = "67890ABCDEF";
  57. dw.writeData(msg2.c_str(), msg2.size(), 5);
  58. dw.closeFile();
  59. readFile("file1.txt", buf, 15);
  60. buf[15] = '\0';
  61. CPPUNIT_ASSERT_EQUAL(string("1234567890ABCDE"), string(buf));
  62. readFile("file2.txt", buf, 1);
  63. buf[1] = '\0';
  64. CPPUNIT_ASSERT_EQUAL(string("F"), string(buf));
  65. dw.openFile(".");
  66. string msg3 = "12345123456712";
  67. dw.writeData(msg3.c_str(), msg3.size(), 10);
  68. dw.closeFile();
  69. readFile("file1.txt", buf, 15);
  70. buf[15] = '\0';
  71. CPPUNIT_ASSERT_EQUAL(string("123456789012345"), string(buf));
  72. readFile("file2.txt", buf, 7);
  73. buf[7] = '\0';
  74. CPPUNIT_ASSERT_EQUAL(string("1234567"), string(buf));
  75. readFile("file3.txt", buf, 2);
  76. buf[2] = '\0';
  77. CPPUNIT_ASSERT_EQUAL(string("12"), string(buf));
  78. }
  79. void MultiDiskWriterTest::testReadData() {
  80. FileEntryHandle entry1(new FileEntry("file1r.txt", 15, 0));
  81. FileEntryHandle entry2(new FileEntry("file2r.txt", 7, 15));
  82. FileEntryHandle entry3(new FileEntry("file3r.txt", 3, 22));
  83. FileEntries entries;
  84. entries.push_back(entry1);
  85. entries.push_back(entry2);
  86. entries.push_back(entry3);
  87. MultiDiskWriter dw(2);
  88. dw.setFileEntries(entries);
  89. dw.openFile(".");
  90. char buf[128];
  91. dw.readData(buf, 15, 0);
  92. buf[15] = '\0';
  93. CPPUNIT_ASSERT_EQUAL(string("1234567890ABCDE"), string(buf));
  94. dw.readData(buf, 10, 6);
  95. buf[10] = '\0';
  96. CPPUNIT_ASSERT_EQUAL(string("7890ABCDEF"), string(buf));
  97. dw.readData(buf, 4, 20);
  98. buf[4] = '\0';
  99. CPPUNIT_ASSERT_EQUAL(string("KLMN"), string(buf));
  100. dw.readData(buf, 25, 0);
  101. buf[25] = '\0';
  102. CPPUNIT_ASSERT_EQUAL(string("1234567890ABCDEFGHIJKLMNO"), string(buf));
  103. }
  104. void MultiDiskWriterTest::testMessageDigest() {
  105. FileEntryHandle entry1(new FileEntry("file1r.txt", 15, 0));
  106. FileEntryHandle entry2(new FileEntry("file2r.txt", 7, 15));
  107. FileEntryHandle entry3(new FileEntry("file3r.txt", 3, 22));
  108. FileEntries entries;
  109. entries.push_back(entry1);
  110. entries.push_back(entry2);
  111. entries.push_back(entry3);
  112. MultiDiskWriter dw(2);
  113. dw.setFileEntries(entries);
  114. dw.openFile(".");
  115. string sha1sum = dw.messageDigest(0, 25, DIGEST_ALGO_SHA1);
  116. CPPUNIT_ASSERT_EQUAL(string("76495faf71ca63df66dce99547d2c58da7266d9e"), sha1sum);
  117. sha1sum = dw.messageDigest(15, 7, DIGEST_ALGO_SHA1);
  118. CPPUNIT_ASSERT_EQUAL(string("737660d816fb23c2d5bc74f62d9b01b852b2aaca"), sha1sum);
  119. sha1sum = dw.messageDigest(10, 14, DIGEST_ALGO_SHA1);
  120. CPPUNIT_ASSERT_EQUAL(string("6238bf61dd8df8f77156b2378e9e39cd3939680c"), sha1sum);
  121. dw.closeFile();
  122. }