AuthConfigFactoryTest.cc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #include "AuthConfigFactory.h"
  2. #include "Netrc.h"
  3. #include "prefs.h"
  4. #include "Request.h"
  5. #include "AuthConfig.h"
  6. #include "Option.h"
  7. #include <cppunit/extensions/HelperMacros.h>
  8. namespace aria2 {
  9. class AuthConfigFactoryTest:public CppUnit::TestFixture {
  10. CPPUNIT_TEST_SUITE(AuthConfigFactoryTest);
  11. CPPUNIT_TEST(testCreateAuthConfig_http);
  12. CPPUNIT_TEST(testCreateAuthConfigForHttpProxy);
  13. CPPUNIT_TEST(testCreateAuthConfig_ftp);
  14. CPPUNIT_TEST_SUITE_END();
  15. public:
  16. void testCreateAuthConfig_http();
  17. void testCreateAuthConfigForHttpProxy();
  18. void testCreateAuthConfig_ftp();
  19. };
  20. CPPUNIT_TEST_SUITE_REGISTRATION( AuthConfigFactoryTest );
  21. void AuthConfigFactoryTest::testCreateAuthConfig_http()
  22. {
  23. SharedHandle<Request> req(new Request());
  24. req->setUrl("http://localhost/download/aria2-1.0.0.tar.bz2");
  25. Option option;
  26. option.put(PREF_NO_NETRC, V_FALSE);
  27. AuthConfigFactory factory(&option);
  28. // without auth info
  29. CPPUNIT_ASSERT_EQUAL(std::string(":"),
  30. factory.createAuthConfig(req)->getAuthText());
  31. // with Netrc
  32. SharedHandle<Netrc> netrc(new Netrc());
  33. netrc->addAuthenticator
  34. (SharedHandle<Authenticator>(new Authenticator("localhost",
  35. "localhostuser",
  36. "localhostpass",
  37. "localhostacct")));
  38. netrc->addAuthenticator
  39. (SharedHandle<Authenticator>(new DefaultAuthenticator("default", "defaultpassword", "defaultaccount")));
  40. factory.setNetrc(netrc);
  41. CPPUNIT_ASSERT_EQUAL(std::string("localhostuser:localhostpass"),
  42. factory.createAuthConfig(req)->getAuthText());
  43. // See default token in netrc is ignored.
  44. SharedHandle<Request> mirrorReq(new Request());
  45. req->setUrl("http://mirror/");
  46. CPPUNIT_ASSERT_EQUAL(std::string(":"),
  47. factory.createAuthConfig(mirrorReq)->getAuthText());
  48. // with Netrc + user defined
  49. option.put(PREF_HTTP_USER, "userDefinedUser");
  50. option.put(PREF_HTTP_PASSWD, "userDefinedPassword");
  51. CPPUNIT_ASSERT_EQUAL(std::string("userDefinedUser:userDefinedPassword"),
  52. factory.createAuthConfig(req)->getAuthText());
  53. // username and password in URI: disabled by default.
  54. req->setUrl("http://aria2user:aria2password@localhost/download/aria2-1.0.0.tar.bz2");
  55. CPPUNIT_ASSERT_EQUAL(std::string("userDefinedUser:userDefinedPassword"),
  56. factory.createAuthConfig(req)->getAuthText());
  57. }
  58. void AuthConfigFactoryTest::testCreateAuthConfigForHttpProxy()
  59. {
  60. SharedHandle<Request> req(new Request());
  61. req->setUrl("http://localhost/download/aria2-1.0.0.tar.bz2");
  62. // with Netrc
  63. SharedHandle<Netrc> netrc(new Netrc());
  64. netrc->addAuthenticator
  65. (SharedHandle<Authenticator>(new DefaultAuthenticator("default", "defaultpassword", "defaultaccount")));
  66. Option option;
  67. option.put(PREF_NO_NETRC, V_FALSE);
  68. AuthConfigFactory factory(&option);
  69. factory.setNetrc(netrc);
  70. // netrc is not used in http proxy auth
  71. CPPUNIT_ASSERT_EQUAL(std::string(":"),
  72. factory.createAuthConfigForHttpProxy(req)->getAuthText());
  73. option.put(PREF_HTTP_PROXY_USER, "userDefinedUser");
  74. option.put(PREF_HTTP_PROXY_PASSWD, "userDefinedPassword");
  75. CPPUNIT_ASSERT_EQUAL(std::string("userDefinedUser:userDefinedPassword"),
  76. factory.createAuthConfigForHttpProxy(req)->getAuthText());
  77. }
  78. void AuthConfigFactoryTest::testCreateAuthConfig_ftp()
  79. {
  80. SharedHandle<Request> req(new Request());
  81. req->setUrl("ftp://localhost/download/aria2-1.0.0.tar.bz2");
  82. Option option;
  83. option.put(PREF_NO_NETRC, V_FALSE);
  84. AuthConfigFactory factory(&option);
  85. // without auth info
  86. CPPUNIT_ASSERT_EQUAL(std::string("anonymous:ARIA2USER@"),
  87. factory.createAuthConfig(req)->getAuthText());
  88. // with Netrc
  89. SharedHandle<Netrc> netrc(new Netrc());
  90. netrc->addAuthenticator
  91. (SharedHandle<Authenticator>(new DefaultAuthenticator("default", "defaultpassword", "defaultaccount")));
  92. factory.setNetrc(netrc);
  93. CPPUNIT_ASSERT_EQUAL(std::string("default:defaultpassword"),
  94. factory.createAuthConfig(req)->getAuthText());
  95. // disable Netrc
  96. option.put(PREF_NO_NETRC, V_TRUE);
  97. CPPUNIT_ASSERT_EQUAL(std::string("anonymous:ARIA2USER@"),
  98. factory.createAuthConfig(req)->getAuthText());
  99. // with Netrc + user defined
  100. option.put(PREF_NO_NETRC, V_FALSE);
  101. option.put(PREF_FTP_USER, "userDefinedUser");
  102. option.put(PREF_FTP_PASSWD, "userDefinedPassword");
  103. CPPUNIT_ASSERT_EQUAL(std::string("userDefinedUser:userDefinedPassword"),
  104. factory.createAuthConfig(req)->getAuthText());
  105. // username and password in URI
  106. req->setUrl("ftp://aria2user:aria2password@localhost/download/aria2-1.0.0.tar.bz2");
  107. CPPUNIT_ASSERT_EQUAL(std::string("aria2user:aria2password"),
  108. factory.createAuthConfig(req)->getAuthText());
  109. }
  110. } // namespace aria2