Imported Upstream version 17.23.5
[platform/upstream/libzypp.git] / tests / media / CredentialManager_test.cc
1 #include <iostream>
2 #include <boost/test/unit_test.hpp>
3
4 #include <zypp/Url.h>
5 #include <zypp/TmpPath.h>
6 #include <zypp/media/CredentialFileReader.cc>
7 #include <zypp/media/CredentialManager.h>
8
9 #include <zypp/PathInfo.h>
10
11 using std::cout;
12 using std::endl;
13 using namespace zypp;
14 using namespace zypp::media;
15
16 inline void testGetCreds( CredentialManager & cm_r, const std::string & url_r,
17                       const std::string & user_r = "",
18                       const std::string & pass_r = "" )
19 {
20   Url url( url_r );
21   AuthData_Ptr cred = cm_r.getCred( url );
22   //cout << "FOR: " << url << endl;
23   //cout << "GOT: " << cred << endl;
24   if ( user_r.empty() && pass_r.empty() )
25   {
26     BOOST_CHECK_EQUAL( cred, AuthData_Ptr() );
27   }
28   else
29   {
30     BOOST_CHECK_EQUAL( cred->username(), user_r );
31     BOOST_CHECK_EQUAL( cred->password(), pass_r );
32   }
33 }
34
35 BOOST_AUTO_TEST_CASE(read_cred_for_url)
36 {
37   CredManagerOptions opts;
38   opts.globalCredFilePath = TESTS_SRC_DIR "/media/data/credentials.cat";
39   opts.userCredFilePath = Pathname();
40   CredentialManager cm( opts );
41
42   BOOST_CHECK_EQUAL( cm.credsGlobalSize(), 3 );
43
44   testGetCreds( cm, "https://drink.it/repo/roots",                              "ginger", "ale" );
45   testGetCreds( cm, "ftp://weprovidesoft.fr/download/opensuse/110",             "agda", "ichard" );
46   testGetCreds( cm, "ftp://magda@weprovidesoft.fr/download/opensuse/110",       "magda", "richard" );
47   testGetCreds( cm, "ftp://agda@weprovidesoft.fr/download/opensuse/110",        "agda", "ichard" );
48   testGetCreds( cm, "ftp://unknown@weprovidesoft.fr/download/opensuse/110" );   // NULL
49   testGetCreds( cm, "http://url.ok/but/not/creds" );                            // NULL
50 }
51
52 struct CredCollector
53 {
54   bool collect(AuthData_Ptr & cred)
55   {
56     //cout << "got: " << endl << *cred << endl;
57     creds.insert(cred);
58     return true;
59   }
60
61   CredentialManager::CredentialSet creds;
62 };
63
64
65 BOOST_AUTO_TEST_CASE(save_creds)
66 {
67   filesystem::TmpDir tmp;
68   CredManagerOptions opts;
69   opts.globalCredFilePath = tmp / "fooha";
70   CredentialManager cm1(opts);
71
72   AuthData cr1("benson","absolute");
73   cr1.setUrl(Url("http://joooha.com"));
74
75   AuthData cr2("pat","vymetheny");
76   cr2.setUrl(Url("ftp://filesuck.org"));
77
78   // should create a new file
79   cm1.saveInGlobal(cr1);
80
81   CredCollector collector;
82   CredentialFileReader( opts.globalCredFilePath, bind( &CredCollector::collect, &collector, _1 ) );
83   BOOST_CHECK_EQUAL( collector.creds.size(), 1 );
84
85   collector.creds.clear();
86   cm1.saveInGlobal(cr2);
87   CredentialFileReader( opts.globalCredFilePath, bind( &CredCollector::collect, &collector, _1 ) );
88   BOOST_CHECK_EQUAL(collector.creds.size(), 2 );
89   
90   collector.creds.clear();
91   // save the same creds again
92   cm1.saveInGlobal(cr2);
93   CredentialFileReader( opts.globalCredFilePath, bind( &CredCollector::collect, &collector, _1 ) );
94   BOOST_CHECK_EQUAL(collector.creds.size(), 2 );
95
96   // todo check created file permissions
97 }
98
99 BOOST_AUTO_TEST_CASE(service_base_url)
100 {
101   filesystem::TmpDir tmp;
102   CredManagerOptions opts;
103   opts.globalCredFilePath = tmp / "fooha";
104   CredentialManager cm( opts );
105
106   AuthData cred( "benson","absolute" );
107   cred.setUrl( Url( "http://joooha.com/service/path" ) );
108   cm.addGlobalCred( cred );
109
110   testGetCreds( cm, "http://joooha.com/service/path/repo/repofoo",              "benson", "absolute" );
111   testGetCreds( cm, "http://benson@joooha.com/service/path/repo/repofoo",       "benson", "absolute" );
112   testGetCreds( cm, "http://nobody@joooha.com/service/path/repo/repofoo" );     // NULL
113 }