MetalinkParserControllerTest.cc 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #include "MetalinkParserController.h"
  2. #include "Metalinker.h"
  3. #include "MetalinkEntry.h"
  4. #include "MetalinkResource.h"
  5. #include "FileEntry.h"
  6. #ifdef ENABLE_MESSAGE_DIGEST
  7. # include "Checksum.h"
  8. # include "ChunkChecksum.h"
  9. #endif // ENABLE_MESSAGE_DIGEST
  10. #include "Signature.h"
  11. #include <cppunit/extensions/HelperMacros.h>
  12. namespace aria2 {
  13. class MetalinkParserControllerTest:public CppUnit::TestFixture {
  14. CPPUNIT_TEST_SUITE(MetalinkParserControllerTest);
  15. CPPUNIT_TEST(testEntryTransaction);
  16. CPPUNIT_TEST(testResourceTransaction);
  17. #ifdef ENABLE_MESSAGE_DIGEST
  18. CPPUNIT_TEST(testChecksumTransaction);
  19. CPPUNIT_TEST(testChunkChecksumTransaction);
  20. #endif // ENABLE_MESSAGE_DIGEST
  21. CPPUNIT_TEST(testSignatureTransaction);
  22. CPPUNIT_TEST_SUITE_END();
  23. private:
  24. public:
  25. void setUp() {}
  26. void tearDown() {}
  27. void testEntryTransaction();
  28. void testResourceTransaction();
  29. #ifdef ENABLE_MESSAGE_DIGEST
  30. void testChecksumTransaction();
  31. void testChunkChecksumTransaction();
  32. #endif // ENABLE_MESSAGE_DIGEST
  33. void testSignatureTransaction();
  34. };
  35. CPPUNIT_TEST_SUITE_REGISTRATION( MetalinkParserControllerTest );
  36. void MetalinkParserControllerTest::testEntryTransaction()
  37. {
  38. MetalinkParserController ctrl;
  39. ctrl.newEntryTransaction();
  40. ctrl.setFileNameOfEntry("aria2.tar.bz2");
  41. ctrl.setFileLengthOfEntry(1024*1024);
  42. ctrl.setVersionOfEntry("1.0");
  43. ctrl.setLanguageOfEntry("ja_JP");
  44. ctrl.setOSOfEntry("Linux");
  45. ctrl.commitEntryTransaction();
  46. {
  47. SharedHandle<Metalinker> m = ctrl.getResult();
  48. CPPUNIT_ASSERT_EQUAL((size_t)1, m->entries.size());
  49. SharedHandle<MetalinkEntry> e = m->entries.front();
  50. CPPUNIT_ASSERT_EQUAL(std::string("aria2.tar.bz2"), e->file->getPath());
  51. CPPUNIT_ASSERT_EQUAL(1024*1024ULL, e->file->getLength());
  52. CPPUNIT_ASSERT_EQUAL((off_t)0, e->file->getOffset());
  53. CPPUNIT_ASSERT_EQUAL(std::string("1.0"), e->version);
  54. CPPUNIT_ASSERT_EQUAL(std::string("ja_JP"), e->language);
  55. CPPUNIT_ASSERT_EQUAL(std::string("Linux"), e->os);
  56. }
  57. ctrl.newEntryTransaction();
  58. ctrl.cancelEntryTransaction();
  59. CPPUNIT_ASSERT_EQUAL((size_t)1, ctrl.getResult()->entries.size());
  60. }
  61. void MetalinkParserControllerTest::testResourceTransaction()
  62. {
  63. MetalinkParserController ctrl;
  64. ctrl.newEntryTransaction();
  65. ctrl.newResourceTransaction();
  66. ctrl.setURLOfResource("http://mirror/aria2.tar.bz2");
  67. ctrl.setTypeOfResource("http");
  68. ctrl.setLocationOfResource("US");
  69. ctrl.setPreferenceOfResource(100);
  70. ctrl.setMaxConnectionsOfResource(1);
  71. ctrl.commitEntryTransaction();
  72. {
  73. SharedHandle<Metalinker> m = ctrl.getResult();
  74. CPPUNIT_ASSERT_EQUAL((size_t)1, m->entries.front()->resources.size());
  75. SharedHandle<MetalinkResource> res = m->entries.front()->resources[0];
  76. CPPUNIT_ASSERT_EQUAL(std::string("http://mirror/aria2.tar.bz2"), res->url);
  77. CPPUNIT_ASSERT_EQUAL(MetalinkResource::TYPE_HTTP, res->type);
  78. CPPUNIT_ASSERT_EQUAL(std::string("US"), res->location);
  79. CPPUNIT_ASSERT_EQUAL(100, res->preference);
  80. CPPUNIT_ASSERT_EQUAL(1, res->maxConnections);
  81. }
  82. ctrl.newEntryTransaction();
  83. ctrl.newResourceTransaction();
  84. ctrl.cancelResourceTransaction();
  85. ctrl.commitEntryTransaction();
  86. CPPUNIT_ASSERT_EQUAL((size_t)1, ctrl.getResult()->entries.front()->resources.size());
  87. }
  88. #ifdef ENABLE_MESSAGE_DIGEST
  89. void MetalinkParserControllerTest::testChecksumTransaction()
  90. {
  91. MetalinkParserController ctrl;
  92. ctrl.newEntryTransaction();
  93. ctrl.newChecksumTransaction();
  94. ctrl.setTypeOfChecksum("md5");
  95. ctrl.setHashOfChecksum("hash");
  96. ctrl.commitEntryTransaction();
  97. {
  98. SharedHandle<Metalinker> m = ctrl.getResult();
  99. SharedHandle<Checksum> md = m->entries.front()->checksum;
  100. CPPUNIT_ASSERT_EQUAL(std::string("md5"), md->getAlgo());
  101. CPPUNIT_ASSERT_EQUAL(std::string("hash"), md->getMessageDigest());
  102. }
  103. ctrl.newEntryTransaction();
  104. ctrl.newChecksumTransaction();
  105. ctrl.cancelChecksumTransaction();
  106. ctrl.commitEntryTransaction();
  107. CPPUNIT_ASSERT(ctrl.getResult()->entries[1]->checksum.isNull());
  108. }
  109. void MetalinkParserControllerTest::testChunkChecksumTransaction()
  110. {
  111. MetalinkParserController ctrl;
  112. ctrl.newEntryTransaction();
  113. ctrl.newChunkChecksumTransaction();
  114. ctrl.setTypeOfChunkChecksum("md5");
  115. ctrl.setLengthOfChunkChecksum(256*1024);
  116. ctrl.addHashOfChunkChecksum(4, "hash4");
  117. ctrl.addHashOfChunkChecksum(1, "hash1");
  118. ctrl.addHashOfChunkChecksum(3, "hash3");
  119. ctrl.addHashOfChunkChecksum(2, "hash2");
  120. ctrl.addHashOfChunkChecksum(5, "hash5");
  121. ctrl.commitEntryTransaction();
  122. {
  123. SharedHandle<Metalinker> m = ctrl.getResult();
  124. SharedHandle<ChunkChecksum> md = m->entries.front()->chunkChecksum;
  125. CPPUNIT_ASSERT_EQUAL(std::string("md5"), md->getAlgo());
  126. CPPUNIT_ASSERT_EQUAL((size_t)256*1024, md->getChecksumLength());
  127. CPPUNIT_ASSERT_EQUAL((size_t)5, md->countChecksum());
  128. CPPUNIT_ASSERT_EQUAL(std::string("hash1"), md->getChecksums()[0]);
  129. CPPUNIT_ASSERT_EQUAL(std::string("hash2"), md->getChecksums()[1]);
  130. CPPUNIT_ASSERT_EQUAL(std::string("hash3"), md->getChecksums()[2]);
  131. CPPUNIT_ASSERT_EQUAL(std::string("hash4"), md->getChecksums()[3]);
  132. CPPUNIT_ASSERT_EQUAL(std::string("hash5"), md->getChecksums()[4]);
  133. }
  134. ctrl.newEntryTransaction();
  135. ctrl.newChunkChecksumTransaction();
  136. ctrl.cancelChunkChecksumTransaction();
  137. ctrl.commitEntryTransaction();
  138. CPPUNIT_ASSERT(ctrl.getResult()->entries[1]->chunkChecksum.isNull());
  139. }
  140. #endif // ENABLE_MESSAGE_DIGEST
  141. void MetalinkParserControllerTest::testSignatureTransaction()
  142. {
  143. static std::string pgpSignature =
  144. "-----BEGIN PGP SIGNATURE-----\n"
  145. "Version: GnuPG v1.4.9 (GNU/Linux)\n"
  146. "\n"
  147. "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n"
  148. "ffffffffffffffffffffffff\n"
  149. "fffff\n"
  150. "-----END PGP SIGNATURE-----\n";
  151. MetalinkParserController ctrl;
  152. ctrl.newEntryTransaction();
  153. ctrl.newSignatureTransaction();
  154. ctrl.setTypeOfSignature("pgp");
  155. ctrl.setFileOfSignature("aria2.sig");
  156. ctrl.setBodyOfSignature(pgpSignature);
  157. // commitEntryTransaction also commits signature transaction.
  158. ctrl.commitEntryTransaction();
  159. SharedHandle<Metalinker> m = ctrl.getResult();
  160. CPPUNIT_ASSERT_EQUAL((size_t)1, m->entries.size());
  161. SharedHandle<Signature> sig = m->entries.front()->getSignature();
  162. CPPUNIT_ASSERT_EQUAL(std::string("pgp"), sig->getType());
  163. CPPUNIT_ASSERT_EQUAL(std::string("aria2.sig"), sig->getFile());
  164. CPPUNIT_ASSERT_EQUAL(pgpSignature, sig->getBody());
  165. // See when signature transaction is canceled:
  166. ctrl.newEntryTransaction();
  167. ctrl.newSignatureTransaction();
  168. ctrl.cancelSignatureTransaction();
  169. ctrl.commitEntryTransaction();
  170. CPPUNIT_ASSERT(ctrl.getResult()->entries[1]->getSignature().isNull());
  171. }
  172. } // namespace aria2