2007-03-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

To add the command-line option which disables netrc support:
	* src/OptionHandlerFactory.cc
	(createOptionHandlers): Added PREF_NO_NETRC.
	* src/main.cc: Added -n option.
	* src/prefs.h (PREF_NO_NETRC): New definition.
	* src/RequestFactory.cc: Do not use netrc in ftp if 
PREF_NO_NETRC is
	V_TRUE.
	Note that netrc is not used in http, http proxy even if 
PREF_NO_NETRC
	is V_FALSE. This may get configurable in the future release.
	
	To clear peer's error status by time basis:
	* src/PeerAbstractCommand.cc
	(onAbort): Call Peer::startBadCondition().
	* src/Peer.h, src/Peer.cc
	(error): Removed.
	(_badConditionStartTime): New variable.
	(_badConditionInterval): New variable. Initialized to 10 
seconds.
	(startBadCondition): New function.
	(isGood): New function.
	* src/DefaultPeerStorage.cc
	(addPeer): Use Peer::isGood().
	(FindFinePeer): Use Peer::isGood().

	Always include port number in http request header:
	* src/HttpRequest.cc (getHostText): Always include port number 
in
	http request header.
pull/1/head
Tatsuhiro Tsujikawa 2007-03-27 16:16:44 +00:00
parent 9b73454b07
commit 6e6ba30c60
21 changed files with 434 additions and 212 deletions

View File

@ -1,3 +1,32 @@
2007-03-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add the command-line option which disables netrc support:
* src/OptionHandlerFactory.cc
(createOptionHandlers): Added PREF_NO_NETRC.
* src/main.cc: Added -n option.
* src/prefs.h (PREF_NO_NETRC): New definition.
* src/RequestFactory.cc: Do not use netrc in ftp if PREF_NO_NETRC is
V_TRUE.
Note that netrc is not used in http, http proxy even if PREF_NO_NETRC
is V_FALSE. This may get configurable in the future release.
To clear peer's error status by time basis:
* src/PeerAbstractCommand.cc
(onAbort): Call Peer::startBadCondition().
* src/Peer.h, src/Peer.cc
(error): Removed.
(_badConditionStartTime): New variable.
(_badConditionInterval): New variable. Initialized to 10 seconds.
(startBadCondition): New function.
(isGood): New function.
* src/DefaultPeerStorage.cc
(addPeer): Use Peer::isGood().
(FindFinePeer): Use Peer::isGood().
Always include port number in http request header:
* src/HttpRequest.cc (getHostText): Always include port number in
http request header.
2007-03-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To the ability to read options from a config file:
@ -30,6 +59,9 @@
* src/prefs.h (PREF_USER_AGENT): New definition.
* src/HttpRequestCommand.cc (executeInternal): Set user-agent option
parameter to HttpRequest object.
* src/AbstractProxyRequestCommand.cc
(executeInternal): Set user-agent option parameter to HttpRequest
object.
Marged the patches from Dan Fandrich.

View File

