| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 | #include "AuthConfigFactory.h"#include <cppunit/extensions/HelperMacros.h>#include "Netrc.h"#include "prefs.h"#include "Request.h"#include "AuthConfig.h"#include "Option.h"namespace aria2 {class AuthConfigFactoryTest:public CppUnit::TestFixture {  CPPUNIT_TEST_SUITE(AuthConfigFactoryTest);  CPPUNIT_TEST(testCreateAuthConfig_http);  CPPUNIT_TEST(testCreateAuthConfig_httpNoChallenge);  CPPUNIT_TEST(testCreateAuthConfig_ftp);  CPPUNIT_TEST(testUpdateBasicCred);  CPPUNIT_TEST_SUITE_END();  public:  void testCreateAuthConfig_http();  void testCreateAuthConfig_httpNoChallenge();  void testCreateAuthConfig_ftp();  void testUpdateBasicCred();};CPPUNIT_TEST_SUITE_REGISTRATION( AuthConfigFactoryTest );void AuthConfigFactoryTest::testCreateAuthConfig_http(){  SharedHandle<Request> req(new Request());  req->setUri("http://localhost/download/aria2-1.0.0.tar.bz2");  Option option;  option.put(PREF_NO_NETRC, A2_V_FALSE);  option.put(PREF_HTTP_AUTH_CHALLENGE, A2_V_TRUE);  AuthConfigFactory factory;  // without auth info  CPPUNIT_ASSERT(!factory.createAuthConfig(req, &option));  // with Netrc  SharedHandle<Netrc> netrc(new Netrc());  netrc->addAuthenticator    (SharedHandle<Authenticator>(new Authenticator("localhost",                                                   "localhostuser",                                                   "localhostpass",                                                   "localhostacct")));  netrc->addAuthenticator    (SharedHandle<Authenticator>(new DefaultAuthenticator("default", "defaultpassword", "defaultaccount")));  factory.setNetrc(netrc);  // not activated  CPPUNIT_ASSERT(!factory.createAuthConfig(req, &option));  CPPUNIT_ASSERT(factory.activateBasicCred("localhost", 80, "/", &option));  CPPUNIT_ASSERT_EQUAL(std::string("localhostuser:localhostpass"),                       factory.createAuthConfig(req, &option)->getAuthText());  // See default token in netrc is ignored.  req->setUri("http://mirror/");  CPPUNIT_ASSERT(!factory.activateBasicCred("mirror", 80, "/", &option));  CPPUNIT_ASSERT(!factory.createAuthConfig(req, &option));  // with Netrc + user defined  option.put(PREF_HTTP_USER, "userDefinedUser");  option.put(PREF_HTTP_PASSWD, "userDefinedPassword");  CPPUNIT_ASSERT(!factory.createAuthConfig(req, &option));  CPPUNIT_ASSERT(factory.activateBasicCred("mirror", 80, "/", &option));  CPPUNIT_ASSERT_EQUAL(std::string("userDefinedUser:userDefinedPassword"),                       factory.createAuthConfig(req, &option)->getAuthText());  // username and password in URI  req->setUri("http://aria2user:aria2password@localhost/download/aria2-1.0.0.tar.bz2");  CPPUNIT_ASSERT_EQUAL(std::string("aria2user:aria2password"),                       factory.createAuthConfig(req, &option)->getAuthText());  }void AuthConfigFactoryTest::testCreateAuthConfig_httpNoChallenge(){  SharedHandle<Request> req(new Request());  req->setUri("http://localhost/download/aria2-1.0.0.tar.bz2");  Option option;  option.put(PREF_NO_NETRC, A2_V_FALSE);  AuthConfigFactory factory;  // without auth info  CPPUNIT_ASSERT(!factory.createAuthConfig(req, &option));  // with Netrc  SharedHandle<Netrc> netrc(new Netrc());  netrc->addAuthenticator    (SharedHandle<Authenticator>(new Authenticator("localhost",                                                   "localhostuser",                                                   "localhostpass",                                                   "localhostacct")));  netrc->addAuthenticator    (SharedHandle<Authenticator>(new DefaultAuthenticator("default", "defaultpassword", "defaultaccount")));  factory.setNetrc(netrc);  // not activated  CPPUNIT_ASSERT_EQUAL(std::string("localhostuser:localhostpass"),                       factory.createAuthConfig(req, &option)->getAuthText());  // See default token in netrc is ignored.  req->setUri("http://mirror/");  CPPUNIT_ASSERT(!factory.createAuthConfig(req, &option));  // with Netrc + user defined  option.put(PREF_HTTP_USER, "userDefinedUser");  option.put(PREF_HTTP_PASSWD, "userDefinedPassword");  CPPUNIT_ASSERT_EQUAL(std::string("userDefinedUser:userDefinedPassword"),                       factory.createAuthConfig(req, &option)->getAuthText());  // username and password in URI  req->setUri("http://aria2user:aria2password@localhost/download/aria2-1.0.0.tar.bz2");  CPPUNIT_ASSERT_EQUAL(std::string("aria2user:aria2password"),                       factory.createAuthConfig(req, &option)->getAuthText());  }void AuthConfigFactoryTest::testCreateAuthConfig_ftp(){  SharedHandle<Request> req(new Request());  req->setUri("ftp://localhost/download/aria2-1.0.0.tar.bz2");  Option option;  option.put(PREF_NO_NETRC, A2_V_FALSE);  AuthConfigFactory factory;  // without auth info  CPPUNIT_ASSERT_EQUAL(std::string("anonymous:ARIA2USER@"),                       factory.createAuthConfig(req, &option)->getAuthText());  // with Netrc  SharedHandle<Netrc> netrc(new Netrc());  netrc->addAuthenticator    (SharedHandle<Authenticator>(new DefaultAuthenticator("default", "defaultpassword", "defaultaccount")));  factory.setNetrc(netrc);  CPPUNIT_ASSERT_EQUAL(std::string("default:defaultpassword"),                       factory.createAuthConfig(req, &option)->getAuthText());  // disable Netrc  option.put(PREF_NO_NETRC, A2_V_TRUE);  CPPUNIT_ASSERT_EQUAL(std::string("anonymous:ARIA2USER@"),                       factory.createAuthConfig(req, &option)->getAuthText());  // with Netrc + user defined  option.put(PREF_NO_NETRC, A2_V_FALSE);  option.put(PREF_FTP_USER, "userDefinedUser");  option.put(PREF_FTP_PASSWD, "userDefinedPassword");  CPPUNIT_ASSERT_EQUAL(std::string("userDefinedUser:userDefinedPassword"),                       factory.createAuthConfig(req, &option)->getAuthText());  // username and password in URI  req->setUri("ftp://aria2user:aria2password@localhost/download/aria2-1.0.0.tar.bz2");  CPPUNIT_ASSERT_EQUAL(std::string("aria2user:aria2password"),                       factory.createAuthConfig(req, &option)->getAuthText());  // username in URI, but no password. We have DefaultAuthenticator  // but username is not aria2user  req->setUri("ftp://aria2user@localhost/download/aria2-1.0.0.tar.bz2");  CPPUNIT_ASSERT_EQUAL(std::string("aria2user:userDefinedPassword"),                       factory.createAuthConfig(req, &option)->getAuthText());  // Recreate netrc with entry for user aria2user  netrc.reset(new Netrc());  netrc->addAuthenticator    (SharedHandle<Authenticator>(new Authenticator("localhost",                                                   "aria2user",                                                   "netrcpass",                                                   "netrcacct")));  factory.setNetrc(netrc);  // This time, we can find same username "aria2user" in netrc, so the  // password "netrcpass" is used, instead of "userDefinedPassword"  CPPUNIT_ASSERT_EQUAL(std::string("aria2user:netrcpass"),                       factory.createAuthConfig(req, &option)->getAuthText());  // No netrc entry for host mirror, so "userDefinedPassword" is used.  req->setUri("ftp://aria2user@mirror/download/aria2-1.0.0.tar.bz2");  CPPUNIT_ASSERT_EQUAL(std::string("aria2user:userDefinedPassword"),                       factory.createAuthConfig(req, &option)->getAuthText());}void AuthConfigFactoryTest::testUpdateBasicCred(){  Option option;  option.put(PREF_NO_NETRC, A2_V_FALSE);  option.put(PREF_HTTP_AUTH_CHALLENGE, A2_V_TRUE);  AuthConfigFactory factory;  factory.updateBasicCred    (AuthConfigFactory::BasicCred("myname", "mypass", "localhost", 80, "/", true));  factory.updateBasicCred    (AuthConfigFactory::BasicCred("price", "j38jdc", "localhost", 80, "/download", true));  factory.updateBasicCred    (AuthConfigFactory::BasicCred("soap", "planB", "localhost", 80, "/download/beta", true));  factory.updateBasicCred    (AuthConfigFactory::BasicCred("alice", "ium8", "localhost", 80, "/documents", true));  factory.updateBasicCred    (AuthConfigFactory::BasicCred("jack", "jackx", "mirror", 80, "/doc", true));  SharedHandle<Request> req(new Request());  req->setUri("http://localhost/download/v2.6/Changelog");  CPPUNIT_ASSERT_EQUAL(std::string("price:j38jdc"),                       factory.createAuthConfig(req, &option)->getAuthText());  req->setUri("http://localhost/download/beta/v2.7/Changelog");  CPPUNIT_ASSERT_EQUAL(std::string("soap:planB"),                       factory.createAuthConfig(req, &option)->getAuthText());  req->setUri("http://localhost/documents/reference.html");  CPPUNIT_ASSERT_EQUAL(std::string("alice:ium8"),                       factory.createAuthConfig(req, &option)->getAuthText());  req->setUri("http://localhost/documents2/manual.html");  CPPUNIT_ASSERT_EQUAL(std::string("myname:mypass"),                       factory.createAuthConfig(req, &option)->getAuthText());  req->setUri("http://localhost/doc/readme.txt");  CPPUNIT_ASSERT_EQUAL(std::string("myname:mypass"),                       factory.createAuthConfig(req, &option)->getAuthText());  req->setUri("http://localhost:8080/doc/readme.txt");  CPPUNIT_ASSERT(!factory.createAuthConfig(req, &option));  req->setUri("http://local/");  CPPUNIT_ASSERT(!factory.createAuthConfig(req, &option));  req->setUri("http://mirror/");  CPPUNIT_ASSERT(!factory.createAuthConfig(req, &option));}} // namespace aria2
 |