3 #include <boost/test/unit_test.hpp>
5 #include "zypp/base/Logger.h"
6 #include "zypp/base/Easy.h"
7 #include "zypp/Pattern.h"
8 #include "zypp/sat/Solvable.h"
12 #define BOOST_TEST_MODULE Solvable
18 using namespace boost::unit_test;
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" );
30 BOOST_GLOBAL_FIXTURE( TestInit );
32 BOOST_AUTO_TEST_CASE(attributes)
34 MIL << sat::Pool::instance();
35 Repository r = sat::Pool::instance().reposFind("opensuse");
39 for ( Repository::SolvableIterator it = r.solvablesBegin();
40 it != r.solvablesEnd();
43 sat::Solvable s = *it;
44 //MIL << s.ident() << endl;
45 if ( s.ident() == "pattern:apparmor" )
49 // solvable 21795 (21796):
50 // name: pattern:apparmor 11.0-67 i586
51 // vendor: SUSE LINUX Products GmbH, Nuernberg, Germany
53 // pattern:apparmor = 11.0-67
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));
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);
79 if ( s.ident() == "pattern:default" )
82 Pattern::Ptr p = asKind<Pattern>(makeResObject(s));
84 BOOST_CHECK_EQUAL(p->userVisible(), false);
88 // check that we actually found all testeable
90 BOOST_CHECK_EQUAL(c, 2);
93 BOOST_AUTO_TEST_CASE(asStringTest)
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" );
101 Repository r = sat::Pool::instance().reposFind("update");
102 for_( it, r.solvablesBegin(), r.solvablesEnd() )
104 BOOST_CHECK_EQUAL( (*it).asString(), str::numstring((*it).id()) );
109 BOOST_AUTO_TEST_CASE(SplitIdent)
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() );
116 // - kind defaults to package
117 // - package and srcpackage have NO namespaced ident.
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" );
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" );
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" );
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" );
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" );
144 // now split from kind,name
145 // - kind spec in name wins!
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" );
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" );
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" );
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" );
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" );
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" );
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" );
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" );
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" );
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" );
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" );
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" );
209 BOOST_AUTO_TEST_CASE(duData)
211 DiskUsageCounter ducounter( DiskUsageCounter::justRootPartition() );
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 );