Imported Upstream version 15.0.0
[platform/upstream/libzypp.git] / tests / media / CredentialManager_test.cc
1 #include <iostream>
2 #include <boost/test/auto_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
17 BOOST_AUTO_TEST_CASE(read_cred_for_url)
18 {
19   CredManagerOptions opts;
20   opts.globalCredFilePath = TESTS_SRC_DIR "/media/data/credentials.cat";
21   opts.userCredFilePath = Pathname();
22
23   CredentialManager cm(opts);
24   BOOST_CHECK(cm.credsGlobalSize() == 2);
25
26   Url url("https://drink.it/repo/roots");
27   AuthData_Ptr credentials = cm.getCred(url);
28   BOOST_CHECK(credentials.get() != NULL);
29   if (!credentials)
30     return;
31   BOOST_CHECK(credentials->username() == "ginger");
32   BOOST_CHECK(credentials->password() == "ale");
33
34   Url url2("ftp://magda@weprovidesoft.fr/download/opensuse/110");
35   credentials = cm.getCred(url2);
36   BOOST_CHECK(credentials.get() != NULL);
37   if (!credentials)
38     return;
39   BOOST_CHECK(credentials->username() == "magda");
40   BOOST_CHECK(credentials->password() == "richard");
41 }
42
43 struct CredCollector
44 {
45   bool collect(AuthData_Ptr & cred)
46   {
47     cout << "got: " << endl << *cred << endl;
48     creds.insert(cred);
49     return true;
50   }
51
52   CredentialManager::CredentialSet creds;
53 };
54
55
56 BOOST_AUTO_TEST_CASE(save_creds)
57 {
58   filesystem::TmpDir tmp;
59
60   CredManagerOptions opts;
61   opts.globalCredFilePath = tmp / "fooha";
62
63   CredentialManager cm1(opts);
64   AuthData cr1("benson","absolute");
65   cr1.setUrl(Url("http://joooha.com"));
66   AuthData cr2("pat","vymetheny");
67   cr2.setUrl(Url("ftp://filesuck.org"));
68
69   // should create a new file
70   cm1.saveInGlobal(cr1);
71
72   CredCollector collector;
73   CredentialFileReader reader(opts.globalCredFilePath,
74       bind( &CredCollector::collect, &collector, _1 ));
75   BOOST_CHECK(collector.creds.size() == 1);
76
77   cout << "----" << endl;
78   collector.creds.clear();
79
80   cm1.saveInGlobal(cr2);
81   
82   CredentialFileReader reader1(opts.globalCredFilePath,
83       bind( &CredCollector::collect, &collector, _1 ));
84   BOOST_CHECK(collector.creds.size() == 2);
85   
86   cout << "----" << endl;
87   collector.creds.clear();
88
89   // save the same creds again
90   cm1.saveInGlobal(cr2);
91   CredentialFileReader reader2(opts.globalCredFilePath,
92       bind( &CredCollector::collect, &collector, _1 ));
93   BOOST_CHECK(collector.creds.size() == 2);
94
95   // todo check created file permissions
96 }
97
98 BOOST_AUTO_TEST_CASE(service_base_url)
99 {
100   filesystem::TmpDir tmp;
101
102   CredManagerOptions opts;
103   opts.globalCredFilePath = tmp / "fooha";
104
105   CredentialManager cm1(opts);
106   AuthData cr1("benson","absolute");
107   cr1.setUrl(Url("http://joooha.com/service/path"));
108   cm1.addGlobalCred(cr1);
109
110   AuthData_Ptr creds;
111   creds = cm1.getCred(Url("http://joooha.com/service/path/repo/repofoo"));
112
113   BOOST_CHECK(creds.get() != NULL);
114   if (!creds)
115     return;
116   BOOST_CHECK(creds->username() == "benson");
117
118   creds = cm1.getCred(Url("http://benson@joooha.com/service/path/repo/repofoo"));
119
120   BOOST_CHECK(creds.get() != NULL);
121   if (!creds)
122     return;
123   BOOST_CHECK(creds->username() == "benson");
124
125   creds = cm1.getCred(Url("http://nobody@joooha.com/service/path/repo/repofoo"));
126   BOOST_CHECK(creds.get() == NULL);
127 }