MultiDiskWriterTest.cc 4.0 KB

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