@ -34,6 +34,7 @@
/* copyright --> */
#include "AbstractProxyRequestCommand.h"
#include "HttpConnection.h"
#include "prefs.h"
AbstractProxyRequestCommand::AbstractProxyRequestCommand(int cuid,
const RequestHandle& req,
@ -50,6 +51,7 @@ bool AbstractProxyRequestCommand::executeInternal() {
socket->setBlockingMode();
HttpRequestHandle httpRequest = new HttpRequest();
httpRequest->setUserAgent(e->option->get(PREF_USER_AGENT));
httpRequest->setRequest(req);
httpRequest->configure(e->option);

View File

@ -60,7 +60,7 @@ bool DefaultPeerStorage::addPeer(const PeerHandle& peer) {
return true;
} else {
const PeerHandle& peer = *itr;
if(peer->error >= MAX_PEER_ERROR || peer->cuid != 0) {
if(!peer->isGood() || peer->cuid != 0) {
return false;
} else {
*itr = peer;
@ -87,7 +87,7 @@ const Peers& DefaultPeerStorage::getPeers() {
class FindFinePeer {
public:
bool operator()(const PeerHandle& peer) const {
return peer->cuid == 0 && peer->error < MAX_PEER_ERROR;
return peer->cuid == 0 && peer->isGood();
}
};

View File

@ -65,7 +65,7 @@ bool HttpRequest::isRangeSatisfied(const RangeHandle& range) const
string HttpRequest::getHostText(const string& host, in_port_t port) const
{
return host+(port == 80 || port == 443 ? "" : ":"+Util::itos(port));
return host+":"+Util::itos(port);
}
string HttpRequest::createRequest() const

View File

@ -52,6 +52,12 @@ public:
{
_netrc = netrc;
}
NetrcHandle getNetrc() const
{
return _netrc;
}
};
typedef SharedHandle<NetrcAuthResolver> NetrcAuthResolverHandle;

View File

@ -89,6 +89,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
V_NONE, V_PREALLOC));
handlers.push_back(new BooleanOptionHandler(PREF_CONTINUE));
handlers.push_back(new DefaultOptionHandler(PREF_USER_AGENT));
handlers.push_back(new BooleanOptionHandler(PREF_NO_NETRC));
return handlers;
}

View File

@ -39,11 +39,12 @@
Peer::Peer(string ipaddr, int port, int pieceLength, long long int totalLength):
ipaddr(ipaddr),
port(port),
error(0),
sessionUploadLength(0),
sessionDownloadLength(0),
pieceLength(pieceLength),
active(false)
active(false),
_badConditionStartTime(0),
_badConditionInterval(10)
{
resetStatus();
this->bitfield = BitfieldManFactory::getFactoryInstance()->
@ -143,3 +144,13 @@ void Peer::setAllBitfield() {
void Peer::updateLatency(int latency) {
this->latency = (this->latency*20+latency*80)/200;
}
void Peer::startBadCondition()
{
_badConditionStartTime.reset();
}
bool Peer::isGood() const
{
return _badConditionStartTime.elapsed(_badConditionInterval);
}

View File

@ -39,6 +39,7 @@
#include "BitfieldMan.h"
#include "SharedHandle.h"
#include "PeerStat.h"
#include "TimeA2.h"
#include <string.h>
#include <string>
@ -58,7 +59,6 @@ public:
bool peerChoking;
bool peerInterested;
int tryCount;
int error;
int cuid;
bool chokingRequired;
bool optUnchoking;
@ -80,6 +80,8 @@ private:
int latency;
bool active;
string id;
Time _badConditionStartTime;
int _badConditionInterval;
public:
Peer(string ipaddr, int port, int pieceLength, long long int totalLength);
@ -196,6 +198,10 @@ public:
const string& getId() const {
return id;
}
void startBadCondition();
bool isGood() const;
};
typedef SharedHandle<Peer> PeerHandle;

View File

@ -97,11 +97,7 @@ bool PeerAbstractCommand::prepareForRetry(int wait) {
}
void PeerAbstractCommand::onAbort(RecoverableException* ex) {
if(peer->isSeeder()) {
peer->error++;
} else {
peer->error += MAX_PEER_ERROR;
}
peer->startBadCondition();
peer->resetStatus();
}

View File

@ -34,7 +34,9 @@
/* copyright --> */
#include "RequestFactory.h"
#include "prefs.h"
#include "AbstractAuthResolver.h"
#include "NetrcAuthResolver.h"
#include "DefaultAuthResolver.h"
RequestHandle RequestFactory::createRequest()
{
@ -58,29 +60,43 @@ AuthConfigHandle RequestFactory::createAuthConfig(const string& user, const stri
AuthResolverHandle RequestFactory::createHttpAuthResolver()
{
NetrcAuthResolverHandle authResolver = 0;
authResolver = new NetrcAuthResolver();
authResolver->setNetrc(_netrc);
authResolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_HTTP_USER), _option->get(PREF_HTTP_PASSWD)));
return authResolver;
AbstractAuthResolverHandle resolver = 0;
if(true || _option->getAsBool(PREF_NO_NETRC)) {
resolver = new DefaultAuthResolver();
} else {
NetrcAuthResolverHandle authResolver = new NetrcAuthResolver();
authResolver->setNetrc(_netrc);
resolver = authResolver;
}
resolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_HTTP_USER), _option->get(PREF_HTTP_PASSWD)));
return resolver;
}
AuthResolverHandle RequestFactory::createFtpAuthResolver()
{
NetrcAuthResolverHandle authResolver = 0;
authResolver = new NetrcAuthResolver();
authResolver->setNetrc(_netrc);
authResolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_FTP_USER), _option->get(PREF_FTP_PASSWD)));
authResolver->setDefaultAuthConfig(new AuthConfig("anonymous",
"ARIA2USER@"));
return authResolver;
AbstractAuthResolverHandle resolver = 0;
if(_option->getAsBool(PREF_NO_NETRC)) {
resolver = new DefaultAuthResolver();
} else {
NetrcAuthResolverHandle authResolver = new NetrcAuthResolver();
authResolver->setNetrc(_netrc);
resolver = authResolver;
}
resolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_FTP_USER), _option->get(PREF_FTP_PASSWD)));
resolver->setDefaultAuthConfig(new AuthConfig("anonymous", "ARIA2USER@"));
return resolver;
}
AuthResolverHandle RequestFactory::createHttpProxyAuthResolver()
{
NetrcAuthResolverHandle authResolver = 0;
authResolver = new NetrcAuthResolver();
authResolver->setNetrc(_netrc);
authResolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_HTTP_PROXY_USER), _option->get(PREF_HTTP_PROXY_PASSWD)));
return authResolver;
AbstractAuthResolverHandle resolver = 0;
if(true || _option->getAsBool(PREF_NO_NETRC)) {
resolver = new DefaultAuthResolver();
} else {
NetrcAuthResolverHandle authResolver = new NetrcAuthResolver();
authResolver->setNetrc(_netrc);
resolver = authResolver;
}
resolver->setUserDefinedAuthConfig(createAuthConfig(_option->get(PREF_HTTP_PROXY_USER), _option->get(PREF_HTTP_PROXY_PASSWD)));
return resolver;
}

