mirror of https://github.com/aria2/aria2
178 lines
7.2 KiB
C++
178 lines
7.2 KiB
C++
#include "DefaultBtAnnounce.h"
|
|
#include "DefaultBtContext.h"
|
|
#include "Option.h"
|
|
#include "Util.h"
|
|
#include "Exception.h"
|
|
#include "MockBtContext.h"
|
|
#include "MockPieceStorage.h"
|
|
#include "MockPeerStorage.h"
|
|
#include "BtRuntime.h"
|
|
#include "AnnounceTier.h"
|
|
#include "FixedNumberRandomizer.h"
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
using namespace std;
|
|
|
|
class DefaultBtAnnounceTest:public CppUnit::TestFixture {
|
|
|
|
CPPUNIT_TEST_SUITE(DefaultBtAnnounceTest);
|
|
CPPUNIT_TEST(testIsDefaultAnnounceReady);
|
|
CPPUNIT_TEST(testGetAnnounceUrl);
|
|
CPPUNIT_TEST(testNoMoreAnnounce);
|
|
CPPUNIT_TEST_SUITE_END();
|
|
private:
|
|
MockBtContextHandle _btContext;
|
|
MockPieceStorageHandle _pieceStorage;
|
|
MockPeerStorageHandle _peerStorage;
|
|
BtRuntimeHandle _btRuntime;
|
|
Option* _option;
|
|
public:
|
|
DefaultBtAnnounceTest():_btContext(0),
|
|
_pieceStorage(0),
|
|
_peerStorage(0),
|
|
_btRuntime(0) {}
|
|
|
|
void setUp() {
|
|
_option = new Option();
|
|
|
|
int64_t totalLength = 4*1024*1024;
|
|
int32_t pieceLength = 256*1024;
|
|
|
|
static const unsigned char infoHash[] = { 0x01, 0x23, 0x45, 0x67,
|
|
0x89, 0xab, 0xcd, 0xef,
|
|
0x01, 0x23, 0x45, 0x67,
|
|
0x89, 0xab, 0xcd, 0xef,
|
|
0x01, 0x23, 0x45, 0x67 };
|
|
|
|
string peerId = "-aria2-ultrafastdltl";
|
|
|
|
_btContext = new MockBtContext();
|
|
_btContext->setInfoHash(infoHash);
|
|
_btContext->setTotalLength(totalLength);
|
|
_btContext->setPieceLength(pieceLength);
|
|
_btContext->setPeerId((const unsigned char*)peerId.c_str());
|
|
|
|
_pieceStorage = new MockPieceStorage();
|
|
_pieceStorage->setTotalLength(totalLength);
|
|
_pieceStorage->setCompletedLength(pieceLength*10);
|
|
|
|
_peerStorage = new MockPeerStorage();
|
|
TransferStat stat;
|
|
stat.setSessionDownloadLength(pieceLength*5);
|
|
stat.setSessionUploadLength(pieceLength*6);
|
|
_peerStorage->setStat(stat);
|
|
|
|
_btRuntime = new BtRuntime();
|
|
_btRuntime->setListenPort(6989);
|
|
}
|
|
|
|
void tearDown()
|
|
{
|
|
delete _option;
|
|
}
|
|
|
|
void testIsDefaultAnnounceReady();
|
|
void testGetAnnounceUrl();
|
|
void testNoMoreAnnounce();
|
|
};
|
|
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION(DefaultBtAnnounceTest);
|
|
|
|
void DefaultBtAnnounceTest::testIsDefaultAnnounceReady() {
|
|
DefaultBtAnnounce btAnnounce(_btContext, _option);
|
|
|
|
CPPUNIT_ASSERT(btAnnounce.isDefaultAnnounceReady());
|
|
}
|
|
|
|
void DefaultBtAnnounceTest::testNoMoreAnnounce()
|
|
{
|
|
string trackerURI1 = "http://localhost/announce";
|
|
Strings uris1;
|
|
uris1.push_back(trackerURI1);
|
|
AnnounceTierHandle announceTier1 = new AnnounceTier(uris1);
|
|
|
|
string trackerURI2 = "http://backup/announce";
|
|
Strings uris2;
|
|
uris2.push_back(trackerURI2);
|
|
AnnounceTierHandle announceTier2 = new AnnounceTier(uris2);
|
|
|
|
|
|
_btContext->addAnnounceTier(announceTier1);
|
|
_btContext->addAnnounceTier(announceTier2);
|
|
|
|
DefaultBtAnnounce btAnnounce(_btContext, _option);
|
|
btAnnounce.setPieceStorage(_pieceStorage);
|
|
btAnnounce.setPeerStorage(_peerStorage);
|
|
btAnnounce.setBtRuntime(_btRuntime);
|
|
btAnnounce.setRandomizer(new FixedNumberRandomizer());
|
|
btAnnounce.generateKey();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost/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();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost/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"), btAnnounce.getAnnounceUrl());
|
|
|
|
btAnnounce.announceFailure();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(string("http://backup/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://localhost/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();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(string("http://backup/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();
|
|
|
|
_btRuntime->setHalt(true);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost/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();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(string("http://backup/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::testGetAnnounceUrl()
|
|
{
|
|
string trackerURI = "http://localhost/announce";
|
|
Strings uris;
|
|
uris.push_back(trackerURI);
|
|
AnnounceTierHandle announceTier = new AnnounceTier(uris);
|
|
|
|
_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://localhost/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();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost/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"), btAnnounce.getAnnounceUrl());
|
|
|
|
btAnnounce.announceSuccess();
|
|
|
|
_pieceStorage->setAllDownloadFinished(true);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost/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();
|
|
|
|
_btRuntime->setHalt(true);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(string("http://localhost/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());
|
|
}
|