mirror of https://github.com/aria2/aria2
2007-12-10 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug: only first announce URL is tried in AnnounceTier, in stopped and completed event. * src/AnnounceList.{h, cc} * test/AnnounceListTest.cc * src/DefaultBtAnnounce.cc * test/DefaultBtAnnounceTest.cc Sorted URLs. * test/Metalink2RequestGroupTest.ccpull/1/head
parent
b1695a65c0
commit
b482568d59
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2007-12-10 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Fixed the bug: only first announce URL is tried in AnnounceTier,
|
||||||
|
in stopped and completed event.
|
||||||
|
* src/AnnounceList.{h, cc}
|
||||||
|
* test/AnnounceListTest.cc
|
||||||
|
* src/DefaultBtAnnounce.cc
|
||||||
|
* test/DefaultBtAnnounceTest.cc
|
||||||
|
|
||||||
|
Sorted URLs.
|
||||||
|
* test/Metalink2RequestGroupTest.cc
|
||||||
|
|
||||||
2007-12-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2007-12-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Removed unnecessary string copy. Updated doc and corrected indentation.
|
Removed unnecessary string copy. Updated doc and corrected indentation.
|
||||||
|
|
|
@ -237,3 +237,21 @@ void AnnounceList::resetTier()
|
||||||
{
|
{
|
||||||
resetIterator();
|
resetIterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AnnounceList::currentTierAcceptsStoppedEvent() const
|
||||||
|
{
|
||||||
|
if(currentTrackerInitialized) {
|
||||||
|
return FindStoppedAllowedTier()(*currentTier);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AnnounceList::currentTierAcceptsCompletedEvent() const
|
||||||
|
{
|
||||||
|
if(currentTrackerInitialized) {
|
||||||
|
return FindCompletedAllowedTier()(*currentTier);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -119,6 +119,10 @@ public:
|
||||||
bool allTiersFailed() const;
|
bool allTiersFailed() const;
|
||||||
|
|
||||||
void resetTier();
|
void resetTier();
|
||||||
|
|
||||||
|
bool currentTierAcceptsStoppedEvent() const;
|
||||||
|
|
||||||
|
bool currentTierAcceptsCompletedEvent() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _D_ANNOUNCE_LIST_H_
|
#endif // _D_ANNOUNCE_LIST_H_
|
||||||
|
|
|
@ -100,10 +100,14 @@ bool DefaultBtAnnounce::isAnnounceReady() {
|
||||||
|
|
||||||
string DefaultBtAnnounce::getAnnounceUrl() {
|
string DefaultBtAnnounce::getAnnounceUrl() {
|
||||||
if(isStoppedAnnounceReady()) {
|
if(isStoppedAnnounceReady()) {
|
||||||
|
if(!announceList.currentTierAcceptsStoppedEvent()) {
|
||||||
announceList.moveToStoppedAllowedTier();
|
announceList.moveToStoppedAllowedTier();
|
||||||
|
}
|
||||||
announceList.setEvent(AnnounceTier::STOPPED);
|
announceList.setEvent(AnnounceTier::STOPPED);
|
||||||
} else if(isCompletedAnnounceReady()) {
|
} else if(isCompletedAnnounceReady()) {
|
||||||
|
if(!announceList.currentTierAcceptsCompletedEvent()) {
|
||||||
announceList.moveToCompletedAllowedTier();
|
announceList.moveToCompletedAllowedTier();
|
||||||
|
}
|
||||||
announceList.setEvent(AnnounceTier::COMPLETED);
|
announceList.setEvent(AnnounceTier::COMPLETED);
|
||||||
} else if(isDefaultAnnounceReady()) {
|
} else if(isDefaultAnnounceReady()) {
|
||||||
// If download completed before "started" event is sent to a tracker,
|
// If download completed before "started" event is sent to a tracker,
|
||||||
|
|
|
@ -270,10 +270,13 @@ void AnnounceListTest::testMoveToStoppedAllowedTier() {
|
||||||
|
|
||||||
AnnounceList announceList(tiers);
|
AnnounceList announceList(tiers);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT(!announceList.currentTierAcceptsStoppedEvent());
|
||||||
CPPUNIT_ASSERT_EQUAL(string("tracker1"), announceList.getAnnounce());
|
CPPUNIT_ASSERT_EQUAL(string("tracker1"), announceList.getAnnounce());
|
||||||
announceList.moveToStoppedAllowedTier();
|
announceList.moveToStoppedAllowedTier();
|
||||||
|
CPPUNIT_ASSERT(announceList.currentTierAcceptsStoppedEvent());
|
||||||
CPPUNIT_ASSERT_EQUAL(string("tracker2"), announceList.getAnnounce());
|
CPPUNIT_ASSERT_EQUAL(string("tracker2"), announceList.getAnnounce());
|
||||||
announceList.announceFailure();
|
announceList.announceFailure();
|
||||||
|
CPPUNIT_ASSERT(!announceList.currentTierAcceptsStoppedEvent());
|
||||||
CPPUNIT_ASSERT_EQUAL(string("tracker3"), announceList.getAnnounce());
|
CPPUNIT_ASSERT_EQUAL(string("tracker3"), announceList.getAnnounce());
|
||||||
// test wrapped search
|
// test wrapped search
|
||||||
announceList.moveToStoppedAllowedTier();
|
announceList.moveToStoppedAllowedTier();
|
||||||
|
@ -293,10 +296,13 @@ void AnnounceListTest::testMoveToCompletedAllowedTier() {
|
||||||
|
|
||||||
AnnounceList announceList(tiers);
|
AnnounceList announceList(tiers);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT(!announceList.currentTierAcceptsCompletedEvent());
|
||||||
CPPUNIT_ASSERT_EQUAL(string("tracker1"), announceList.getAnnounce());
|
CPPUNIT_ASSERT_EQUAL(string("tracker1"), announceList.getAnnounce());
|
||||||
announceList.moveToStoppedAllowedTier();
|
announceList.moveToStoppedAllowedTier();
|
||||||
|
CPPUNIT_ASSERT(announceList.currentTierAcceptsCompletedEvent());
|
||||||
CPPUNIT_ASSERT_EQUAL(string("tracker2"), announceList.getAnnounce());
|
CPPUNIT_ASSERT_EQUAL(string("tracker2"), announceList.getAnnounce());
|
||||||
announceList.announceFailure();
|
announceList.announceFailure();
|
||||||
|
CPPUNIT_ASSERT(!announceList.currentTierAcceptsCompletedEvent());
|
||||||
CPPUNIT_ASSERT_EQUAL(string("tracker3"), announceList.getAnnounce());
|
CPPUNIT_ASSERT_EQUAL(string("tracker3"), announceList.getAnnounce());
|
||||||
// test wrapped search
|
// test wrapped search
|
||||||
announceList.moveToStoppedAllowedTier();
|
announceList.moveToStoppedAllowedTier();
|
||||||
|
|
|
@ -19,6 +19,8 @@ class DefaultBtAnnounceTest:public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(testGetAnnounceUrl);
|
CPPUNIT_TEST(testGetAnnounceUrl);
|
||||||
CPPUNIT_TEST(testNoMoreAnnounce);
|
CPPUNIT_TEST(testNoMoreAnnounce);
|
||||||
CPPUNIT_TEST(testIsAllAnnounceFailed);
|
CPPUNIT_TEST(testIsAllAnnounceFailed);
|
||||||
|
CPPUNIT_TEST(testURLOrderInStoppedEvent);
|
||||||
|
CPPUNIT_TEST(testURLOrderInCompletedEvent);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
private:
|
private:
|
||||||
MockBtContextHandle _btContext;
|
MockBtContextHandle _btContext;
|
||||||
|
@ -74,6 +76,8 @@ public:
|
||||||
void testGetAnnounceUrl();
|
void testGetAnnounceUrl();
|
||||||
void testNoMoreAnnounce();
|
void testNoMoreAnnounce();
|
||||||
void testIsAllAnnounceFailed();
|
void testIsAllAnnounceFailed();
|
||||||
|
void testURLOrderInStoppedEvent();
|
||||||
|
void testURLOrderInCompletedEvent();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -211,3 +215,63 @@ void DefaultBtAnnounceTest::testIsAllAnnounceFailed()
|
||||||
|
|
||||||
CPPUNIT_ASSERT(!btAnnounce.isAllAnnounceFailed());
|
CPPUNIT_ASSERT(!btAnnounce.isAllAnnounceFailed());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DefaultBtAnnounceTest::testURLOrderInStoppedEvent()
|
||||||
|
{
|
||||||
|
const char* urls[] = { "http://localhost1/announce",
|
||||||
|
"http://localhost2/announce" };
|
||||||
|
AnnounceTierHandle announceTier = new AnnounceTier(Strings(&urls[0], &urls[2]));
|
||||||
|
|
||||||
|
_btContext->addAnnounceTier(announceTier);
|
||||||
|
|
||||||
|
DefaultBtAnnounce btAnnounce(_btContext, _option);
|
||||||
|
btAnnounce.setPieceStorage(_pieceStorage);
|
||||||
|
btAnnounce.setPeerStorage(_peerStorage);
|
||||||
|
btAnnounce.setBtRuntime(_btRuntime);
|
||||||
|
btAnnounce.setRandomizer(new FixedNumberRandomizer());
|
||||||
|
btAnnounce.generateKey();
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost1/announce?info_hash=%01%23Eg%89%ab%cd%ef%01%23Eg%89%ab%cd%ef%01%23Eg&peer_id=%2daria2%2dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=AAAAAAAA&numwant=50&no_peer_id=1&port=6989&event=started"), btAnnounce.getAnnounceUrl());
|
||||||
|
|
||||||
|
btAnnounce.announceSuccess();
|
||||||
|
|
||||||
|
_btRuntime->setHalt(true);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost1/announce?info_hash=%01%23Eg%89%ab%cd%ef%01%23Eg%89%ab%cd%ef%01%23Eg&peer_id=%2daria2%2dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=AAAAAAAA&numwant=0&no_peer_id=1&port=6989&event=stopped"), btAnnounce.getAnnounceUrl());
|
||||||
|
|
||||||
|
btAnnounce.announceFailure();
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost2/announce?info_hash=%01%23Eg%89%ab%cd%ef%01%23Eg%89%ab%cd%ef%01%23Eg&peer_id=%2daria2%2dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=AAAAAAAA&numwant=0&no_peer_id=1&port=6989&event=stopped"), btAnnounce.getAnnounceUrl());
|
||||||
|
|
||||||
|
btAnnounce.announceSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DefaultBtAnnounceTest::testURLOrderInCompletedEvent()
|
||||||
|
{
|
||||||
|
const char* urls[] = { "http://localhost1/announce",
|
||||||
|
"http://localhost2/announce" };
|
||||||
|
AnnounceTierHandle announceTier = new AnnounceTier(Strings(&urls[0], &urls[2]));
|
||||||
|
|
||||||
|
_btContext->addAnnounceTier(announceTier);
|
||||||
|
|
||||||
|
DefaultBtAnnounce btAnnounce(_btContext, _option);
|
||||||
|
btAnnounce.setPieceStorage(_pieceStorage);
|
||||||
|
btAnnounce.setPeerStorage(_peerStorage);
|
||||||
|
btAnnounce.setBtRuntime(_btRuntime);
|
||||||
|
btAnnounce.setRandomizer(new FixedNumberRandomizer());
|
||||||
|
btAnnounce.generateKey();
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost1/announce?info_hash=%01%23Eg%89%ab%cd%ef%01%23Eg%89%ab%cd%ef%01%23Eg&peer_id=%2daria2%2dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=AAAAAAAA&numwant=50&no_peer_id=1&port=6989&event=started"), btAnnounce.getAnnounceUrl());
|
||||||
|
|
||||||
|
btAnnounce.announceSuccess();
|
||||||
|
|
||||||
|
_pieceStorage->setAllDownloadFinished(true);
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost1/announce?info_hash=%01%23Eg%89%ab%cd%ef%01%23Eg%89%ab%cd%ef%01%23Eg&peer_id=%2daria2%2dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=AAAAAAAA&numwant=50&no_peer_id=1&port=6989&event=completed"), btAnnounce.getAnnounceUrl());
|
||||||
|
|
||||||
|
btAnnounce.announceFailure();
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost2/announce?info_hash=%01%23Eg%89%ab%cd%ef%01%23Eg%89%ab%cd%ef%01%23Eg&peer_id=%2daria2%2dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=AAAAAAAA&numwant=50&no_peer_id=1&port=6989&event=completed"), btAnnounce.getAnnounceUrl());
|
||||||
|
|
||||||
|
btAnnounce.announceSuccess();
|
||||||
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ void Metalink2RequestGroupTest::testGenerate()
|
||||||
{
|
{
|
||||||
RequestGroupHandle rg = groups[0];
|
RequestGroupHandle rg = groups[0];
|
||||||
Strings uris = rg->getUris();
|
Strings uris = rg->getUris();
|
||||||
|
sort(uris.begin(), uris.end());
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
|
CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
|
||||||
CPPUNIT_ASSERT_EQUAL(string("ftp://ftphost/aria2-0.5.2.tar.bz2"), uris[0]);
|
CPPUNIT_ASSERT_EQUAL(string("ftp://ftphost/aria2-0.5.2.tar.bz2"), uris[0]);
|
||||||
CPPUNIT_ASSERT_EQUAL(string("http://httphost/aria2-0.5.2.tar.bz2"), uris[1]);
|
CPPUNIT_ASSERT_EQUAL(string("http://httphost/aria2-0.5.2.tar.bz2"), uris[1]);
|
||||||
|
|
Loading…
Reference in New Issue