View File

@ -43,6 +43,10 @@ Time::Time(const Time& time) {
tv = time.tv;
}
Time::Time(int sec) {
setTimeInSec(sec);
}
Time::~Time() {}
void Time::reset() {

View File

@ -48,6 +48,7 @@ public:
// this object was created.
Time();
Time(const Time& time);
Time(int sec);
Time& operator=(const Time& time) {
if(this != &time) {

View File

@ -189,9 +189,9 @@ RequestInfos UrlRequestInfo::execute() {
SharedHandle<ConsoleDownloadEngine> e(DownloadEngineFactory::newConsoleEngine(op, requests, reserved));
e->segmentMan->filename = hr->filename;
e->segmentMan->totalSize = hr->totalLength;
if(hr->totalLength > 0) {
e->segmentMan->filename = hr->filename;
e->segmentMan->totalSize = hr->totalLength;
e->segmentMan->downloadStarted = true;
}

View File

@ -202,6 +202,7 @@ void showUsage() {
" Currently this option is applicable to http(s)/\n"
" ftp downloads.") << endl;
cout << _(" -U, --user-agent=USER_AGENT Set user agent for http(s) downloads.") << endl;
cout << _(" -n, --no-netrc Disables netrc support.") << endl;
#ifdef ENABLE_BITTORRENT
cout << _(" -T, --torrent-file=TORRENT_FILE The file path to .torrent file.") << endl;
cout << _(" --follow-torrent=true|false Setting this option to false prevents aria2 to\n"
@ -352,6 +353,7 @@ int main(int argc, char* argv[]) {
op->put(PREF_NETRC_PATH, Util::getHomeDir()+"/.netrc");
op->put(PREF_CONTINUE, V_FALSE);
op->put(PREF_USER_AGENT, "aria2");
op->put(PREF_NO_NETRC, V_FALSE);
while(1) {
int optIndex = 0;
int lopt;
@ -386,6 +388,7 @@ int main(int argc, char* argv[]) {
{ "realtime-chunk-checksum", required_argument, &lopt, 204 },
{ "continue", no_argument, 0, 'c' },
{ "user-agent", required_argument, 0, 'U' },
{ "no-netrc", no_argument, 0, 'n' },
#ifdef ENABLE_BITTORRENT
{ "torrent-file", required_argument, NULL, 'T' },
{ "listen-port", required_argument, &lopt, 15 },
@ -413,7 +416,7 @@ int main(int argc, char* argv[]) {
{ "help", no_argument, NULL, 'h' },
{ 0, 0, 0, 0 }
};
c = getopt_long(argc, argv, "Dd:o:l:s:pt:m:vhST:M:C:a:c", longOpts, &optIndex);
c = getopt_long(argc, argv, "Dd:o:l:s:pt:m:vhST:M:C:a:cU:n", longOpts, &optIndex);
if(c == -1) {
break;
}
@ -564,6 +567,9 @@ int main(int argc, char* argv[]) {
case 'U':
cmdstream << PREF_USER_AGENT << "=" << optarg << "\n";
break;
case 'n':
cmdstream << PREF_NO_NETRC << "=" << V_TRUE << "\n";
break;
case 'v':
showVersion();
exit(EXIT_SUCCESS);

View File

@ -94,6 +94,8 @@
#define PREF_NETRC_PATH "netrc-path"
// value:
#define PREF_CONTINUE "continue"
// value:
#define PREF_NO_NETRC "no-netrc"
/**
* FTP related preferences

View File

@ -0,0 +1,45 @@
#include "DefaultAuthResolver.h"
#include "prefs.h"
#include <cppunit/extensions/HelperMacros.h>
using namespace std;
class DefaultAuthResolverTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(DefaultAuthResolverTest);
CPPUNIT_TEST(testResolveAuthConfig_without_userDefined);
CPPUNIT_TEST(testResolveAuthConfig_with_userDefined);
CPPUNIT_TEST_SUITE_END();
private:
//NetrcHandle _netrc;
//SharedHandle<Option> _option;
DefaultAuthResolverHandle _resolver;
public:
void setUp()
{
//_netrc = new Netrc();
//_option = new Option();
_resolver = new DefaultAuthResolver();
//_factory->setOption(_option.get());
_resolver->setDefaultAuthConfig(new AuthConfig("foo", "bar"));
}
void testResolveAuthConfig_without_userDefined();
void testResolveAuthConfig_with_userDefined();
};
CPPUNIT_TEST_SUITE_REGISTRATION( DefaultAuthResolverTest );
void DefaultAuthResolverTest::testResolveAuthConfig_without_userDefined()
{
AuthConfigHandle authConfig = _resolver->resolveAuthConfig("localhost");
CPPUNIT_ASSERT_EQUAL(string("foo:bar"), authConfig->getAuthText());
}
void DefaultAuthResolverTest::testResolveAuthConfig_with_userDefined()
{
_resolver->setUserDefinedAuthConfig(new AuthConfig("myname", "mypasswd"));
AuthConfigHandle authConfig = _resolver->resolveAuthConfig("localhost");
CPPUNIT_ASSERT_EQUAL(string("myname:mypasswd"), authConfig->getAuthText());
}

View File

@ -335,7 +335,7 @@ void HttpRequestTest::testCreateRequest_with_cookie()
string expectedText = "GET /archives/aria2-1.0.0.tar.bz2 HTTP/1.1\r\n"
"User-Agent: aria2\r\n"
"Accept: */*\r\n"
"Host: localhost\r\n"
"Host: localhost:80\r\n"
"Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n"
"Cookie: name1=value1;\r\n"
@ -348,7 +348,7 @@ void HttpRequestTest::testCreateRequest_with_cookie()
expectedText = "GET /archives/download/aria2-1.0.0.tar.bz2 HTTP/1.1\r\n"
"User-Agent: aria2\r\n"
"Accept: */*\r\n"
"Host: localhost\r\n"
"Host: localhost:80\r\n"
"Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n"
"Cookie: name1=value1;name2=value2;\r\n"
@ -361,7 +361,7 @@ void HttpRequestTest::testCreateRequest_with_cookie()
expectedText = "GET /archives/download/aria2-1.0.0.tar.bz2 HTTP/1.1\r\n"
"User-Agent: aria2\r\n"
"Accept: */*\r\n"
"Host: tt.localhost\r\n"
"Host: tt.localhost:80\r\n"
"Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n"
"Cookie: name1=value1;name2=value2;name3=value3;\r\n"
@ -374,7 +374,7 @@ void HttpRequestTest::testCreateRequest_with_cookie()
expectedText = "GET /archives/download/aria2-1.0.0.tar.bz2 HTTP/1.1\r\n"
"User-Agent: aria2\r\n"
"Accept: */*\r\n"
"Host: tt.localhost\r\n"
"Host: tt.localhost:443\r\n"
"Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n"
"Cookie: name1=value1;name2=value2;name3=value3;name4=value4;\r\n"
@ -387,7 +387,7 @@ void HttpRequestTest::testCreateRequest_with_cookie()
void HttpRequestTest::testCreateProxyRequest()
{
RequestHandle request = new Request();
request->setUrl("http://localhost:8080/archives/aria2-1.0.0.tar.bz2");
request->setUrl("http://localhost/archives/aria2-1.0.0.tar.bz2");
SegmentHandle segment = new Segment();
HttpRequest httpRequest;
@ -395,10 +395,10 @@ void HttpRequestTest::testCreateProxyRequest()
httpRequest.setRequest(request);
httpRequest.setSegment(segment);
string expectedText = "CONNECT localhost:8080 HTTP/1.1\r\n"
string expectedText = "CONNECT localhost:80 HTTP/1.1\r\n"
"User-Agent: aria2\r\n"
"Proxy-Connection: close\r\n"
"Host: localhost:8080\r\n"
"Host: localhost:80\r\n"
"\r\n";
CPPUNIT_ASSERT_EQUAL(expectedText, httpRequest.createProxyRequest());

View File

@ -1,13 +1,16 @@
TESTS = aria2c
check_PROGRAMS = $(TESTS)
aria2c_SOURCES = AllTest.cc\
RequestFactoryTest.cc\
NetrcAuthResolverTest.cc\
DefaultAuthResolverTest.cc\
RequestTest.cc\
HttpRequestTest.cc
UtilTest.cc\
OptionHandlerTest.cc\
SegmentManTest.cc\
BitfieldManTest.cc\
GlowFileAllocatorTest.cc\
RequestTest.cc\
HttpRequestTest.cc\
NetrcTest.cc\
SingletonHolderTest.cc\
HttpHeaderTest.cc\

View File

@ -57,45 +57,7 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__EXEEXT_1 = aria2c$(EXEEXT)
am_aria2c_OBJECTS = AllTest.$(OBJEXT) UtilTest.$(OBJEXT) \
OptionHandlerTest.$(OBJEXT) SegmentManTest.$(OBJEXT) \
BitfieldManTest.$(OBJEXT) GlowFileAllocatorTest.$(OBJEXT) \
RequestTest.$(OBJEXT) HttpRequestTest.$(OBJEXT) \
NetrcTest.$(OBJEXT) SingletonHolderTest.$(OBJEXT) \
HttpHeaderTest.$(OBJEXT) HttpResponseTest.$(OBJEXT) \
SharedHandleTest.$(OBJEXT) ChunkedEncodingTest.$(OBJEXT) \
FileTest.$(OBJEXT) OptionTest.$(OBJEXT) Base64Test.$(OBJEXT) \
CookieBoxTest.$(OBJEXT) DataTest.$(OBJEXT) \
DictionaryTest.$(OBJEXT) ListTest.$(OBJEXT) \
MetaFileUtilTest.$(OBJEXT) ShaVisitorTest.$(OBJEXT) \
PeerMessageUtilTest.$(OBJEXT) DefaultDiskWriterTest.$(OBJEXT) \
MultiDiskAdaptorTest.$(OBJEXT) \
Xml2MetalinkProcessorTest.$(OBJEXT) MetalinkerTest.$(OBJEXT) \
MetalinkEntryTest.$(OBJEXT) FeatureConfigTest.$(OBJEXT) \
ShareRatioSeedCriteriaTest.$(OBJEXT) \
TimeSeedCriteriaTest.$(OBJEXT) SpeedCalcTest.$(OBJEXT) \
DefaultPeerListProcessorTest.$(OBJEXT) \
AnnounceListTest.$(OBJEXT) TrackerWatcherCommandTest.$(OBJEXT) \
DefaultBtContextTest.$(OBJEXT) \
DefaultPieceStorageTest.$(OBJEXT) \
DefaultPeerStorageTest.$(OBJEXT) \
DefaultBtAnnounceTest.$(OBJEXT) BtRegistryTest.$(OBJEXT) \
DefaultBtMessageDispatcherTest.$(OBJEXT) \
DefaultBtRequestFactoryTest.$(OBJEXT) PeerTest.$(OBJEXT) \
BtAllowedFastMessageTest.$(OBJEXT) \
BtBitfieldMessageTest.$(OBJEXT) BtCancelMessageTest.$(OBJEXT) \
BtChokeMessageTest.$(OBJEXT) BtHaveAllMessageTest.$(OBJEXT) \
BtHaveMessageTest.$(OBJEXT) BtHaveNoneMessageTest.$(OBJEXT) \
BtInterestedMessageTest.$(OBJEXT) \
BtKeepAliveMessageTest.$(OBJEXT) \
BtNotInterestedMessageTest.$(OBJEXT) \
BtPieceMessageTest.$(OBJEXT) BtPortMessageTest.$(OBJEXT) \
BtRejectMessageTest.$(OBJEXT) BtRequestMessageTest.$(OBJEXT) \
BtSuggestPieceMessageTest.$(OBJEXT) \
BtUnchokeMessageTest.$(OBJEXT) \
BtHandshakeMessageTest.$(OBJEXT) \
ConsoleFileAllocationMonitorTest.$(OBJEXT) \
ChunkChecksumValidatorTest.$(OBJEXT)
am_aria2c_OBJECTS = AllTest.$(OBJEXT) RequestFactoryTest.$(OBJEXT)
aria2c_OBJECTS = $(am_aria2c_OBJECTS)
am__DEPENDENCIES_1 =
aria2c_DEPENDENCIES = ../src/libaria2c.a $(am__DEPENDENCIES_1)
@ -107,10 +69,6 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
CXXLD = $(CXX)
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(aria2c_SOURCES)
DIST_SOURCES = $(aria2c_SOURCES)
ETAGS = etags
@ -260,74 +218,77 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
TESTS = aria2c
aria2c_SOURCES = AllTest.cc\
UtilTest.cc\
OptionHandlerTest.cc\
SegmentManTest.cc\
BitfieldManTest.cc\
GlowFileAllocatorTest.cc\
RequestTest.cc\
HttpRequestTest.cc\
NetrcTest.cc\
SingletonHolderTest.cc\
HttpHeaderTest.cc\
HttpResponseTest.cc\
SharedHandleTest.cc\
ChunkedEncodingTest.cc\
FileTest.cc\
OptionTest.cc\
Base64Test.cc\
CookieBoxTest.cc\
DataTest.cc\
DictionaryTest.cc\
ListTest.cc\
MetaFileUtilTest.cc\
ShaVisitorTest.cc\
PeerMessageUtilTest.cc\
DefaultDiskWriterTest.cc\
MultiDiskAdaptorTest.cc\
Xml2MetalinkProcessorTest.cc\
MetalinkerTest.cc\
MetalinkEntryTest.cc\
FeatureConfigTest.cc\
ShareRatioSeedCriteriaTest.cc\
TimeSeedCriteriaTest.cc\
SpeedCalcTest.cc\
DefaultPeerListProcessorTest.cc\
AnnounceListTest.cc\
TrackerWatcherCommandTest.cc\
DefaultBtContextTest.cc\
DefaultPieceStorageTest.cc\
DefaultPeerStorageTest.cc\
DefaultBtAnnounceTest.cc\
BtRegistryTest.cc\
DefaultBtMessageDispatcherTest.cc\
MockPeerStorage.h\
DefaultBtRequestFactoryTest.cc\
PeerTest.cc\
BtAllowedFastMessageTest.cc\
BtBitfieldMessageTest.cc\
BtCancelMessageTest.cc\
BtChokeMessageTest.cc\
BtHaveAllMessageTest.cc\
BtHaveMessageTest.cc\
BtHaveNoneMessageTest.cc\
BtInterestedMessageTest.cc\
BtKeepAliveMessageTest.cc\
BtNotInterestedMessageTest.cc\
BtPieceMessageTest.cc\
BtPortMessageTest.cc\
BtRejectMessageTest.cc\
BtRequestMessageTest.cc\
BtSuggestPieceMessageTest.cc\
BtUnchokeMessageTest.cc\
BtHandshakeMessageTest.cc\
MockBtMessageDispatcher.h\
FixedNumberRandomizer.h\
MockBtMessageFactory.h\
MockBtMessage.h\
ConsoleFileAllocationMonitorTest.cc\
ChunkChecksumValidatorTest.cc
RequestFactoryTest.cc
# NetrcAuthResolverTest.cc\
# DefaultAuthResolverTest.cc\
# RequestTest.cc\
# HttpRequestTest.cc
# UtilTest.cc\
# OptionHandlerTest.cc\
# SegmentManTest.cc\
# BitfieldManTest.cc\
# GlowFileAllocatorTest.cc\
# NetrcTest.cc\
# SingletonHolderTest.cc\
# HttpHeaderTest.cc\
# HttpResponseTest.cc\
# SharedHandleTest.cc\
# ChunkedEncodingTest.cc\
# FileTest.cc\
# OptionTest.cc\
# Base64Test.cc\
# CookieBoxTest.cc\
# DataTest.cc\
# DictionaryTest.cc\
# ListTest.cc\
# MetaFileUtilTest.cc\
# ShaVisitorTest.cc\
# PeerMessageUtilTest.cc\
# DefaultDiskWriterTest.cc\
# MultiDiskAdaptorTest.cc\
# Xml2MetalinkProcessorTest.cc\
# MetalinkerTest.cc\
# MetalinkEntryTest.cc\
# FeatureConfigTest.cc\
# ShareRatioSeedCriteriaTest.cc\
# TimeSeedCriteriaTest.cc\
# SpeedCalcTest.cc\
# DefaultPeerListProcessorTest.cc\
# AnnounceListTest.cc\
# TrackerWatcherCommandTest.cc\
# DefaultBtContextTest.cc\
# DefaultPieceStorageTest.cc\
# DefaultPeerStorageTest.cc\
# DefaultBtAnnounceTest.cc\
# BtRegistryTest.cc\
# DefaultBtMessageDispatcherTest.cc\
# MockPeerStorage.h\
# DefaultBtRequestFactoryTest.cc\
# PeerTest.cc\
# BtAllowedFastMessageTest.cc\
# BtBitfieldMessageTest.cc\
# BtCancelMessageTest.cc\
# BtChokeMessageTest.cc\
# BtHaveAllMessageTest.cc\
# BtHaveMessageTest.cc\
# BtHaveNoneMessageTest.cc\
# BtInterestedMessageTest.cc\
# BtKeepAliveMessageTest.cc\
# BtNotInterestedMessageTest.cc\
# BtPieceMessageTest.cc\
# BtPortMessageTest.cc\
# BtRejectMessageTest.cc\
# BtRequestMessageTest.cc\
# BtSuggestPieceMessageTest.cc\
# BtUnchokeMessageTest.cc\
# BtHandshakeMessageTest.cc\
# MockBtMessageDispatcher.h\
# FixedNumberRandomizer.h\
# MockBtMessageFactory.h\
# MockBtMessage.h\
# ConsoleFileAllocationMonitorTest.cc\
# ChunkChecksumValidatorTest.cc
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
aria2c_LDADD = ../src/libaria2c.a\
@ -390,68 +351,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AnnounceListTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Base64Test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BitfieldManTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtAllowedFastMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtBitfieldMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtCancelMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtChokeMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtHandshakeMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtHaveAllMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtHaveMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtHaveNoneMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtInterestedMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtKeepAliveMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtNotInterestedMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtPieceMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtPortMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtRegistryTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtRejectMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtRequestMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtSuggestPieceMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtUnchokeMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChunkChecksumValidatorTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChunkedEncodingTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConsoleFileAllocationMonitorTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieBoxTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DataTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultBtAnnounceTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultBtContextTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultBtMessageDispatcherTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultBtRequestFactoryTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultDiskWriterTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultPeerListProcessorTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultPeerStorageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultPieceStorageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DictionaryTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FeatureConfigTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GlowFileAllocatorTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HttpHeaderTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HttpRequestTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HttpResponseTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ListTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MetaFileUtilTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MetalinkEntryTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MetalinkerTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiDiskAdaptorTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NetrcTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OptionHandlerTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OptionTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerMessageUtilTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RequestTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentManTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ShaVisitorTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ShareRatioSeedCriteriaTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SharedHandleTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SingletonHolderTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpeedCalcTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TimeSeedCriteriaTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TrackerWatcherCommandTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UtilTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Xml2MetalinkProcessorTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RequestFactoryTest.Po@am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \

View File

@ -0,0 +1,63 @@
#include "NetrcAuthResolver.h"
#include "prefs.h"
#include <cppunit/extensions/HelperMacros.h>
using namespace std;
class NetrcAuthResolverTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(NetrcAuthResolverTest);
CPPUNIT_TEST(testResolveAuthConfig_without_userDefined);
CPPUNIT_TEST(testResolveAuthConfig_with_userDefined);
CPPUNIT_TEST_SUITE_END();
private:
NetrcHandle _netrc;
//SharedHandle<Option> _option;
NetrcAuthResolverHandle _resolver;
public:
void setUp()
{
_netrc = new Netrc();
_netrc->addAuthenticator(new Authenticator("localhost", "name", "passwd", "account"));
_netrc->addAuthenticator(new DefaultAuthenticator("default", "defaultpasswd", "defaultaccount"));
//_option = new Option();
_resolver = new NetrcAuthResolver();
_resolver->setNetrc(_netrc);
_resolver->setDefaultAuthConfig(new AuthConfig("foo", "bar"));
}
void testResolveAuthConfig_without_userDefined();
void testResolveAuthConfig_with_userDefined();
};
CPPUNIT_TEST_SUITE_REGISTRATION( NetrcAuthResolverTest );
void NetrcAuthResolverTest::testResolveAuthConfig_without_userDefined()
{
AuthConfigHandle authConfig = _resolver->resolveAuthConfig("localhost");
CPPUNIT_ASSERT_EQUAL(string("name:passwd"), authConfig->getAuthText());
authConfig = _resolver->resolveAuthConfig("mymachine");
CPPUNIT_ASSERT_EQUAL(string("default:defaultpasswd"), authConfig->getAuthText());
_resolver->setNetrc(0);
authConfig = _resolver->resolveAuthConfig("localhost");
CPPUNIT_ASSERT_EQUAL(string("foo:bar"), authConfig->getAuthText());
}
void NetrcAuthResolverTest::testResolveAuthConfig_with_userDefined()
{
_resolver->setUserDefinedAuthConfig(new AuthConfig("myname", "mypasswd"));
AuthConfigHandle authConfig = _resolver->resolveAuthConfig("localhost");
CPPUNIT_ASSERT_EQUAL(string("myname:mypasswd"), authConfig->getAuthText());
authConfig = _resolver->resolveAuthConfig("mymachine");
CPPUNIT_ASSERT_EQUAL(string("myname:mypasswd"), authConfig->getAuthText());
_resolver->setNetrc(0);
authConfig = _resolver->resolveAuthConfig("mymachine");
CPPUNIT_ASSERT_EQUAL(string("myname:mypasswd"), authConfig->getAuthText());
}

128
test/RequestFactoryTest.cc Normal file
View File

@ -0,0 +1,128 @@
#include "RequestFactory.h"
#include "prefs.h"
#include "NetrcAuthResolver.h"
#include "DefaultAuthResolver.h"
#include <cppunit/extensions/HelperMacros.h>
using namespace std;
class RequestFactoryTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(RequestFactoryTest);
CPPUNIT_TEST(testCreateHttpAuthResolver_netrc);
CPPUNIT_TEST(testCreateHttpAuthResolver_def);
CPPUNIT_TEST(testCreateFtpAuthResolver_netrc);
CPPUNIT_TEST(testCreateFtpAuthResolver_def);
CPPUNIT_TEST(testCreateHttpProxyAuthResolver_netrc);
CPPUNIT_TEST(testCreateHttpProxyAuthResolver_def);
CPPUNIT_TEST_SUITE_END();
private:
NetrcHandle _netrc;
SharedHandle<Option> _option;
RequestFactoryHandle _factory;
public:
void setUp()
{
_netrc = new Netrc();
_option = new Option();
_factory = new RequestFactory();
_factory->setNetrc(_netrc);
_factory->setOption(_option.get());
}
void testCreateHttpAuthResolver_netrc();
void testCreateHttpAuthResolver_def();
void testCreateFtpAuthResolver_netrc();
void testCreateFtpAuthResolver_def();
void testCreateHttpProxyAuthResolver_netrc();
void testCreateHttpProxyAuthResolver_def();
};
CPPUNIT_TEST_SUITE_REGISTRATION( RequestFactoryTest );
void RequestFactoryTest::testCreateHttpAuthResolver_netrc()
{
_option->put(PREF_NO_NETRC, V_FALSE);
_option->put(PREF_HTTP_USER, "foo");
_option->put(PREF_HTTP_PASSWD, "bar");
DefaultAuthResolverHandle defResolver = _factory->createHttpAuthResolver();
CPPUNIT_ASSERT(!defResolver.isNull());
CPPUNIT_ASSERT(!defResolver->getUserDefinedAuthConfig().isNull());
CPPUNIT_ASSERT_EQUAL(string("foo:bar"),
defResolver->getUserDefinedAuthConfig()->getAuthText());
/*
NetrcAuthResolverHandle netrcResolver = _factory->createHttpAuthResolver();
CPPUNIT_ASSERT(!netrcResolver.isNull());
CPPUNIT_ASSERT(!netrcResolver->getNetrc().isNull());
CPPUNIT_ASSERT(netrcResolver->getUserDefinedAuthConfig().isNull());
*/
}
void RequestFactoryTest::testCreateHttpAuthResolver_def()
{
_option->put(PREF_NO_NETRC, V_TRUE);
_option->put(PREF_HTTP_USER, "foo");
_option->put(PREF_HTTP_PASSWD, "bar");
DefaultAuthResolverHandle defResolver = _factory->createHttpAuthResolver();
CPPUNIT_ASSERT(!defResolver.isNull());
CPPUNIT_ASSERT(!defResolver->getUserDefinedAuthConfig().isNull());
CPPUNIT_ASSERT_EQUAL(string("foo:bar"),
defResolver->getUserDefinedAuthConfig()->getAuthText());
}
void RequestFactoryTest::testCreateFtpAuthResolver_netrc()
{
_option->put(PREF_NO_NETRC, V_FALSE);
NetrcAuthResolverHandle netrcResolver = _factory->createFtpAuthResolver();
CPPUNIT_ASSERT(!netrcResolver.isNull());
CPPUNIT_ASSERT(!netrcResolver->getNetrc().isNull());
CPPUNIT_ASSERT(netrcResolver->getUserDefinedAuthConfig().isNull());
CPPUNIT_ASSERT_EQUAL(string("anonymous:ARIA2USER@"),
netrcResolver->getDefaultAuthConfig()->getAuthText());
}
void RequestFactoryTest::testCreateFtpAuthResolver_def()
{
_option->put(PREF_NO_NETRC, V_TRUE);
_option->put(PREF_FTP_USER, "foo");
_option->put(PREF_FTP_PASSWD, "bar");
DefaultAuthResolverHandle defResolver = _factory->createFtpAuthResolver();
CPPUNIT_ASSERT(!defResolver.isNull());
CPPUNIT_ASSERT(!defResolver->getUserDefinedAuthConfig().isNull());
CPPUNIT_ASSERT_EQUAL(string("foo:bar"),
defResolver->getUserDefinedAuthConfig()->getAuthText());
CPPUNIT_ASSERT_EQUAL(string("anonymous:ARIA2USER@"),
defResolver->getDefaultAuthConfig()->getAuthText());
}
void RequestFactoryTest::testCreateHttpProxyAuthResolver_netrc()
{
_option->put(PREF_NO_NETRC, V_FALSE);
_option->put(PREF_HTTP_PROXY_USER, "foo");
_option->put(PREF_HTTP_PROXY_PASSWD, "bar");
DefaultAuthResolverHandle defResolver = _factory->createHttpProxyAuthResolver();
CPPUNIT_ASSERT(!defResolver.isNull());
CPPUNIT_ASSERT(!defResolver->getUserDefinedAuthConfig().isNull());
CPPUNIT_ASSERT_EQUAL(string("foo:bar"),
defResolver->getUserDefinedAuthConfig()->getAuthText());
/*
NetrcAuthResolverHandle netrcResolver = _factory->createHttpProxyAuthResolver();
CPPUNIT_ASSERT(!netrcResolver.isNull());
CPPUNIT_ASSERT(!netrcResolver->getNetrc().isNull());
CPPUNIT_ASSERT(netrcResolver->getUserDefinedAuthConfig().isNull());
*/
}
void RequestFactoryTest::testCreateHttpProxyAuthResolver_def()
{
_option->put(PREF_NO_NETRC, V_TRUE);
_option->put(PREF_HTTP_PROXY_USER, "foo");
_option->put(PREF_HTTP_PROXY_PASSWD, "bar");
DefaultAuthResolverHandle defResolver = _factory->createHttpProxyAuthResolver();
CPPUNIT_ASSERT(!defResolver.isNull());
CPPUNIT_ASSERT(!defResolver->getUserDefinedAuthConfig().isNull());
CPPUNIT_ASSERT_EQUAL(string("foo:bar"),
defResolver->getUserDefinedAuthConfig()->getAuthText());
}