diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-27 15:04:48 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-27 15:04:48 +0000 |
| commit | 0c62e907309da29d23b669da91034d00f378bade (patch) | |
| tree | 42b0acc586e64aa4028d6279ebd9783d8713ad9d | |
| parent | 4bef54c8e926f8f9269dd9001f27202665ea1fab (diff) | |
2010-02-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that grouped FileEntry objects are not used but
instead all FileEntry objects are used for each metaurl group.
* src/Metalink2RequestGroup.cc
* test/Metalink2RequestGroupTest.cc
* test/metalink4-groupbymetaurl.xml
| -rw-r--r-- | ChangeLog | 8 | ||||
| -rw-r--r-- | src/Metalink2RequestGroup.cc | 6 | ||||
| -rw-r--r-- | test/Metalink2RequestGroupTest.cc | 48 | ||||
| -rw-r--r-- | test/metalink4-groupbymetaurl.xml | 17 |
4 files changed, 76 insertions, 3 deletions
@@ -1,3 +1,11 @@ +2010-02-28 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net> + + Fixed the bug that grouped FileEntry objects are not used but + instead all FileEntry objects are used for each metaurl group. + * src/Metalink2RequestGroup.cc + * test/Metalink2RequestGroupTest.cc + * test/metalink4-groupbymetaurl.xml + 2010-02-27 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net> Use vector instead of deque for ChunkChecksum. diff --git a/src/Metalink2RequestGroup.cc b/src/Metalink2RequestGroup.cc index e06e39aa..95edd28c 100644 --- a/src/Metalink2RequestGroup.cc +++ b/src/Metalink2RequestGroup.cc @@ -180,7 +180,7 @@ Metalink2RequestGroup::createRequestGroup } } } - std::for_each(entries.begin(), entries.end(), + std::for_each(selectedEntries.begin(), selectedEntries.end(), mem_fun_sh(&MetalinkEntry::reorderMetaurlsByPriority)); std::vector<std::pair<std::string, std::vector<SharedHandle<MetalinkEntry> > > > entryGroups; @@ -276,8 +276,8 @@ Metalink2RequestGroup::createRequestGroup dctx->setPieceLength(option->getAsInt(PREF_SEGMENT_SIZE)); std::vector<SharedHandle<FileEntry> > fileEntries; off_t offset = 0; - for(std::deque<SharedHandle<MetalinkEntry> >::const_iterator i = - entries.begin(); i != entries.end(); ++i) { + for(std::vector<SharedHandle<MetalinkEntry> >::const_iterator i = + mes.begin(); i != mes.end(); ++i) { _logger->info("Metalink: Queueing %s for download as a member.", (*i)->getPath().c_str()); _logger->debug("originalName = %s", (*i)->metaurls[0]->name.c_str()); diff --git a/test/Metalink2RequestGroupTest.cc b/test/Metalink2RequestGroupTest.cc index defb99f8..24e317e2 100644 --- a/test/Metalink2RequestGroupTest.cc +++ b/test/Metalink2RequestGroupTest.cc @@ -16,6 +16,7 @@ class Metalink2RequestGroupTest:public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(Metalink2RequestGroupTest); CPPUNIT_TEST(testGenerate); + CPPUNIT_TEST(testGenerate_groupByMetaurl); CPPUNIT_TEST_SUITE_END(); private: SharedHandle<Option> _option; @@ -28,6 +29,7 @@ public: } void testGenerate(); + void testGenerate_groupByMetaurl(); }; @@ -121,4 +123,50 @@ void Metalink2RequestGroupTest::testGenerate() } } +void Metalink2RequestGroupTest::testGenerate_groupByMetaurl() +{ + std::deque<SharedHandle<RequestGroup> > groups; + Metalink2RequestGroup().generate(groups, "metalink4-groupbymetaurl.xml", + _option); + CPPUNIT_ASSERT_EQUAL((size_t)3, groups.size()); + // first RequestGroup is torrent for second RequestGroup + { + SharedHandle<RequestGroup> rg = groups[0]; + std::deque<std::string> uris; + rg->getDownloadContext()->getFirstFileEntry()->getUris(uris); + CPPUNIT_ASSERT_EQUAL((size_t)1, uris.size()); + CPPUNIT_ASSERT_EQUAL(std::string("http://torrent"), uris[0]); + } + // second + { + SharedHandle<RequestGroup> rg = groups[1]; + SharedHandle<DownloadContext> dctx = rg->getDownloadContext(); + const std::vector<SharedHandle<FileEntry> >& fileEntries = + dctx->getFileEntries(); + CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntries.size()); + CPPUNIT_ASSERT_EQUAL(std::string("./file1"), fileEntries[0]->getPath()); + CPPUNIT_ASSERT_EQUAL(std::string("file1"), fileEntries[0]->getOriginalName()); + CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntries[0]->getRemainingUris().size()); + CPPUNIT_ASSERT_EQUAL(std::string("http://file1p1"), + fileEntries[0]->getRemainingUris()[0]); + CPPUNIT_ASSERT_EQUAL(std::string("./file3"), fileEntries[1]->getPath()); + CPPUNIT_ASSERT_EQUAL(std::string("file3"), fileEntries[1]->getOriginalName()); + CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntries[1]->getRemainingUris().size()); + CPPUNIT_ASSERT_EQUAL(std::string("http://file3p1"), + fileEntries[1]->getRemainingUris()[0]); + } + // third + { + SharedHandle<RequestGroup> rg = groups[2]; + SharedHandle<DownloadContext> dctx = rg->getDownloadContext(); + const std::vector<SharedHandle<FileEntry> >& fileEntries = + dctx->getFileEntries(); + CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntries.size()); + CPPUNIT_ASSERT_EQUAL(std::string("./file2"), fileEntries[0]->getPath()); + CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntries[0]->getRemainingUris().size()); + CPPUNIT_ASSERT_EQUAL(std::string("http://file2p1"), + fileEntries[0]->getRemainingUris()[0]); + } +} + } // namespace aria2 diff --git a/test/metalink4-groupbymetaurl.xml b/test/metalink4-groupbymetaurl.xml new file mode 100644 index 00000000..8904f87b --- /dev/null +++ b/test/metalink4-groupbymetaurl.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<metalink xmlns="urn:ietf:params:xml:ns:metalink"> + <file name="file1"> + <size>1000</size> + <url priority="1">http://file1p1</url> + <metaurl mediatype="torrent" priority="1" name="file1">http://torrent</metaurl> + </file> + <file name="file2"> + <size>2000</size> + <url priority="1">http://file2p1</url> + </file> + <file name="file3"> + <size>3000</size> + <url priority="1">http://file3p1</url> + <metaurl mediatype="torrent" priority="1" name="file3">http://torrent</metaurl> + </file> +</metalink> |
