MetalinkParserControllerTest.cc 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #include "MetalinkParserController.h"
  2. #include "Metalinker.h"
  3. #include "MetalinkEntry.h"
  4. #include "MetalinkResource.h"
  5. #ifdef ENABLE_MESSAGE_DIGEST
  6. #include "Checksum.h"
  7. #include "ChunkChecksum.h"
  8. #endif // ENABLE_MESSAGE_DIGEST
  9. #include <cppunit/extensions/HelperMacros.h>
  10. class MetalinkParserControllerTest:public CppUnit::TestFixture {
  11. CPPUNIT_TEST_SUITE(MetalinkParserControllerTest);
  12. CPPUNIT_TEST(testEntryTransaction);
  13. CPPUNIT_TEST(testResourceTransaction);
  14. #ifdef ENABLE_MESSAGE_DIGEST
  15. CPPUNIT_TEST(testChecksumTransaction);
  16. CPPUNIT_TEST(testChunkChecksumTransaction);
  17. #endif // ENABLE_MESSAGE_DIGEST
  18. CPPUNIT_TEST_SUITE_END();
  19. private:
  20. public:
  21. void setUp() {}
  22. void tearDown() {}
  23. void testEntryTransaction();
  24. void testResourceTransaction();
  25. #ifdef ENABLE_MESSAGE_DIGEST
  26. void testChecksumTransaction();
  27. void testChunkChecksumTransaction();
  28. #endif // ENABLE_MESSAGE_DIGEST
  29. };
  30. CPPUNIT_TEST_SUITE_REGISTRATION( MetalinkParserControllerTest );
  31. void MetalinkParserControllerTest::testEntryTransaction()
  32. {
  33. MetalinkParserController ctrl;
  34. ctrl.newEntryTransaction();
  35. ctrl.setFileNameOfEntry("aria2.tar.bz2");
  36. ctrl.setFileLengthOfEntry(1024*1024);
  37. ctrl.setVersionOfEntry("1.0");
  38. ctrl.setLanguageOfEntry("ja_JP");
  39. ctrl.setOSOfEntry("Linux");
  40. ctrl.commitEntryTransaction();
  41. {
  42. MetalinkerHandle m = ctrl.getResult();
  43. CPPUNIT_ASSERT_EQUAL((size_t)1, m->entries.size());
  44. MetalinkEntryHandle e = m->entries.front();
  45. CPPUNIT_ASSERT_EQUAL(string("aria2.tar.bz2"), e->file->getPath());
  46. CPPUNIT_ASSERT_EQUAL((int64_t)1024*1024, e->file->getLength());
  47. CPPUNIT_ASSERT_EQUAL((int64_t)0, e->file->getOffset());
  48. CPPUNIT_ASSERT_EQUAL(string("1.0"), e->version);
  49. CPPUNIT_ASSERT_EQUAL(string("ja_JP"), e->language);
  50. CPPUNIT_ASSERT_EQUAL(string("Linux"), e->os);
  51. }
  52. ctrl.newEntryTransaction();
  53. ctrl.cancelEntryTransaction();
  54. CPPUNIT_ASSERT_EQUAL((size_t)1, ctrl.getResult()->entries.size());
  55. }
  56. void MetalinkParserControllerTest::testResourceTransaction()
  57. {
  58. MetalinkParserController ctrl;
  59. ctrl.newEntryTransaction();
  60. ctrl.newResourceTransaction();
  61. ctrl.setURLOfResource("http://mirror/aria2.tar.bz2");
  62. ctrl.setTypeOfResource("http");
  63. ctrl.setLocationOfResource("US");
  64. ctrl.setPreferenceOfResource(100);
  65. ctrl.setMaxConnectionsOfResource(1);
  66. ctrl.commitEntryTransaction();
  67. {
  68. MetalinkerHandle m = ctrl.getResult();
  69. CPPUNIT_ASSERT_EQUAL((size_t)1, m->entries.front()->resources.size());
  70. MetalinkResourceHandle res = m->entries.front()->resources[0];
  71. CPPUNIT_ASSERT_EQUAL(string("http://mirror/aria2.tar.bz2"), res->url);
  72. CPPUNIT_ASSERT_EQUAL(MetalinkResource::TYPE_HTTP, res->type);
  73. CPPUNIT_ASSERT_EQUAL(string("US"), res->location);
  74. CPPUNIT_ASSERT_EQUAL(100, res->preference);
  75. CPPUNIT_ASSERT_EQUAL(1, res->maxConnections);
  76. }
  77. ctrl.newEntryTransaction();
  78. ctrl.newResourceTransaction();
  79. ctrl.cancelResourceTransaction();
  80. ctrl.commitEntryTransaction();
  81. CPPUNIT_ASSERT_EQUAL((size_t)1, ctrl.getResult()->entries.front()->resources.size());
  82. }
  83. #ifdef ENABLE_MESSAGE_DIGEST
  84. void MetalinkParserControllerTest::testChecksumTransaction()
  85. {
  86. MetalinkParserController ctrl;
  87. ctrl.newEntryTransaction();
  88. ctrl.newChecksumTransaction();
  89. ctrl.setTypeOfChecksum("md5");
  90. ctrl.setHashOfChecksum("hash");
  91. ctrl.commitEntryTransaction();
  92. {
  93. MetalinkerHandle m = ctrl.getResult();
  94. ChecksumHandle md = m->entries.front()->checksum;
  95. CPPUNIT_ASSERT_EQUAL(string("md5"), md->getAlgo());
  96. CPPUNIT_ASSERT_EQUAL(string("hash"), md->getMessageDigest());
  97. }
  98. ctrl.newEntryTransaction();
  99. ctrl.newChecksumTransaction();
  100. ctrl.cancelChecksumTransaction();
  101. ctrl.commitEntryTransaction();
  102. CPPUNIT_ASSERT(ctrl.getResult()->entries[1]->checksum.isNull());
  103. }
  104. void MetalinkParserControllerTest::testChunkChecksumTransaction()
  105. {
  106. MetalinkParserController ctrl;
  107. ctrl.newEntryTransaction();
  108. ctrl.newChunkChecksumTransaction();
  109. ctrl.setTypeOfChunkChecksum("md5");
  110. ctrl.setLengthOfChunkChecksum(256*1024);
  111. ctrl.addHashOfChunkChecksum(4, "hash4");
  112. ctrl.addHashOfChunkChecksum(1, "hash1");
  113. ctrl.addHashOfChunkChecksum(3, "hash3");
  114. ctrl.addHashOfChunkChecksum(2, "hash2");
  115. ctrl.addHashOfChunkChecksum(5, "hash5");
  116. ctrl.commitEntryTransaction();
  117. {
  118. MetalinkerHandle m = ctrl.getResult();
  119. ChunkChecksumHandle md = m->entries.front()->chunkChecksum;
  120. CPPUNIT_ASSERT_EQUAL(string("md5"), md->getAlgo());
  121. CPPUNIT_ASSERT_EQUAL(256*1024, md->getChecksumLength());
  122. CPPUNIT_ASSERT_EQUAL(5, md->countChecksum());
  123. CPPUNIT_ASSERT_EQUAL(string("hash1"), md->getChecksums()[0]);
  124. CPPUNIT_ASSERT_EQUAL(string("hash2"), md->getChecksums()[1]);
  125. CPPUNIT_ASSERT_EQUAL(string("hash3"), md->getChecksums()[2]);
  126. CPPUNIT_ASSERT_EQUAL(string("hash4"), md->getChecksums()[3]);
  127. CPPUNIT_ASSERT_EQUAL(string("hash5"), md->getChecksums()[4]);
  128. }
  129. ctrl.newEntryTransaction();
  130. ctrl.newChunkChecksumTransaction();
  131. ctrl.cancelChunkChecksumTransaction();
  132. ctrl.commitEntryTransaction();
  133. CPPUNIT_ASSERT(ctrl.getResult()->entries[1]->chunkChecksum.isNull());
  134. }
  135. #endif // ENABLE_MESSAGE_DIGEST