2 #include <zypp/PurgeKernels.h>
4 #include <boost/test/data/test_case.hpp>
7 using namespace boost::unit_test;
9 namespace boost { namespace test_tools { namespace tt_detail {
11 struct print_log_value< std::map<std::string, bool> > {
12 void operator()( std::ostream& ostr,
13 std::map<std::string, bool> const& set)
15 ostr << "{" << std::endl;
16 for( const auto &elem : set ) ostr << "'" << elem.first << "'," << std::endl;
17 ostr << "}" << std::endl;
23 std::string makeNVRA( const PoolItem &pck ) {
24 return pck.name() + "-" + pck.edition().asString() + "." + pck.arch().asString();
27 using TestSample = std::tuple<
29 std::string, // uname_r
31 std::string, // keepSpec
32 std::map<std::string, bool> // expectedRems
35 std::vector<TestSample> maketestdata() {
38 TESTS_SRC_DIR"/zypp/data/PurgeKernels/simple",
41 "oldest,running,latest",
43 { "kernel-default-1-2.x86_64", false },
44 { "kernel-default-devel-1-2.x86_64", false },
45 { "kernel-default-devel-debuginfo-1-2.x86_64", false },
46 { "kernel-devel-1-2.noarch", false },
47 { "kernel-livepatch-default-1-2.x86_64", false },
48 { "kernel-syms-1-2.x86_64", false },
49 { "kernel-default-1-4.x86_64", false },
50 { "kernel-default-devel-1-4.x86_64", false },
51 { "kernel-default-devel-debuginfo-1-4.x86_64", false },
52 { "kernel-devel-1-4.noarch", false },
53 { "kernel-syms-1-4.x86_64", false },
54 // left over devel packages that need to go away too
55 { "kernel-devel-1-1.2.noarch", false },
56 { "kernel-source-1-1.2.noarch", false },
57 { "kernel-default-devel-1-3.x86_64", false },
58 { "kernel-default-devel-debuginfo-1-3.x86_64", false },
59 { "kernel-devel-1-3.noarch", false },
62 //test that keeps only the running kernel
64 TESTS_SRC_DIR"/zypp/data/PurgeKernels/simple",
69 { "kernel-default-1-1.x86_64", false },
70 { "kernel-default-devel-1-1.x86_64", false },
71 { "kernel-default-devel-debuginfo-1-1.x86_64", false },
72 { "kernel-livepatch-default-1-1.x86_64", false },
73 { "kernel-devel-1-1.noarch", false },
74 { "kernel-syms-1-1.x86_64", false },
75 { "kernel-source-1-1.noarch", false },
76 { "kernel-default-1-2.x86_64", false },
77 { "kernel-default-devel-1-2.x86_64", false },
78 { "kernel-default-devel-debuginfo-1-2.x86_64", false },
79 { "kernel-devel-1-2.noarch", false },
80 { "kernel-livepatch-default-1-2.x86_64", false },
81 { "kernel-syms-1-2.x86_64", false },
82 { "kernel-default-1-4.x86_64", false },
83 { "kernel-default-devel-1-4.x86_64", false },
84 { "kernel-default-devel-debuginfo-1-4.x86_64", false },
85 { "kernel-devel-1-4.noarch", false },
86 { "kernel-syms-1-4.x86_64", false },
87 { "kernel-default-1-5.x86_64", false },
88 { "kernel-default-devel-1-5.x86_64", false },
89 { "kernel-default-devel-debuginfo-1-5.x86_64", false },
90 { "kernel-devel-1-5.noarch", false },
91 { "kernel-syms-1-5.x86_64", false },
92 { "dummy-kmp-default-1-0.x86_64", false },
93 // left over devel packages that need to go away too
94 { "kernel-devel-1-1.2.noarch", false },
95 { "kernel-source-1-1.2.noarch", false },
96 { "kernel-default-devel-1-3.x86_64", false },
97 { "kernel-devel-1-3.noarch", false },
98 { "kernel-default-devel-1-3.x86_64", false },
99 { "kernel-default-devel-debuginfo-1-3.x86_64", false },
103 TESTS_SRC_DIR"/zypp/data/PurgeKernels/simple",
106 "oldest+1,running,latest-1",
108 { "kernel-default-1-1.x86_64", false },
109 { "kernel-livepatch-default-1-1.x86_64", false },
110 { "kernel-default-devel-1-1.x86_64", false },
111 { "kernel-default-devel-debuginfo-1-1.x86_64", false },
112 { "kernel-devel-1-1.noarch", false },
113 { "kernel-syms-1-1.x86_64", false },
114 { "kernel-source-1-1.noarch", false },
115 { "kernel-default-1-5.x86_64", false },
116 { "kernel-default-devel-1-5.x86_64", false },
117 { "kernel-default-devel-debuginfo-1-5.x86_64", false },
118 { "kernel-devel-1-5.noarch", false },
119 { "kernel-syms-1-5.x86_64", false },
120 { "dummy-kmp-default-1-0.x86_64", false },
121 // left over devel packages that need to go away too
122 { "kernel-default-devel-1-3.x86_64", false },
123 { "kernel-default-devel-debuginfo-1-3.x86_64", false },
124 { "kernel-devel-1-3.noarch", false },
128 //kernel-1-1 has a non kernel package depending on it, it should not be removed
129 TESTS_SRC_DIR"/zypp/data/PurgeKernels/withdeps",
134 { "kernel-default-1-2.x86_64", false },
135 { "kernel-default-devel-1-2.x86_64", false },
136 { "kernel-default-devel-debuginfo-1-2.x86_64", false },
137 { "kernel-devel-1-2.noarch", false },
138 { "kernel-livepatch-default-1-2.x86_64", false },
139 { "kernel-syms-1-2.x86_64", false },
140 // the following packages are not held back because they do not fit keep spec and no deps are keeping them
141 { "kernel-default-devel-1-1.x86_64", false },
142 { "kernel-default-devel-debuginfo-1-1.x86_64", false },
143 { "kernel-devel-1-1.noarch", false},
144 { "kernel-syms-1-1.x86_64", false},
148 //kernel-1-5 provides a symbol for a kmp that has a non kernel package depending on it, it should not be removed
149 TESTS_SRC_DIR"/zypp/data/PurgeKernels/withdeps",
154 { "kernel-default-1-2.x86_64", false },
155 { "kernel-default-devel-1-2.x86_64", false },
156 { "kernel-default-devel-debuginfo-1-2.x86_64", false },
157 { "kernel-devel-1-2.noarch", false },
158 { "kernel-livepatch-default-1-2.x86_64", false },
159 { "kernel-syms-1-2.x86_64", false },
160 { "kernel-default-devel-1-5.x86_64", false },
161 { "kernel-default-devel-debuginfo-1-5.x86_64", false },
162 { "kernel-devel-1-5.noarch", false },
163 { "kernel-syms-1-5.x86_64", false },
167 //kernel-1-2 is explicitely in the keep spec, it should not be removed
168 //kernel-1-5 provides a symbol for a kmp that has a non kernel package depending on it, it should not be removed
169 TESTS_SRC_DIR"/zypp/data/PurgeKernels/withdeps",
174 { "kernel-default-devel-1-5.x86_64", false },
175 { "kernel-default-devel-debuginfo-1-5.x86_64", false },
176 { "kernel-devel-1-5.noarch", false },
177 { "kernel-syms-1-5.x86_64", false },
181 //kernel-default-1-1.x86_64 is the running kernel it should not be removed,
182 //in all sets with different arch only the latest should be kept
183 TESTS_SRC_DIR"/zypp/data/PurgeKernels/arch",
188 { "kernel-default-1-1.aarch64", false },
189 { "kernel-default-1-1.i686", false },
191 //{ "kernel-syms-1-1.x86_64", false },
192 //{ "kernel-default-devel-1-1.x86_64", false },
193 //{ "kernel-default-devel-debuginfo-1-1.x86_64", false },
195 { "kernel-default-1-2.aarch64", false },
196 { "kernel-default-1-2.i686", false },
197 { "kernel-default-1-2.x86_64", false },
199 { "kernel-default-devel-1-1.aarch64", false },
200 { "kernel-default-devel-1-1.i686", false },
201 { "kernel-default-devel-1-2.aarch64", false },
202 { "kernel-default-devel-1-2.i686", false },
203 { "kernel-default-devel-1-2.x86_64", false },
205 { "kernel-default-devel-debuginfo-1-1.aarch64", false },
206 { "kernel-default-devel-debuginfo-1-1.i686", false },
207 { "kernel-default-devel-debuginfo-1-2.aarch64", false },
208 { "kernel-default-devel-debuginfo-1-2.i686", false },
209 { "kernel-default-devel-debuginfo-1-2.x86_64", false },
211 { "kernel-devel-1-2.noarch", false },
213 { "kernel-livepatch-default-1-2.aarch64", false },
214 { "kernel-livepatch-default-1-2.i686", false },
215 { "kernel-livepatch-default-1-2.x86_64", false },
217 { "kernel-syms-1-1.aarch64", false },
218 { "kernel-syms-1-1.i686", false },
220 { "kernel-syms-1-2.aarch64", false },
221 { "kernel-syms-1-2.i686", false },
222 { "kernel-syms-1-2.x86_64", false },
226 TESTS_SRC_DIR"/zypp/data/PurgeKernels/rebuild",
231 { "kernel-source-1-1.noarch", false },
235 TESTS_SRC_DIR"/zypp/data/PurgeKernels/fancybuildnr",
236 "5.8.1-3.g846658e-default",
238 "latest,latest-1,running",
240 { "kernel-default-5.7.8-1.1.g8f507a0.x86_64", false },
241 { "kernel-default-5.7.9-1.1.ga010166.x86_64", false },
242 { "kernel-default-5.7.10-1.1.g6a1b5cf.x86_64", false },
243 { "kernel-default-5.7.10-3.1.gd1148b9.x86_64", false },
244 { "kernel-default-5.7.11-1.1.g5015994.x86_64", false },
245 { "kernel-default-5.7.12-1.1.g9c98feb.x86_64", false },
246 { "kernel-default-5.8.0-1.1.gd3bf2d6.x86_64", false },
247 { "kernel-default-5.8.0-2.1.g9bc0044.x86_64", false },
248 { "kernel-default-5.8.0-3.1.gd4e7682.x86_64", false },
249 { "kernel-default-5.8.1-1.1.ge6658c9.x86_64", false },
250 // those are running, latest and latest-1 , they should stay
251 //{ "kernel-default-5.8.1-2.1.g553537d.x86_64", false },
252 //{ "kernel-default-5.8.1-3.1.g846658e.x86_64", false },
256 TESTS_SRC_DIR"/zypp/data/PurgeKernels/kernel-base",
261 { "kernel-default-base-5.7.8-1.1.1.1.x86_64", false },
262 { "kernel-default-base-5.7.8-2.1.1.1.x86_64", false },
263 //{ "kernel-default-base-5.7.8-3.1.1.1.x86_64", false },
264 { "kernel-default-base-5.8.8-2.1.1.1.x86_64", false },
268 TESTS_SRC_DIR"/zypp/data/PurgeKernels/kernel-base",
271 "running, 5.7.8-2.1.1",
273 { "kernel-default-base-5.7.8-1.1.1.1.x86_64", false },
274 { "kernel-default-base-5.8.8-2.1.1.1.x86_64", false },
275 //{ "kernel-default-base-5.7.8-2.1.1.1.x86_64", false },
276 //{ "kernel-default-base-5.7.8-3.1.1.1.x86_64", false },
280 TESTS_SRC_DIR"/zypp/data/PurgeKernels/flavour",
285 { "kernel-rt-1-1.x86_64", false },
286 { "kernel-rt-devel-1-1.x86_64", false },
287 { "kernel-rt-devel-debuginfo-1-1.x86_64", false },
288 { "kernel-devel-rt-1-1.noarch", false },
289 { "kernel-syms-rt-1-1.x86_64", false },
290 { "kernel-source-rt-1-1.noarch", false },
291 { "kernel-rt-1-2.x86_64", false },
292 { "kernel-rt-devel-1-2.x86_64", false },
293 { "kernel-rt-devel-debuginfo-1-2.x86_64", false },
294 { "kernel-devel-rt-1-2.noarch", false },
295 { "kernel-syms-rt-1-2.x86_64", false },
296 { "kernel-rt-1-4.x86_64", false },
297 { "kernel-rt-devel-1-4.x86_64", false },
298 { "kernel-rt-devel-debuginfo-1-4.x86_64", false },
299 { "kernel-devel-rt-1-4.noarch", false },
300 { "kernel-syms-rt-1-4.x86_64", false },
301 { "kernel-rt-1-5.x86_64", false },
302 { "kernel-rt-devel-1-5.x86_64", false },
303 { "kernel-rt-devel-debuginfo-1-5.x86_64", false },
304 { "kernel-devel-rt-1-5.noarch", false },
305 { "kernel-syms-rt-1-5.x86_64", false },
306 // left over devel packages that need to go away too
307 { "kernel-devel-rt-1-1.2.noarch", false },
308 { "kernel-source-rt-1-1.2.noarch", false },
309 { "kernel-rt-devel-1-3.x86_64", false },
310 { "kernel-devel-rt-1-3.noarch", false },
311 { "kernel-rt-devel-1-3.x86_64", false },
312 { "kernel-rt-devel-debuginfo-1-3.x86_64", false },
319 namespace bdata = boost::unit_test::data;
321 BOOST_DATA_TEST_CASE(purge_kernels, bdata::make( maketestdata() ), repoPath, uname_r, arch, keepSpec, expectedRems )
323 TestSetup test( Arch_x86_64 );
324 test.loadTestcaseRepos( repoPath );
326 auto expectedRemovals = expectedRems;
329 krnls.setUnameR( uname_r );
330 krnls.setKernelArch( arch );
331 krnls.setKeepSpec( keepSpec );
332 krnls.markObsoleteKernels();
334 auto pool = ResPool::instance();
335 BOOST_REQUIRE( pool.resolver().resolvePool() );
337 unsigned removeCount = 0;
338 const filter::ByStatus toBeUninstalledFilter( &ResStatus::isToBeUninstalled );
339 for ( auto it = pool.byStatusBegin( toBeUninstalledFilter ); it != pool.byStatusEnd( toBeUninstalledFilter ); it++ ) {
342 auto pck = expectedRemovals.find( makeNVRA(*it) );
343 BOOST_REQUIRE_MESSAGE( pck != expectedRemovals.end(), std::string("Unexpected package removed: ") + makeNVRA(*it) + (it->status().isByUser() ? " (by user)" : " (autoremoved)") );
348 for ( const auto &rem : expectedRemovals ) {
350 std::cout << std::string( "Expected package removal did not happen for: ") + rem.first << std::endl;
351 //BOOST_REQUIRE_MESSAGE( rem.second, std::string( "Expected package removal did not happen for: ") + rem.first );
354 BOOST_REQUIRE_EQUAL( expectedRemovals.size(), removeCount );