Use std::unique_ptr for Metalink objects

This commit is contained in:
Tatsuhiro Tsujikawa 2013-07-12 22:59:49 +09:00
parent 59e63d956e
commit 41121e09f7
24 changed files with 504 additions and 597 deletions

View file

@ -63,10 +63,12 @@ void MetalinkParserControllerTest::testEntryTransaction()
ctrl.setLanguageOfEntry("ja_JP");
ctrl.setOSOfEntry("Linux");
ctrl.commitEntryTransaction();
ctrl.newEntryTransaction();
ctrl.cancelEntryTransaction();
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
auto m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getEntries().size());
std::shared_ptr<MetalinkEntry> e = m->getEntries().front();
auto& e = m->getEntries()[0];
CPPUNIT_ASSERT_EQUAL(std::string("aria2.tar.bz2"), e->file->getPath());
CPPUNIT_ASSERT_EQUAL((int64_t)(1024*1024LL), e->file->getLength());
CPPUNIT_ASSERT_EQUAL((int64_t)0, e->file->getOffset());
@ -74,9 +76,6 @@ void MetalinkParserControllerTest::testEntryTransaction()
CPPUNIT_ASSERT_EQUAL(std::string("ja_JP"), e->languages[0]);
CPPUNIT_ASSERT_EQUAL(std::string("Linux"), e->oses[0]);
}
ctrl.newEntryTransaction();
ctrl.cancelEntryTransaction();
CPPUNIT_ASSERT_EQUAL((size_t)1, ctrl.getResult()->getEntries().size());
}
void MetalinkParserControllerTest::testResourceTransaction()
@ -90,25 +89,22 @@ void MetalinkParserControllerTest::testResourceTransaction()
ctrl.setPriorityOfResource(100);
ctrl.setMaxConnectionsOfResource(1);
ctrl.commitEntryTransaction();
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getEntries().front()->resources.size());
std::shared_ptr<MetalinkResource> res = m->getEntries().front()->resources[0];
CPPUNIT_ASSERT_EQUAL(std::string("http://mirror/aria2.tar.bz2"), res->url);
CPPUNIT_ASSERT_EQUAL(MetalinkResource::TYPE_HTTP, res->type);
CPPUNIT_ASSERT_EQUAL(std::string("US"), res->location);
CPPUNIT_ASSERT_EQUAL(100, res->priority);
CPPUNIT_ASSERT_EQUAL(1, res->maxConnections);
}
ctrl.newEntryTransaction();
ctrl.newResourceTransaction();
ctrl.cancelResourceTransaction();
ctrl.commitEntryTransaction();
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
auto m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)2, m->getEntries().size());
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getEntries()[0]->resources.size());
CPPUNIT_ASSERT_EQUAL((size_t)0, m->getEntries()[1]->resources.size());
auto& res = m->getEntries()[0]->resources[0];
CPPUNIT_ASSERT_EQUAL(std::string("http://mirror/aria2.tar.bz2"), res->url);
CPPUNIT_ASSERT_EQUAL(MetalinkResource::TYPE_HTTP, res->type);
CPPUNIT_ASSERT_EQUAL(std::string("US"), res->location);
CPPUNIT_ASSERT_EQUAL(100, res->priority);
CPPUNIT_ASSERT_EQUAL(1, res->maxConnections);
}
}
@ -132,22 +128,20 @@ void MetalinkParserControllerTest::testResourceTransaction_withBaseUri()
#endif // ENABLE_BITTORRENT
ctrl.commitEntryTransaction();
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
auto m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getEntries()[0]->resources.size());
std::shared_ptr<MetalinkResource> res = m->getEntries()[0]->resources[0];
auto& res = m->getEntries()[0]->resources[0];
CPPUNIT_ASSERT_EQUAL(std::string("http://base/dir/aria2.tar.bz2"),
res->url);
CPPUNIT_ASSERT_EQUAL(MetalinkResource::TYPE_HTTP, res->type);
#ifdef ENABLE_BITTORRENT
CPPUNIT_ASSERT_EQUAL((size_t)2, m->getEntries()[0]->metaurls.size());
std::shared_ptr<MetalinkMetaurl> metaurl = m->getEntries()[0]->metaurls[0];
CPPUNIT_ASSERT_EQUAL(std::string("http://base/meta/aria2.tar.bz2.torrent"),
metaurl->url);
m->getEntries()[0]->metaurls[0]->url);
metaurl = m->getEntries()[0]->metaurls[1];
CPPUNIT_ASSERT_EQUAL(std::string("magnet:?xt=urn:btih:248d0a1cd08284299de78d5c1ed359bb46717d8c"),
metaurl->url);
m->getEntries()[0]->metaurls[1]->url);
#endif // ENABLE_BITTORRENT
}
}
@ -163,30 +157,26 @@ void MetalinkParserControllerTest::testMetaurlTransaction()
ctrl.setNameOfMetaurl("mybirthdaycake");
ctrl.commitEntryTransaction();
#ifdef ENABLE_BITTORRENT
ctrl.newEntryTransaction();
ctrl.newMetaurlTransaction();
ctrl.cancelMetaurlTransaction();
ctrl.commitEntryTransaction();
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getEntries().size());
auto m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)2, m->getEntries().size());
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getEntries()[0]->metaurls.size());
std::shared_ptr<MetalinkMetaurl> metaurl = m->getEntries()[0]->metaurls[0];
CPPUNIT_ASSERT_EQUAL((size_t)0, m->getEntries()[1]->metaurls.size());
auto& metaurl = m->getEntries()[0]->metaurls[0];
CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/chocolate.torrent"),
metaurl->url);
CPPUNIT_ASSERT_EQUAL(std::string("torrent"), metaurl->mediatype);
CPPUNIT_ASSERT_EQUAL(std::string("mybirthdaycake"), metaurl->name);
CPPUNIT_ASSERT_EQUAL(999, metaurl->priority);
}
ctrl.newEntryTransaction();
ctrl.newMetaurlTransaction();
ctrl.cancelMetaurlTransaction();
ctrl.commitEntryTransaction();
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)2, ctrl.getResult()->getEntries().size());
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getEntries()[0]->metaurls.size());
CPPUNIT_ASSERT_EQUAL((size_t)0, m->getEntries()[1]->metaurls.size());
}
#else // !ENABLE_BITTORRENT
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
auto m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getEntries().size());
CPPUNIT_ASSERT_EQUAL((size_t)0, m->getEntries()[0]->metaurls.size());
}
@ -202,25 +192,28 @@ void MetalinkParserControllerTest::testChecksumTransaction()
ctrl.setTypeOfChecksum("md5");
ctrl.setHashOfChecksum("acbd18db4cc2f85cedef654fccc4a4d8");
ctrl.commitEntryTransaction();
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
std::shared_ptr<Checksum> md = m->getEntries().front()->checksum;
CPPUNIT_ASSERT_EQUAL(std::string("md5"), md->getHashType());
CPPUNIT_ASSERT_EQUAL(std::string("acbd18db4cc2f85cedef654fccc4a4d8"),
util::toHex(md->getDigest()));
}
ctrl.newEntryTransaction();
ctrl.newChecksumTransaction();
ctrl.setTypeOfChecksum("md5");
ctrl.setHashOfChecksum("badhash");
ctrl.commitEntryTransaction();
CPPUNIT_ASSERT(!ctrl.getResult()->getEntries()[1]->checksum);
ctrl.newEntryTransaction();
ctrl.newChecksumTransaction();
ctrl.cancelChecksumTransaction();
ctrl.commitEntryTransaction();
CPPUNIT_ASSERT(!ctrl.getResult()->getEntries()[2]->checksum);
{
auto m = ctrl.getResult();
auto& md = m->getEntries()[0]->checksum;
CPPUNIT_ASSERT_EQUAL(std::string("md5"), md->getHashType());
CPPUNIT_ASSERT_EQUAL(std::string("acbd18db4cc2f85cedef654fccc4a4d8"),
util::toHex(md->getDigest()));
CPPUNIT_ASSERT(!m->getEntries()[1]->checksum);
CPPUNIT_ASSERT(!m->getEntries()[2]->checksum);
}
}
void MetalinkParserControllerTest::testChunkChecksumTransaction()
@ -236,9 +229,21 @@ void MetalinkParserControllerTest::testChunkChecksumTransaction()
ctrl.addHashOfChunkChecksum(2, "2cbd18db4cc2f85cedef654fccc4a4d8");
ctrl.addHashOfChunkChecksum(5, "5cbd18db4cc2f85cedef654fccc4a4d8");
ctrl.commitEntryTransaction();
ctrl.newEntryTransaction();
ctrl.newChunkChecksumTransaction();
ctrl.setTypeOfChunkChecksum("md5");
ctrl.setLengthOfChunkChecksum(256*1024);
ctrl.addHashOfChunkChecksum(1, "badhash");
ctrl.commitEntryTransaction();
ctrl.newEntryTransaction();
ctrl.newChunkChecksumTransaction();
ctrl.cancelChunkChecksumTransaction();
ctrl.commitEntryTransaction();
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
std::shared_ptr<ChunkChecksum> md = m->getEntries().front()->chunkChecksum;
auto m = ctrl.getResult();
auto& md = m->getEntries()[0]->chunkChecksum;
CPPUNIT_ASSERT_EQUAL(std::string("md5"), md->getHashType());
CPPUNIT_ASSERT_EQUAL(256*1024, md->getPieceLength());
CPPUNIT_ASSERT_EQUAL((size_t)5, md->countPieceHash());
@ -252,20 +257,11 @@ void MetalinkParserControllerTest::testChunkChecksumTransaction()
md->getPieceHashes()[3]);
CPPUNIT_ASSERT_EQUAL(std::string("5cbd18db4cc2f85cedef654fccc4a4d8"),
md->getPieceHashes()[4]);
}
ctrl.newEntryTransaction();
ctrl.newChunkChecksumTransaction();
ctrl.setTypeOfChunkChecksum("md5");
ctrl.setLengthOfChunkChecksum(256*1024);
ctrl.addHashOfChunkChecksum(1, "badhash");
ctrl.commitEntryTransaction();
CPPUNIT_ASSERT(!ctrl.getResult()->getEntries()[1]->chunkChecksum);
ctrl.newEntryTransaction();
ctrl.newChunkChecksumTransaction();
ctrl.cancelChunkChecksumTransaction();
ctrl.commitEntryTransaction();
CPPUNIT_ASSERT(!ctrl.getResult()->getEntries()[2]->chunkChecksum);
CPPUNIT_ASSERT(!m->getEntries()[1]->chunkChecksum);
CPPUNIT_ASSERT(!m->getEntries()[2]->chunkChecksum);
}
}
void MetalinkParserControllerTest::testChunkChecksumTransactionV4()
@ -280,9 +276,22 @@ void MetalinkParserControllerTest::testChunkChecksumTransactionV4()
ctrl.addHashOfChunkChecksumV4("9413ee70957a09d55704123687478e07f18c7b29");
ctrl.addHashOfChunkChecksumV4("44213f9f4d59b557314fadcd233232eebcac8012");
ctrl.commitEntryTransaction();
ctrl.newEntryTransaction();
ctrl.newChunkChecksumTransactionV4();
ctrl.setTypeOfChunkChecksumV4("sha-1");
ctrl.setLengthOfChunkChecksumV4(256*1024);
ctrl.addHashOfChunkChecksumV4("5bd9f7248df0f3a6a86ab6c95f48787d546efa14");
ctrl.addHashOfChunkChecksumV4("badhash");
ctrl.commitEntryTransaction();
ctrl.newEntryTransaction();
ctrl.newChunkChecksumTransactionV4();
ctrl.cancelChunkChecksumTransactionV4();
ctrl.commitEntryTransaction();
{
std::shared_ptr<Metalinker> m = ctrl.getResult();
std::shared_ptr<ChunkChecksum> md = m->getEntries().front()->chunkChecksum;
auto m = ctrl.getResult();
auto& md = m->getEntries()[0]->chunkChecksum;
CPPUNIT_ASSERT_EQUAL(std::string("sha-1"), md->getHashType());
CPPUNIT_ASSERT_EQUAL(256*1024, md->getPieceLength());
CPPUNIT_ASSERT_EQUAL((size_t)3, md->countPieceHash());
@ -295,21 +304,11 @@ void MetalinkParserControllerTest::testChunkChecksumTransactionV4()
CPPUNIT_ASSERT_EQUAL
(std::string("44213f9f4d59b557314fadcd233232eebcac8012"),
util::toHex(md->getPieceHashes()[2]));
}
ctrl.newEntryTransaction();
ctrl.newChunkChecksumTransactionV4();
ctrl.setTypeOfChunkChecksumV4("sha-1");
ctrl.setLengthOfChunkChecksumV4(256*1024);
ctrl.addHashOfChunkChecksumV4("5bd9f7248df0f3a6a86ab6c95f48787d546efa14");
ctrl.addHashOfChunkChecksumV4("badhash");
ctrl.commitEntryTransaction();
CPPUNIT_ASSERT(!ctrl.getResult()->getEntries()[1]->chunkChecksum);
ctrl.newEntryTransaction();
ctrl.newChunkChecksumTransactionV4();
ctrl.cancelChunkChecksumTransactionV4();
ctrl.commitEntryTransaction();
CPPUNIT_ASSERT(!ctrl.getResult()->getEntries()[2]->chunkChecksum);
CPPUNIT_ASSERT(!m->getEntries()[1]->chunkChecksum);
CPPUNIT_ASSERT(!m->getEntries()[2]->chunkChecksum);
}
}
#endif // ENABLE_MESSAGE_DIGEST
@ -334,19 +333,20 @@ void MetalinkParserControllerTest::testSignatureTransaction()
// commitEntryTransaction also commits signature transaction.
ctrl.commitEntryTransaction();
std::shared_ptr<Metalinker> m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)1, m->getEntries().size());
std::shared_ptr<Signature> sig = m->getEntries().front()->getSignature();
CPPUNIT_ASSERT_EQUAL(std::string("pgp"), sig->getType());
CPPUNIT_ASSERT_EQUAL(std::string("aria2.sig"), sig->getFile());
CPPUNIT_ASSERT_EQUAL(pgpSignature, sig->getBody());
// See when signature transaction is canceled:
ctrl.newEntryTransaction();
ctrl.newSignatureTransaction();
ctrl.cancelSignatureTransaction();
ctrl.commitEntryTransaction();
CPPUNIT_ASSERT(!ctrl.getResult()->getEntries()[1]->getSignature());
auto m = ctrl.getResult();
CPPUNIT_ASSERT_EQUAL((size_t)2, m->getEntries().size());
auto& sig = m->getEntries()[0]->getSignature();
CPPUNIT_ASSERT_EQUAL(std::string("pgp"), sig->getType());
CPPUNIT_ASSERT_EQUAL(std::string("aria2.sig"), sig->getFile());
CPPUNIT_ASSERT_EQUAL(pgpSignature, sig->getBody());
CPPUNIT_ASSERT(!m->getEntries()[1]->getSignature());
}
} // namespace aria2