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
pull/1/head
Tatsuhiro Tsujikawa 2007-12-09 15:54:54 +00:00
parent b1695a65c0
commit b482568d59
7 changed files with 111 additions and 2 deletions

View File

@ -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>
Removed unnecessary string copy. Updated doc and corrected indentation.

View File

@ -237,3 +237,21 @@ void AnnounceList::resetTier()
{
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;
}
}

View File

@ -119,6 +119,10 @@ public:
bool allTiersFailed() const;
void resetTier();
bool currentTierAcceptsStoppedEvent() const;
bool currentTierAcceptsCompletedEvent() const;
};
#endif // _D_ANNOUNCE_LIST_H_

View File

@ -100,10 +100,14 @@ bool DefaultBtAnnounce::isAnnounceReady() {
string DefaultBtAnnounce::getAnnounceUrl() {
if(isStoppedAnnounceReady()) {
announceList.moveToStoppedAllowedTier();
if(!announceList.currentTierAcceptsStoppedEvent()) {
announceList.moveToStoppedAllowedTier();
}
announceList.setEvent(AnnounceTier::STOPPED);
} else if(isCompletedAnnounceReady()) {
announceList.moveToCompletedAllowedTier();
if(!announceList.currentTierAcceptsCompletedEvent()) {
announceList.moveToCompletedAllowedTier();
}
announceList.setEvent(AnnounceTier::COMPLETED);
} else if(isDefaultAnnounceReady()) {
// If download completed before "started" event is sent to a tracker,

View File

@ -270,10 +270,13 @@ void AnnounceListTest::testMoveToStoppedAllowedTier() {
AnnounceList announceList(tiers);
CPPUNIT_ASSERT(!announceList.currentTierAcceptsStoppedEvent());
CPPUNIT_ASSERT_EQUAL(string("tracker1"), announceList.getAnnounce());
announceList.moveToStoppedAllowedTier();
CPPUNIT_ASSERT(announceList.currentTierAcceptsStoppedEvent());
CPPUNIT_ASSERT_EQUAL(string("tracker2"), announceList.getAnnounce());
announceList.announceFailure();
CPPUNIT_ASSERT(!announceList.currentTierAcceptsStoppedEvent());
CPPUNIT_ASSERT_EQUAL(string("tracker3"), announceList.getAnnounce());
// test wrapped search
announceList.moveToStoppedAllowedTier();
@ -293,10 +296,13 @@ void AnnounceListTest::testMoveToCompletedAllowedTier() {
AnnounceList announceList(tiers);
CPPUNIT_ASSERT(!announceList.currentTierAcceptsCompletedEvent());
CPPUNIT_ASSERT_EQUAL(string("tracker1"), announceList.getAnnounce());
announceList.moveToStoppedAllowedTier();
CPPUNIT_ASSERT(announceList.currentTierAcceptsCompletedEvent());
CPPUNIT_ASSERT_EQUAL(string("tracker2"), announceList.getAnnounce());
announceList.announceFailure();
CPPUNIT_ASSERT(!announceList.currentTierAcceptsCompletedEvent());
CPPUNIT_ASSERT_EQUAL(string("tracker3"), announceList.getAnnounce());
// test wrapped search
announceList.moveToStoppedAllowedTier();

View File

@ -19,6 +19,8 @@ class DefaultBtAnnounceTest:public CppUnit::TestFixture {
CPPUNIT_TEST(testGetAnnounceUrl);
CPPUNIT_TEST(testNoMoreAnnounce);
CPPUNIT_TEST(testIsAllAnnounceFailed);
CPPUNIT_TEST(testURLOrderInStoppedEvent);
CPPUNIT_TEST(testURLOrderInCompletedEvent);
CPPUNIT_TEST_SUITE_END();
private:
MockBtContextHandle _btContext;
@ -74,6 +76,8 @@ public:
void testGetAnnounceUrl();
void testNoMoreAnnounce();
void testIsAllAnnounceFailed();
void testURLOrderInStoppedEvent();
void testURLOrderInCompletedEvent();
};
@ -211,3 +215,63 @@ void DefaultBtAnnounceTest::testIsAllAnnounceFailed()
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();
}

View File

@ -33,6 +33,7 @@ void Metalink2RequestGroupTest::testGenerate()
{
RequestGroupHandle rg = groups[0];
Strings uris = rg->getUris();
sort(uris.begin(), uris.end());
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("http://httphost/aria2-0.5.2.tar.bz2"), uris[1]);