Imported Upstream version 17.22.1
[platform/upstream/libzypp.git] / tests / sat / Solvable_test.cc
1 #include <stdio.h>
2 #include <iostream>
3 #include <boost/test/unit_test.hpp>
4
5 #include "zypp/base/Logger.h"
6 #include "zypp/base/Easy.h"
7 #include "zypp/Pattern.h"
8 #include "zypp/sat/Solvable.h"
9 #include "TestSetup.h"
10
11
12 #define BOOST_TEST_MODULE Solvable
13
14 using std::cout;
15 using std::endl;
16 using std::string;
17 using namespace zypp;
18 using namespace boost::unit_test;
19
20
21 struct TestInit {
22   TestInit()
23     : _test( Arch_x86_64 ){
24     _test.loadRepo( TESTS_SRC_DIR "/data/openSUSE-11.1", "opensuse" );
25     _test.loadRepo( TESTS_SRC_DIR "/data/11.0-update", "update" );
26   }
27
28   TestSetup _test;
29 };
30 BOOST_GLOBAL_FIXTURE( TestInit );
31
32 BOOST_AUTO_TEST_CASE(attributes)
33 {
34     MIL << sat::Pool::instance();
35     Repository r = sat::Pool::instance().reposFind("opensuse");
36
37     int c = 0;
38
39     for ( Repository::SolvableIterator it = r.solvablesBegin();
40           it != r.solvablesEnd();
41           ++it )
42     {
43         sat::Solvable s = *it;
44         //MIL << s.ident() << endl;
45         if ( s.ident() == "pattern:apparmor" )
46         {
47             c++;
48
49             //  solvable 21795 (21796):
50             // name: pattern:apparmor 11.0-67 i586
51             // vendor: SUSE LINUX Products GmbH, Nuernberg, Germany
52             // provides:
53             //   pattern:apparmor = 11.0-67
54             // requires:
55             //   pattern:basesystem
56             //   apparmor-parser
57             //   audit
58             //   apparmor-profiles
59             // recommends:
60             //   yast2-apparmor
61             //   apparmor-utils
62             //   pattern:apparmor_opt
63             // solvable:category: Base Technologies
64             // solvable:icon: yast-software
65             // solvable:summary: Novell AppArmor
66             // solvable:description: Novell AppArmor is an application security framework that provides mandatory access control for programs. It protects from exploitation of software flaws and compromised systems. It offers an advanced tool set that automates the development of per-program application security without requiring additional knowledge.
67             // solvable:isvisible: 1
68             // solvable:order: 1030
69             Pattern::Ptr p = asKind<Pattern>(makeResObject(s));
70             BOOST_CHECK(p);
71             BOOST_CHECK_EQUAL(p->name(), "apparmor");
72             BOOST_CHECK_EQUAL(p->vendor(), "SUSE LINUX Products GmbH, Nuernberg, Germany");
73             BOOST_CHECK_EQUAL(p->category(), "Base Technologies");
74             BOOST_CHECK_EQUAL(p->summary(), "Novell AppArmor");
75             BOOST_CHECK_EQUAL(p->icon(), "pattern-apparmor");
76             BOOST_CHECK_EQUAL(p->userVisible(), true);
77             BOOST_CHECK_EQUAL(p->isDefault(), false);
78         }
79         if ( s.ident() == "pattern:default" )
80         {
81             c++;
82             Pattern::Ptr p = asKind<Pattern>(makeResObject(s));
83             BOOST_CHECK(p);
84             BOOST_CHECK_EQUAL(p->userVisible(), false);
85         }
86     }
87
88     // check that we actually found all testeable
89     // resolvables
90     BOOST_CHECK_EQUAL(c, 2);
91 }
92
93 BOOST_AUTO_TEST_CASE(asStringTest)
94 {
95   BOOST_CHECK_EQUAL( sat::Solvable(0).asString(), "noSolvable" );
96   BOOST_CHECK_EQUAL( sat::Solvable(1).asString(), "systemSolvable" );
97   BOOST_CHECK_EQUAL( sat::Solvable(2).asString(), "product:openSUSE-11.1.x86_64" );
98   BOOST_CHECK_EQUAL( sat::Solvable(3693).asString(), "autoyast2-2.16.19-0.1.src" );
99   BOOST_CHECK_EQUAL( sat::Solvable(19222).asString(), "noSolvable" );
100 #if 0
101   Repository r = sat::Pool::instance().reposFind("update");
102   for_( it, r.solvablesBegin(), r.solvablesEnd() )
103   {
104     BOOST_CHECK_EQUAL( (*it).asString(), str::numstring((*it).id()) );
105   }
106 #endif
107 }
108
109 BOOST_AUTO_TEST_CASE(SplitIdent)
110 {
111   sat::Solvable::SplitIdent split;
112   BOOST_CHECK_EQUAL( split.ident(), IdString() );
113   BOOST_CHECK_EQUAL( split.kind(), ResKind() );
114   BOOST_CHECK_EQUAL( split.name(), IdString() );
115
116   // - kind defaults to package
117   // - package and srcpackage have NO namespaced ident.
118
119   split = sat::Solvable::SplitIdent(    "foo" );
120   BOOST_CHECK_EQUAL( split.ident(),     "foo" );
121   BOOST_CHECK_EQUAL( split.kind(),      ResKind::package );
122   BOOST_CHECK_EQUAL( split.name(),      "foo" );
123
124   split = sat::Solvable::SplitIdent(    "nokind:foo" );
125   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
126   BOOST_CHECK_EQUAL( split.kind(),      ResKind::package );
127   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
128
129   split = sat::Solvable::SplitIdent(    "package:nokind:foo" );
130   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
131   BOOST_CHECK_EQUAL( split.kind(),      ResKind::package );
132   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
133
134   split = sat::Solvable::SplitIdent(    "pattern:nokind:foo" );
135   BOOST_CHECK_EQUAL( split.ident(),     "pattern:nokind:foo" );
136   BOOST_CHECK_EQUAL( split.kind(),      ResKind::pattern );
137   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
138
139   split = sat::Solvable::SplitIdent(    "srcpackage:nokind:foo" );
140   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" ); // !!!
141   BOOST_CHECK_EQUAL( split.kind(),      ResKind::srcpackage );
142   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
143
144   // now split from kind,name
145   // - kind spec in name wins!
146
147   split = sat::Solvable::SplitIdent(    ResKind::package,       "nokind:foo" );
148   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
149   BOOST_CHECK_EQUAL( split.kind(),      ResKind::package );
150   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
151
152   split = sat::Solvable::SplitIdent(    ResKind::pattern,       "nokind:foo" );
153   BOOST_CHECK_EQUAL( split.ident(),     "pattern:nokind:foo" );
154   BOOST_CHECK_EQUAL( split.kind(),      ResKind::pattern );
155   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
156
157   split = sat::Solvable::SplitIdent(    ResKind::srcpackage,    "nokind:foo" );
158   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
159   BOOST_CHECK_EQUAL( split.kind(),      ResKind::srcpackage );
160   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
161
162   split = sat::Solvable::SplitIdent(    ResKind::package,       "package:nokind:foo" );
163   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
164   BOOST_CHECK_EQUAL( split.kind(),      ResKind::package );
165   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
166
167   split = sat::Solvable::SplitIdent(    ResKind::pattern,       "package:nokind:foo" );
168   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
169   BOOST_CHECK_EQUAL( split.kind(),      ResKind::package );
170   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
171
172   split = sat::Solvable::SplitIdent(    ResKind::srcpackage,    "package:nokind:foo" );
173   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
174   BOOST_CHECK_EQUAL( split.kind(),      ResKind::package );
175   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
176
177   split = sat::Solvable::SplitIdent(    ResKind::package,       "pattern:nokind:foo" );
178   BOOST_CHECK_EQUAL( split.ident(),     "pattern:nokind:foo" );
179   BOOST_CHECK_EQUAL( split.kind(),      ResKind::pattern );
180   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
181
182   split = sat::Solvable::SplitIdent(    ResKind::pattern,       "pattern:nokind:foo" );
183   BOOST_CHECK_EQUAL( split.ident(),     "pattern:nokind:foo" );
184   BOOST_CHECK_EQUAL( split.kind(),      ResKind::pattern );
185   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
186
187   split = sat::Solvable::SplitIdent(    ResKind::srcpackage,    "pattern:nokind:foo" );
188   BOOST_CHECK_EQUAL( split.ident(),     "pattern:nokind:foo" );
189   BOOST_CHECK_EQUAL( split.kind(),      ResKind::pattern );
190   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
191
192   split = sat::Solvable::SplitIdent(    ResKind::package,       "srcpackage:nokind:foo" );
193   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
194   BOOST_CHECK_EQUAL( split.kind(),      ResKind::srcpackage );
195   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
196
197   split = sat::Solvable::SplitIdent(    ResKind::pattern,       "srcpackage:nokind:foo" );
198   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
199   BOOST_CHECK_EQUAL( split.kind(),      ResKind::srcpackage );
200   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
201
202   split = sat::Solvable::SplitIdent(    ResKind::srcpackage,    "srcpackage:nokind:foo" );
203   BOOST_CHECK_EQUAL( split.ident(),     "nokind:foo" );
204   BOOST_CHECK_EQUAL( split.kind(),      ResKind::srcpackage );
205   BOOST_CHECK_EQUAL( split.name(),      "nokind:foo" );
206
207 }
208
209 BOOST_AUTO_TEST_CASE(duData)
210 {
211   DiskUsageCounter ducounter( DiskUsageCounter::justRootPartition() );
212
213   sat::Solvable s = *sat::WhatProvides( Capability("glibc-devel.x86_64 == 2.8.90-2.3") ).begin();
214   BOOST_CHECK_EQUAL( (*ducounter.disk_usage( s ).begin()).pkg_size, 30629 );
215 }