MultiDiskWriterTest.cc 3.9 KB

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