From 8e5b197e3f199dd06b6298564ed57d879d0e9873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Thu, 3 Nov 2016 12:52:36 +0100 Subject: [PATCH 1/6] pungi: Add tests for depsolving MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These are tests written by Daniel Mach originally for Distill-NG. They are ported to current Pungi. The test repositories are committed in the tests/fixtures/ directory. This is the same data that is used for test compose, but the actual RPM files are not present. Some tests are adapted from dmach's fork of Pungi. Some of the packages are marked with a comment saying they are important. These are the packages that the test is specifically trying to get included in the package set. There are also explicit tests for packages that should not be included. Two tests are skipped for now as there is a bug preventing them from passing. This is related to fulltree being done for packages that are explicitly multilib. The depsolver is called by invoking a separate executable, so the coverage data is wrong. Signed-off-by: Lubomír Sedlář --- bin/pungi | 10 +- tests/data/dummy-comps.xml | 1 + ...5cb2f1e5b36e103078637-filelists.sqlite.bz2 | Bin 0 -> 2598 bytes ...64a4354cf199c917c074698-primary.sqlite.bz2 | Bin 0 -> 6090 bytes ...6dcd5715191fbd459d569e83596fc-other.xml.gz | Bin 0 -> 1709 bytes ...252ea5690248c4c4dbeb8c55b-filelists.xml.gz | Bin 0 -> 1632 bytes ...81a2b8568483f6a177dca33a5ab-primary.xml.gz | Bin 0 -> 2801 bytes ...aab7105920d60244000e17446-other.sqlite.bz2 | Bin 0 -> 3055 bytes .../repo-krb5-lookaside/repodata/repomd.xml | 55 + ...7bb082278d96eebe4bf0b9012-filelists.xml.gz | Bin 0 -> 19701 bytes ...086cf087ca00d183d97d57a06-other.sqlite.bz2 | Bin 0 -> 29618 bytes ...7ffbbbf95e110a388e15f35-dummy-comps.xml.gz | Bin 0 -> 1244 bytes ...b5e70823525c3a3f4d45b7984ed-primary.xml.gz | Bin 0 -> 32219 bytes ...a104a202584e71f57bc247a32f41b-other.xml.gz | Bin 0 -> 19712 bytes ...fdd2dfe006d3caf69d26a6f-primary.sqlite.bz2 | Bin 0 -> 57571 bytes ...e2d1e32f21ef69f550141-filelists.sqlite.bz2 | Bin 0 -> 25706 bytes ...89a9e67b25c6341941914e1077-dummy-comps.xml | 164 ++ tests/fixtures/repos/repo/repodata/repomd.xml | 69 + tests/test_pungi.py | 1363 +++++++++++++++++ 19 files changed, 1661 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/repos/repo-krb5-lookaside/repodata/4fbc657d01000f79cec7b74ada066dfa66fc745a2745cb2f1e5b36e103078637-filelists.sqlite.bz2 create mode 100644 tests/fixtures/repos/repo-krb5-lookaside/repodata/aeb3a17a03cc002051da0120cc3095d105fc74bb764a4354cf199c917c074698-primary.sqlite.bz2 create mode 100644 tests/fixtures/repos/repo-krb5-lookaside/repodata/b9dcd75dda89076e1fdbc4a194d97ce3efc6dcd5715191fbd459d569e83596fc-other.xml.gz create mode 100644 tests/fixtures/repos/repo-krb5-lookaside/repodata/d10e4fa40128e91767cbe4f9fa8d647da70b24e252ea5690248c4c4dbeb8c55b-filelists.xml.gz create mode 100644 tests/fixtures/repos/repo-krb5-lookaside/repodata/e2007d0883d3c7e7b1409b578d6134b55e42a81a2b8568483f6a177dca33a5ab-primary.xml.gz create mode 100644 tests/fixtures/repos/repo-krb5-lookaside/repodata/feada0072a73fd3d224f4ddfb0447c5cfaafa8caab7105920d60244000e17446-other.sqlite.bz2 create mode 100644 tests/fixtures/repos/repo-krb5-lookaside/repodata/repomd.xml create mode 100644 tests/fixtures/repos/repo/repodata/05ecf05b96e9d055dc9e3df028b1af2cf6661af7bb082278d96eebe4bf0b9012-filelists.xml.gz create mode 100644 tests/fixtures/repos/repo/repodata/129bcb220b766abd0d38b33f919af26b017c6ae086cf087ca00d183d97d57a06-other.sqlite.bz2 create mode 100644 tests/fixtures/repos/repo/repodata/2f8cc4b5cf852eca9838393db012ad4e494ccea437ffbbbf95e110a388e15f35-dummy-comps.xml.gz create mode 100644 tests/fixtures/repos/repo/repodata/443dade43e632f2bbb768b1768cb090175429b5e70823525c3a3f4d45b7984ed-primary.xml.gz create mode 100644 tests/fixtures/repos/repo/repodata/74a554f4a2c7392d9ef0cf6a07652d7a198a104a202584e71f57bc247a32f41b-other.xml.gz create mode 100644 tests/fixtures/repos/repo/repodata/9249118941570779bf043a7a393f0308f891ac1d7fdd2dfe006d3caf69d26a6f-primary.sqlite.bz2 create mode 100644 tests/fixtures/repos/repo/repodata/a5891b48313e9cd503e94e48c93a08b5160ce04f4fde2d1e32f21ef69f550141-filelists.sqlite.bz2 create mode 100644 tests/fixtures/repos/repo/repodata/cd2e022a3f1163bed5dd38328a2c0bd7a8db1589a9e67b25c6341941914e1077-dummy-comps.xml create mode 100644 tests/fixtures/repos/repo/repodata/repomd.xml create mode 100644 tests/test_pungi.py diff --git a/bin/pungi b/bin/pungi index 255c63d1..d1100265 100755 --- a/bin/pungi +++ b/bin/pungi @@ -12,11 +12,19 @@ # along with this program; if not, see . import os +import selinux +import sys + +here = sys.path[0] +if here != '/usr/bin': + # Git checkout + sys.path.insert(1, os.path.dirname(here)) + from pungi import get_full_version import pungi.gather import pungi.config import pungi.ks -import selinux + def main(): diff --git a/tests/data/dummy-comps.xml b/tests/data/dummy-comps.xml index 179635e7..18544aa5 100644 --- a/tests/data/dummy-comps.xml +++ b/tests/data/dummy-comps.xml @@ -159,5 +159,6 @@ + diff --git a/tests/fixtures/repos/repo-krb5-lookaside/repodata/4fbc657d01000f79cec7b74ada066dfa66fc745a2745cb2f1e5b36e103078637-filelists.sqlite.bz2 b/tests/fixtures/repos/repo-krb5-lookaside/repodata/4fbc657d01000f79cec7b74ada066dfa66fc745a2745cb2f1e5b36e103078637-filelists.sqlite.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..6e160eb5ba446e8995afab42ea08bfe0a8e02c1a GIT binary patch literal 2598 zcmV+>3fc8ST4*&fL0KkKSs)4foB#&~|NsC0|Np>$f9n75{Pn-@-)JGw00B?}L2v*C zLI4H8A}wGHZ$giN000000UE#n0HC3ngrZFo6H0qc8br@iYNxSDo~NNt$xq6jqtxD% z(dh@N`lpm=2enTqG=Hf^L)6pM(duTNskB5G0Wbgn34jE^001TcO$-140000%fD-@! z0GI$w0007D1kk_$000047y&Q<011EuzyJUy08I=40000086;0iWW+rtCYl34&;T?5 z0000D0002U0gwu+o&XRjB54gY27u5200*g)Kn8|@00003Ky4>FQ2_7w7=Uo7c)Y9t zJv#)1FvK-gtN{Tu5Qc&P>C?Av)-2jHAp^+5Xp&eY5+;%=)q#UenF0#IWJEh6f~a1o z;SbN=;&s2HIWtqWQY-gr+|{>!_MPk+I~v$Etm|9Dg9aOTI@o&z<;!26YqBCEUQxVk z_hgCdvrX6Cs?~=p3v=nl|2)dGknos%B;5w!^u6+28vo(vK0_WWRO99#@*5+)zB9O5E6peOooF$1GxIn$8M2Px*_&PyFTp{Vy2(T4n~Vg2Y@6hMI- z$wW;t2~g8edMT946qBr2rd6EA-9?3ad0Aco{YK?$*%7lfC2~tFQvPF+PF?Ozko<=( zaVr$_EBwpz15Et%rgppROzt}Bwi=A5@iH@EqwfCByskRpktm$>qG2D>WwpdW@m-X( zsSowx-RyqqW-kh2FbbB`e3gCV7eP13e8y3Ia_G20mRN07P$J=@NFb7GzR3nze3Vyh zM^2Mz7c4ZIl!Fhp`JFv<(+#GMU8vJe8+PT>P8D$5uCALdnnlZ>UM7l2BBE$JNe77X zk_go=T)9oAmtETFIQ693c!Dal<->)XIYBkhNdsxc>TevFRfSzAw+O}Ok|@))-aKtq zl~qTGrjw_S6+zE4X{U@ZyM&!C+iADCI&I^$9kYlil87?f$4*&vl5lApxLH?=F$R=) znipvWFy)j^RYjK8O(juL(=D*NOD2PFJmKoEIZ1b|qvs5~Srt@SG+>$uB_iEV7fH6?PPpP_ zlv!llw93v>cB`ZrcAD znMJf4P3JzM@m3d27mF&QE4G6SvC8N&nn1LKyRMt@>T&$vu z=?_| zDuYQ9MVBlxx@kFdyDP5JYFV^q=~mo0UF%3T<-sKzMYfT2k{6tpWb@AyX`~x;qlFM{ zWZ81$8dD-37*ZXMKA{<-W8B%&)JEOaM9MkJk7CU~ z4-QRp2ecS_y61R`XCT;{FN7{;^w2w6t28WYqV2513cgDZmV)RkEc`izemL=p>R=MW+jYc!e! zSZ#)6(@Lh&i!$l8;T&xVI6-t0FtZCPnh((RCD>7B6h(Dce^0Mha+}-XvzKYlZy0-? z%pju(I%Nm_diC>tK5v@K-)%NrBJu83=a@V8MeiE-J;zQS=P0Yn=s9V%TV+Pgvh5UC zWykVz@WOnmi{NtM+Ah;bfhE##!!FZ3y}g@V2Z-Ur2qDj|cx}n-ot03FYP7IaR_7B+;~1Rm-M1Ln6Fk#iKe=&IYyu4l-;d&Z;kP?ziqpC(+sSN zjOMPqc;OThdnTLdetll@3BGCyzAV>a!tZi#eFRfoSB_rixkO&)zJrt3(;)ke6+^3K zSgP9z>>+f9NlJr+grsA_kP(&vqMBm91m6Q`ERt`1l@Eb-8!DQJvXg`rVQ0|%F>qD% z4ZKY8<4)39w+Jk%Nkf#9v$`-zv$h^MO-7U=+bANsjjo%7)oH_MHsQjIw&4X9VK>fv zem__0J$&?GN);s_iQ)t|#L8}x5G78dp?LrbAVw0&dln%AQ#G$?Q4o-b{1Gm3vJ}9m zX~AI@3*zxgSf>rPvkA*H?3&fsjK9EXwyZJ65dt+|a6*(xxGGmu&(PPJM*}N+)eQ$x zB~*{^!`(zgTquZ(jduQ^+C3MBn`YT%x}@WQ7FktnFtSThA0h+Ssh|il%m2mPkxmpO I2m*fR0C;K2ivR!s literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo-krb5-lookaside/repodata/aeb3a17a03cc002051da0120cc3095d105fc74bb764a4354cf199c917c074698-primary.sqlite.bz2 b/tests/fixtures/repos/repo-krb5-lookaside/repodata/aeb3a17a03cc002051da0120cc3095d105fc74bb764a4354cf199c917c074698-primary.sqlite.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..acc11b7eb988bcffab479647f064086ab969f20d GIT binary patch literal 6090 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo-krb5-lookaside/repodata/b9dcd75dda89076e1fdbc4a194d97ce3efc6dcd5715191fbd459d569e83596fc-other.xml.gz b/tests/fixtures/repos/repo-krb5-lookaside/repodata/b9dcd75dda89076e1fdbc4a194d97ce3efc6dcd5715191fbd459d569e83596fc-other.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..5b025e4418dd9328804b8a2db64c8cdd857ad94d GIT binary patch literal 1709 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo-krb5-lookaside/repodata/e2007d0883d3c7e7b1409b578d6134b55e42a81a2b8568483f6a177dca33a5ab-primary.xml.gz b/tests/fixtures/repos/repo-krb5-lookaside/repodata/e2007d0883d3c7e7b1409b578d6134b55e42a81a2b8568483f6a177dca33a5ab-primary.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..41f5ec01bd5dadb448d8355d3bd4d57fc362b202 GIT binary patch literal 2801 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 D@4aLT literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo-krb5-lookaside/repodata/feada0072a73fd3d224f4ddfb0447c5cfaafa8caab7105920d60244000e17446-other.sqlite.bz2 b/tests/fixtures/repos/repo-krb5-lookaside/repodata/feada0072a73fd3d224f4ddfb0447c5cfaafa8caab7105920d60244000e17446-other.sqlite.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..300f397c004e44a278782e5afe35cbf1bd1722d4 GIT binary patch literal 3055 zcmVq-m2QOacMu zH8cYzO$M3`27#afpaGBrKmZLrOpOAnr-aFZ3KB-9)C~YMG#UY+pfmsg0000000000 z002ur`z#bsSCJYZ0m_4+%hltmsN4u)gdzflk_%N8*Imt>q_+q_uW(;gkU%j*Sv+YK ziM!rJ&xZO4PXG*Jn(VPyfmcaf(odziy6<@VPZKn{D@`=hi_nLh{|+NCB202JwaUzw zCS8?O>9$j4O_f4?`VG#ZL9p6Qo@Nn@V`4dVuLd!bUa>aRlFWA+S*WbFT+Ei6l)Fr{ zI`<31=jr@Ql+y@`$k!ZxLc6p?XAY|3Ksq`kqGHzQFUHicl4&4gRj<#HICo%T~itT3o@GSn=r#nx^U%olx3GZ?wamcMZDflMp1J zkiK6fD=R7}Ftk%w2fLy2MpYR2gvcbm@jtP7EV=3aIi_ z!fz%Uu!7DPMB%b4vchR7i)TzSvvieB23}rTc%w+F@q~KH&Xq+*%BGAHK_sNz!=%$m z%XH9H!px=GC_77pReE2~n%68cn`N7-stF>Slu=IA(Qe~FPFxf_wci&05Wd|v6!cJQ< z&n)Ie6H!FkU1eHH(v2Xyl-s#>)mBDqJ6%K@DBOZ5vYP1myLQO5l%4mwrq*(T zEI4x0wOydAoF=1>7&&_#DV#imprIA4v$m2=2W^`!-35_RB$qOiOSV}A+n|GFT%vf5w-=fs$0 zcFeAuP1IgXyKe1;P+=lSuHj}Irjv&)S%sEmH8*J)w^59=i+7GPi%wh;QKVXB6_P`F z$-3u#_SuFIWy@xpAj+w(;nGb>!UMbm z4RWo!&_&^7=Bn&fbxj)mVDCvkHjhQzx<0#A%C@%UuuoEHw;2Uo;CSN>lz`*IrmAnC z=|>VQhSEHG#g^Rf?B!ls7Q$i>gdqssAqcoaFRz&76-nyjNQ%Tr#U2|GYa*<|@v7D( zmSRftBijHen(W4O23?@9cSyrNq&*J+r%|&=#xbrRBx-Qf8a0znJ-B<3ie6|xO+8%8 zlq$&?7!$xV)oxA}^k-eL;nC5>w!6X$Z8H#nZNk*4Y8qm3yAA%(w-H==f?PY3c-n+? zG$cCWLPK_LO(_CR13;wTly6Fk2~T$U*2^lY%P98CJ=zV>Rl^Qju59HdnMrh;Dw~Hb z&`Bi_aMN_#pt{H=s|lcl5m}XyVRpvu=tlFEF%!OrzCE_L{ zD4pl$W6=k)FY0<6GU=pL({vhP>QR;3GG%v2qTP11=-n+gMeDT7lw78f0!`9oW!$EB z-)y&oq-^%QE`l8R=Z2h~N!3QgT2Ymhc`|}AVRTW8vt=GmTRLT?nsCBMwj`3CIG(1` z?oer#&KYZ$3ZmJj*jc6%ZgJyGCh^Oc3RerT(heCUvaTFCaHA+HlI9UrIyiE+kh^46 zMW&lHx@RmmX+}$>yN1cMs%@8Gs_s;Bx~Z_EluIVEt}3#0LUmO(oGi*$aNWY}EZv6A zRbW-%ojuC}9MUr^oyx8%@9Z8XBN<6Kgp{ztK$$krC#mWt^ik5zR7qzjH&yF6VY4%3 z>n6Fn>oChHq=QZN!%h-abQ`karkp5|vrY@iRM1W0NiwSTSA?qd{d{e=jhabh9HZlX z;_1=q-4K!OH(S6wS6!Dd)lRmnXO z@nl|zwrR8zY?li7%h@8HmrVpxNmk9=Jl;Hbl|R)zowV)jdlpx=UA&iBcf9!Vq!d|K zwD$36quv>IncKDPawkoWEOs3!W)BTka03=(wHOs(nuu7d zJY!;y_db5+!lV?Dd8>Lyy x_Zd39@;)OC)0$oyf)K6|yLR&46NRdbRM}~z34P_jvUGp=yOJrwgn?zjUVwddr%V6< literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo-krb5-lookaside/repodata/repomd.xml b/tests/fixtures/repos/repo-krb5-lookaside/repodata/repomd.xml new file mode 100644 index 00000000..0b458937 --- /dev/null +++ b/tests/fixtures/repos/repo-krb5-lookaside/repodata/repomd.xml @@ -0,0 +1,55 @@ + + + 1473660739 + + e2007d0883d3c7e7b1409b578d6134b55e42a81a2b8568483f6a177dca33a5ab + 46587058c56b96e825286b8554a5b86283520d83ec58a104614d5844bcfd3cdb + + 1473660739 + 2801 + 33779 + + + d10e4fa40128e91767cbe4f9fa8d647da70b24e252ea5690248c4c4dbeb8c55b + 9f4376455b1ea41d6e006959067acde4605a9b5de50e01f1b651bf7d8dfda033 + + 1473660739 + 1632 + 5515 + + + b9dcd75dda89076e1fdbc4a194d97ce3efc6dcd5715191fbd459d569e83596fc + 1879f419d0383daf019f80a86a7222f5350984c77f12eced1c2b4a5e01c2d9a1 + + 1473660739 + 1709 + 9014 + + + aeb3a17a03cc002051da0120cc3095d105fc74bb764a4354cf199c917c074698 + 4cc6ddfb9385c77a10e97dac90f09d5a44b0acf600800a3926fd5e28992b4a19 + + 1473660739 + 6090 + 118784 + 10 + + + 4fbc657d01000f79cec7b74ada066dfa66fc745a2745cb2f1e5b36e103078637 + 06c7919d67cd29cacd4976a0fcd7f42a03f2787b3fdc8947899ef1742a8803bf + + 1473660739 + 2598 + 28672 + 10 + + + feada0072a73fd3d224f4ddfb0447c5cfaafa8caab7105920d60244000e17446 + f7e63aca97e99e2553e113ad85943fbfd1e10aaff7f2a449046de2adc6bc376d + + 1473660739 + 3055 + 24576 + 10 + + diff --git a/tests/fixtures/repos/repo/repodata/05ecf05b96e9d055dc9e3df028b1af2cf6661af7bb082278d96eebe4bf0b9012-filelists.xml.gz b/tests/fixtures/repos/repo/repodata/05ecf05b96e9d055dc9e3df028b1af2cf6661af7bb082278d96eebe4bf0b9012-filelists.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..29800d978878d7cf578b07e00523f417d672c764 GIT binary patch literal 19701 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 I*K{BO088@wEC2ui literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo/repodata/129bcb220b766abd0d38b33f919af26b017c6ae086cf087ca00d183d97d57a06-other.sqlite.bz2 b/tests/fixtures/repos/repo/repodata/129bcb220b766abd0d38b33f919af26b017c6ae086cf087ca00d183d97d57a06-other.sqlite.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..0f5a37896c8bb7a6d8cd0bc4c0a942fb2c23c73b GIT binary patch literal 29618 zcmagFdpy(c|3BV=6%b``nFbu;mwKAG4?Nvh(g~aAOaw;@4Y>d}P z8u7~c5X!NJ6qRh1MoUP2y*}^H=X?15^Sj?3&+C5edS1_6r|r5P*W+%(K*}ne8t`pnA?(Lv#n|D0l&iT(a?=0J~LuQ-*3w{61^7a26`Q!Amq~FIy(9x$d z=r{kSJ>OZjYx2Ku?mY3I$WFcg@D9MgEOB$kj(~06A-R2>g~E31N{5!8kVou2RPH*8 zlfJp-J><$9@q#f6A29j_z@y2|L^IU8;A{FZab;pxq`i07DADy~xIB_}@;dyOyVKYS zGjmg5@*k*&$IK)|N)L~^dvy@rTRuUYTnpV@D{pHaBe+j!$&J6x726`K1u-R+joC}Os1G^U;r7ofmu%fV`j6^XZ_vW7 zdm-NSxE7s52#9oCHEpGY6%$<*2Sk>s$>h#`MtC_CA>CD1N|{MwGm9ME)Cc9Ri4He+ zBjurD+dp6eTVz#C`hSf<@V|9F$Ra$*`j+;*p!jruHqCYC(W;@H8&v?O6A}`AdtHHh zOA?@?`^Rln4$;Pk{)j1qYF2GOv^|o~Anfv8sRUP^?e}o=CWa_fAX4lBw7v?`Mxz_yS6C{FV+I$;v*cA&@yqTo#u;X2a)Q29a z!sN5B1!=!cW9}t;JRj91S;24Kfduq@wb`{!Onjwh#p&#Hmwf#8B6y$Nt@K1y=u^Oh zl$|c^H@~!<8C%YEj!pMbc`6wwb2BM5phJ69?Qq27>}SB9xic3ZeLH*U(S5s1i)pjz zUse?kzq@XC-5)l%l&Sj7fP#uq`lHX7q|vuSvw%F=Oc3>~!m0q52bZm#gy87rE(+qaR+sPD32;tGyng zbB4HD$BsZd`Mn#Q^wi)~=GPZq2Z6rlkrAKss54lf3}U@}yUDdP`E7-gxcaA*H zNB+iue_!ovaGu&AEAV9q&*Z7o84AOPW!BHauN#m4oOp#-U*WQX=CZ<1d4c`kn)LWF zFl3Jgnd&&o9o0phujeYY`YR{#SRaBnn2+D6p19{Nm_^qJN-^&SzcX#l4Pn)9*j_kn zHP_1QD(*3DfYhd6FHMd6)Sd0uPEPphmcm}8>N}QPJ-zar)lCmP_ee*dLV~Y)`$NZfcZ11H-|k9p7Z1)a(K+1F+u537-Va%>55xQ?4F?0-Y0SsoCL*`m zn6}!4+$In)@bbyu=MZOB$^s5MG=<#`tbI#V-!svjtrjZ)@!6x(#v9Wtg2(aUgk8Ak zCa{z6GNX3DSq(ANOQ?w&28x*6(0KW?%(uBy8=`(v#w?!5mopTZsG zW;mD1iw=aCJHclztPPAmuGM5{dQ?t4EH}S(S56nf3%U3$q%ow@>}{Xs&5~m~I|>x< z+biBTyJhb@vk85>vHMw{k7gMqq*MO#tg*RLv8;Ih?e~b7N6rW(WCS;D&}_KEA~fOn zCAD%LfV{2pp4|T7kekeAnWLURWJsPc7bBrpxeQjO#92+tC>V74AJo``y%k@pU5xrq zlvl9T~N6hZaA1BM7kWAY* z{!mox9dV0o?An0iUrYU{m*_X1-aCwZTdKJpa-W>|Lu2~*clnr$q0oi<68q|Jy#HKl za<~D0r7S^K>P^YoRAb~bXq&FoY|y<=?D;C4#Yx)}Qw3S(5)MUSepx3*QpS)SUAHRf z$C>w&Z&=?NNmY7wv8cv8>E>@4y{Y2naG4!1^B!D=+go%r$=CWnsV-cIDp68YF)hD&jxw{TMBH)^h6aRA9>+

JV@$x!rZ}@;MrX2 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo/repodata/2f8cc4b5cf852eca9838393db012ad4e494ccea437ffbbbf95e110a388e15f35-dummy-comps.xml.gz b/tests/fixtures/repos/repo/repodata/2f8cc4b5cf852eca9838393db012ad4e494ccea437ffbbbf95e110a388e15f35-dummy-comps.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..c03e51f9589b18d2c1fdb410b56113382a85017e GIT binary patch literal 1244 zcmV<21S9(&iwFP!000001I<|5ZreBzea~000`@Jml5|m|fbF8WZm?+*#Ljm2DWJuX zMVKO0l1k#g@91XBis`0Kce5{sbU0_EIl~!_-2e2HO7Z~43atjges3=zpd!tMnht`y z@fke~J`H#J?@q3d$N$`%l1QhSB{z3Rmlww*pka6moczJuF1b)qFAPt{C*-)a5h~VU zczP9(pd|IU;{m!VZ-zTNg!JE0O3rVu?`}qf(h8ayoo7S5!fU~Ykv7l|@uET$OJR6i zV&!FpaJt!Yclz&GON84QAyDbAcW^I*vHG@a84vq?W(+SSg&j<F_-W6!Hz&#>if>N!B1xIvDawnv40xWR}a|E6oD2~@aQlSLuxgue2lZLfM zei18?e^$dR+aqM0fCa*`Op2&f)e^3W(vDzQxiC=5|2O$66xWYrG`9}Y zw@|*`y}EoPlg;Kub2YQibMX?ci(U50EXJr%te?91JFDPAb#i3%BgVQRe?S`hN3@?b z_OFn5%MLL-DRo%{wNcbsL=gdZz$m`@R$3BfqGS+=_lFiz z=#lfxK+$QdqQOFtkR@8p->z5GF>Ei*GgS;&Q5G<@*vHXDSE1X+fQ%XgU;mXk7PP@W zQM=l$n+Tq|W#ylrjSfgG@F08Z%71olO=EjNizDNO<^Rk<(Zy+0DX^srw7>>C+nSH5 z)VYa(q8T>iS9YUm6U*v$IB#IjCaBlXM#Sb>rVWlP)idq?DcjXc#`YI$hNq;6D26$6 zI_oNT(!d_&jtVlVtzM+sk7m19i56+aMSaFK=eHdMb)!yk%5qrOwvlv+(5cetPdBMz zXg*DtM>dWcXcsV+QdJsmd6w|X5x*p-W5`S5p?0z71oU5n`P`LT}W+ZGT+5BD` z4rciABigJWl~ozVikKy`nDd*vT7`~zznUakK)8zZ!xagh%}IzrXhj;%}`k z2YsJKr=I>JAtBA&yes2r1^T|v5}iw4j=DJh0yDS;%OlSKezE;4+Hwt+;sYr>;qqp2 z)kS$dnJ(5Q^|9+=nKo%?xu}6WTyt$~;S;os|mkna?`WRZna+yM9>zfA<}X0+fh4 G6aWAU$Y)>x literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo/repodata/443dade43e632f2bbb768b1768cb090175429b5e70823525c3a3f4d45b7984ed-primary.xml.gz b/tests/fixtures/repos/repo/repodata/443dade43e632f2bbb768b1768cb090175429b5e70823525c3a3f4d45b7984ed-primary.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..64d5e9d944a42450a57e8f7e193982d37edf6f11 GIT binary patch literal 32219 zcmV)AK*YZviwFP!000001MIz9lN(2p=li~&LZ+vg2T~p$5gy@V-MzNEy=QIB=HcA- z;XI9nhkHo0=0!tNz3Tb&C!$D^bpZ;A1QM4lh!RzWN@O9B@L#&e-!Fgq&%eKW`@`Su zy**(>wcIw0tf<^uynO`ty&! zeE$6Fzx?#m+c)oj`~9{4_BVTN`rA)`9Q9NE@b2A*_dk9)`d>c&`flel`Y}KL@N21m zD?eL5e}M2~|FvHq_~G+EeziaUIF9+tfBNBvKfN#S>@R=)?cKY7ylQVgTKn+(pMJV~ zZ2Yi%tiSx_4Q2Y%Pj_FA$G$G`2mAFy{pHU;_C@wb`f}+tymmkS@X_A(Z+`sg?%4W^ z)xUlE?cLX3`stT~k@{=<+s|+G&p-Zu|NZ~@@h>eR2=>3thpHAz5Ol?7PQ;C&HXkX0 zD7vUFq*_44up)q_kW2p4Pk;Q9yWiOV|E_%e$6x--4?5QL!`C(a@pk;_r#}uD2djOm zAK(1?xi4q?6Yd{0p7iwxAOG^FpT2!L9{=s*+y2n_dwlo#%{%ModfQjsUv-Wc1I8bJ zkl)_C)dvrKd80nP`49W!SN{3Om{b1ohd1v(eJ*d`n%=$1=%(AI8G(ee?aNKY#r2+pmB5U++KtYV}QfWBTQ|FAsk|?Cvf2 z<-@1Xe|h`K^lkb0<*@G$e?Roohu=O{>tFq4%d$RwtYcMQ&hY){?`QbMirU9lAItmx z$?tFH$Ism!Jmav;{=UXU_~kA6di<{+Km7eozv5pW`ud=~|NQYEKMbSz^N$Z+$d5m? zx8>(^|c^{hsNS$A8}c%wOJvhp+$ccYU;f|E-^V*OGq!?d`|k-oLkx z4^Mdi*?;=!kI&7wkNzQC`SsVj999acHgu50`Rp5LWCxajb10m_X{nYNvb6pQNm#HY z$x$4OacT+Hi50~CvC=QoHmdX=-Jr4oDnOS7m42OG5L75Ehn2|eRdS|+(z=s^*<;P7 z;)`(qR20-!twB@}QpzPIOF78V7TQLZFpn(1KZlmzZ*1AbmVAM1c_~iI#|1Z8n4E81k_+Oq7D;4PQz!;W zA@=wO#dH4|)#lJurU1VG+yZNNYH*cgAwd6tER@_mw)BW`3tK*J-Dde}f!E5F`Q)HS z(au~e+i>LF2jR-=>723d9gAtW-}4Gd4cIT&ZnF`Q@kAY?q7O@A1O6KZmBW(%XH9m;Cng zoA>R*X;s@8h_G87#vWVr;4!hLYM4XLp?^FyCj+b1LnzU5D=|CQGWm=FtN4j`{_m^X zn>U-DdJgiio3VqjLCO8LoO5Wpe;s$o55K%P>2uN(fIy;AD>6x&wWg_ zcQKGGD${Cq3GT3=J#r{LV&EpRNNtiM)vTE$ljho(qA!S1sv0!GlDm5|(OX#oM{=Bz z5%N^J-GGskiMUruk#I5oFH4cv_*`)akDNph-)=*E%-S#qRUX)%^8E5rtTXMFzF0Jc{`3?$#h864zW?pQm7`=2 zHI`@Qc|2BQx3J_yy6jcLBwfKi$uSk%#bC0uvf~Uw4XKKnMsMU%If7|u+}#uJs3J$} zq-ohQqi7*8N}&jZl0mPWCJR^3Y*c$T;N+CL&sFl|po*Fk?z^5DC*QQ86AL%QsrHbi zBteJdBy}exN(yRPj}1>b8Z@GN0*&a7 z7|q-hYQ8OFZAEt*7Iv-(=DVJHJUDzi=Q&F6zGR{N{PvC1<4eR_3A3o8!_9ZDNYU<< z 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo/repodata/74a554f4a2c7392d9ef0cf6a07652d7a198a104a202584e71f57bc247a32f41b-other.xml.gz b/tests/fixtures/repos/repo/repodata/74a554f4a2c7392d9ef0cf6a07652d7a198a104a202584e71f57bc247a32f41b-other.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..0565771f3a697c6eebd359555e9bb877fc1a24ea GIT binary patch literal 19712 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo/repodata/a5891b48313e9cd503e94e48c93a08b5160ce04f4fde2d1e32f21ef69f550141-filelists.sqlite.bz2 b/tests/fixtures/repos/repo/repodata/a5891b48313e9cd503e94e48c93a08b5160ce04f4fde2d1e32f21ef69f550141-filelists.sqlite.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..6005bcc1a14ade590a27527c6387f28d5179f3bf GIT binary patch literal 25706 zcmagFc~p|=|36$)E}51K?xv1Ih(u}*k~wO_Oqi&ssHmt|%t(q#4wIyr=8WbB<^nDW zZXs@nOSt6V(tO-^Q&3AwCukEY2hGYX`}uvopWi>vInQ~n!#VE@{@_0MeO>qcer@+p z!IAc-5IB$@?xe-k$9?F$l&}AP;2y&l>a`ebkz3azW*KZ7yq{^|M9=| zoBvl;`rn`T0sdQ+TL16lzxDr?14jEdADkNP`R{k&f9w9L|4uspTdR8i`0wnO|JH9t z6v%>W{>X4WcC{)*rT1QAcyC9sOgUcz=~D zi~S=Dy&o-$N?@YznALmxY?(4$#iAdL;Fwz00WmD{fcgHatpnnH%4y$?JO2pVx6j%0 z7I)wNDvf>nEb8m(mr>4~+ZBGJgG*{R8vdzZ&XLi!QQm%2R;@(uL87-hDwP%Md!u&D z7HA5xT5}37^;U}6<4P5)|d zZ=XN^KpVlvUPXd*-qjUwXX|7YZezE+{Xigb%q@FoORniHXE)P3wYTgd2Om5bjQrjY zbnBG5>ZPpNn=n|o=sWaT{|Dg@?0zBTYoD{Y2pmpDpMtRxqbkn56Iqy6gEGYX3-TW* z|G3X?Z>{&|@150y1L%DZ{+~s7u+M0p64w9gzHhW^blfUxt6eqsPWk_9xXhs8dB$_s ztX3=5OabpAKE1q+QnCHJ1mNs$px9xwSBYg{^e}%p04Np3|#W$^guQA{?gzkS9 z`r=;bP5TgKt>NDYw+-UHF^6&DGY3NvvV0fBNP1c3A6k?rgLiU}m2_TG)+PTERUGg#lTsu#=UH&A$w6yg0FZHn>@!mc0rJbLC`1pIg zLjC<=%`4ygQTvZzrNfhdFjqo3YOw$Y_2Pu#oQZEF_qvLyR` z;RCm@d8Ju=m(?$)6{BvuXB;rL$Z+fb``3%G@J`j~{_@o5E=HL_$9ic?v07PkRtWWb zcN=(Ykd9W)+l~LIevewIdvkgH&Z=?m6Tr9M&jfyd$b0t12j#O@n3mmj!CgN+Hj36! zaT~QE_ztNT2e@8BWYgs*xUpl2hHSOBeu6u`>Gys*3Elv71PG$u=&Np}#_7At+ZS6&8c_Pk2G zkyiDOIld=cee}S5>mOVE{It;rzK%KuK2HuF>{QRK@J=thzEXFw_h`IxuyfVS<$sTu zpFU@B@y9dPztsnmS{Q}s-EHlvy2S5xHC>sXfjPnARG z`*t=w-Re{Aqjz+r2MzYN)4)N$uDJq>;}5$^@rfb9->akPz)9%JKkv)$Jlp(Kcj|C8 z)Dv<=$<-J4WbtH!)Z4<_8XlYA(Z32?vuzQa`WTRq(i5>UtWF_>eU(zdG%otb9vMK z&c9(UNfQdf%2BhtE8m3WTUyut#F>e|V@>{kHK`&^zv7q^6TET6{o%hTz-6*@3C3ycH z?tRtE_@z~n-wgvZ&A+cIUNRzkyh^8!+*3I9P2U^)A^k^$o4ugn(Co)Z(!9n*iCs;N zTY<&7Y;B;uMRP?n$G^e120hLMd9s?ZPUXsJ|J)q@GIQN**ug&0L-JT8lG*Dce;|cE z7=KqJemB)1&r=+D=pFvPvvTo^&Y!Nn7?}9&!0m{un%|A&nYQK2vtBqB4Aoq%8_`&Y zs+iy5exHB9u>BAFV?R$YOCLYW%2)bZrF`?W{@u>sfcySE(A2QK{UN|u-{H)e^N2iX z<^JYMjpwSD|Imp5djk|t)$K6mPpz!?vkbGD%341W{Yx{l0&Lg@=RT`Uv;bK3-;4WGSjm&{~_!L?Voye1NYBSwOi@e zUVo!uq*V7KWLM}94gw(aZdKmI8F;NknKbuGly z=G4U>_ovN!eJi}SnDk}UtQl!%l);+PmA}D zB1ZjjkVq^pKl<}#wr5Kc^}XzqRkiG$Ls0jVX<=!y0JNIGd4jk8{d&wyQ`d`YZpB}K zf$rsy9f$I%BO9My9_W<+{^#$6+)^)YMXYs8aaxg8?6r%p30gWu(agI&Pp!~G$U~14 zDjp|1YUX6zi)TgWZqKh+5ER$`dVNLrGjyXx)1DL(95Xbu4iMUO;)!Zty&#MhIjSV5 zH4&!Ow6myOQ8Sjh80hD*dg|88&)@&>ujM%SV!c||7qwR z>bxaQ)7;5DedU~)!9VkYf7dyi2?v}XbUx|BD84jwmkM9Ko>3iHIR8{?fA7qZD_ve6 z9VcRboQ}y{%sb%3L_9zJTf~4@>10UHi|eaTD?j1u{xqC2bB*iMyy<-Mjnb1m32NOD z|MYQe`PHCGpl@bh?Z3mi|efyh-iV<(@ii*+0y z>vvzEx@P4Gkkw=L+Mfjv%JUe*z z{^>LOj&awn;?GdJBf*qsFF&&sl;3~p5oIqOk>ekJZ(v-qI(U^g>?^BD;*yRGRek?m z&MKBz)>MA_j@sOW@N@T-eB91y;5|EKU^x@`TTto+%%G+AWsim*?%}z8J5L+0e^j0) z{`n_eR3&-nY7&2K+Mpq(;qge);7hGK`)Y6Q z>nizyo>%@!=0m1nDL{P72r@CD>m18d;~U%qNdc2%zdVe!9ycnv_uzZ^dq)hY7mtX^y} zCg_Wry5*{$8!`g1!}Au~LwHg<07KQf{uYP5ib2+hNQL?+Nrm%y4;RdHUD8I5cknLi z91CAxAC11TyuLryv(s3$YUicnn+I%_n~YINkbtRB@?oKc7;F? zYly0OgdGaSx1IdF4J#yM_@J*oB!dDI0JY!AsCeG)y^Jq@VT#Es#(=(;y z_3&-^;%LW?Plkb4i*dr7O{hmBm)@`i2ton0a5ctQp#H=mXY}^*2c*i;n10pzg#aoH z08$jKI9*c~CvTP8{w4RUXy3l4nYcT}WgKxKw7dwu{^lWeAwO}uJ%FUdxPc!uvuJz~ zLaLLhG`7=f^{K~wDXv`cp4N$~)iw)+iNb?>OyiI;mm{#X1vYjn2rr&|SA>&))a# z1D9J_>RMFEXlj*B0Ou#yB_%_?5B5`y*rbe@7kB> ztrLeVM73FYbZ|np!s=f{+GH9R`l7f2S1u3z$;ho)_kX8AGg6C|2LB zZwshNQd%SpWOXVImM2!%+gy5pz*ca!O!!NKezaWZHlGx(T@*;3Ujeg^>OmPN9eCaA z+07FTwse#Mq32G33Atzvqoj|EGsbdnTlY`EWHRS3i$2u4!Ab}A$XL|BlsKOoFLPZG z$O6JV9#L3XLiu&$Xb@hqX1)xr??wkLX9*~mSU0HLqR2LNfhdPdKMALkp=-Kg;_*P_ zpqcIX<=WI(6N2#vdS@Xs`Td2lKEL6DU59F58Qwq4JW<|aKn&EzXYyPU=6F3(R7HFa zzs*KBeB7#*dB|3=^QLp0&P1s2EuJaSKSWArS2eJz6??v*1^ zYV_d~w)zD&b{wyE`OdUJQ(m!aRJTp#JCWjzP*;tS z(?f*?Sji|~GHS=l2JNi1_G?r%E@sRpG1e3(K#1Ko9|# zxXN!?{U>`U(imN;KE0Xa0UkecqR>tj<+tq`6vw!vy-SSyr5hz^y9HwbLxrXu++Xcy z$^B|oQa+c{1QrpQ5f`Rx2XZZBq~6`HBe*1KPA^I9hr1+7po6(guihla+txX+PEljM z;I-|5YFD+j#V)lrBz)N#I5$&{2=IkZXtXlD0SQZ&Z8xNu*6ew~vQ`X;#iu%b7mLR4)oxL@ZqC6&wv9 zz&^^XdXVYC$${GBTC-yW%XOigCP;O2kY=5ALJ)O+lg#KKBhN#ea7Bw0%gx0gsu+X6 zbPSF3w~$Qn2lyN!@^Bvou8kfP5f<(lHPhX@`d>TJM*^rnSwoj1o72*#RQ365iYBD z(dt1`4UqJM+;%HI%qn>Uiw3wkQ}l0Hd~O@mLzkpbBJ{BFX2;v-&o5}=uqhX}0D*)| zUTfnEEFl1pB;hxwU3S48Ukn%KLe_x3n5*-U5syVZIU zL{YW$Y&g5c1QWRah zR(Kh*&5X8An|~C17+ySKoq8C^es&By;zJ&KNZefKRbRFkILbzj7$>k)?RLLj7H09f zQB{f#93n8RQS6Aw&>9#DB6v?VQ&gV&V>-3nl0Wdxx8^izQ>QGupi3vL>29_xD+}o} zEK+7=QT^gEx#Iy@e~f=K7bZn@EsgT4B~3Gs2(0Dn9HBmQOF-gaEw97zoz*JA7>+5ZVo$tTw`(Dx>| zQm|tiq@EK6mC>uH=ZZ)N3!?+DCAnZuQ?2YUe2z@bV5H{O#9QIHQ%M zkUxK%)JV4Djqy1xMal2?E}D47Ve73JeRF|e2}ocMtyt4|f;1N)=fVU~ri*tqM%fz@ z4yabq$S%;fK^$_RgRJ7`)zE{zq=OKf!k1zk71$mp%uoP!=4BR99D*#~`xhENm8b*D z-1OwpNL+Vzh^sMJt|*bmt`kB8y#HLMgTs>&_! z_)7y)kq#30gnFqyqX@OLZU))1dG-|}%bpR@ZV*6~5b5Ugd}n0*D35U%L|b#lG1Y87 zGdI8jVj&w>Y&PK_9OX)5z^uzq9;9~pP!UlU)jT&2q2+SEyyr>Pq068^ifj#>n#-wP z&?L)jLT?b^`KS`|RMeFXfcRx_U?1hSyW#5-Ij)s;C(I|TY?nvso99$H*yH(Nc`k?v zc8Zy6aOhTkh$k)+Bx=C^meuCZTbmlqPe<%qObJL|A|OuW?U%%gez|Qq0|2JJv1PRc zA@vx6han{!b|`?R=mV3i@_a?ev@ym;1SEdOAQ|||5b~wMepC;7q?yBd4Pm)kNSa#v zy;p|P!@5LyVZ64XBEsqCK@{vt`;vwWCf%Ul3@VH~TZ%1YVZ%*GoxY@a9sIqp9r!U) zJl_dDqKlkgsTJ_}tXG1Mf|LBf?Tpbk8`GdR@0IIEafDy_J@Bm!8bqO|#$l*I8wUXi zjOh;zV8Q6r^Ca)#S?axDVq8dqbZ+QjB5TwIwJp)GLu9b<0mcN-in&k~+TgECQP$w3 zo#;#bmspuqdvdz;X9pE1p#stKX!F)EYSi@tdQ)a}-}t*aN_&(p!UGAK%qQ30jo2<>Lha_j|1nT9znyIJ@e zhQ=0CGs-c#5AZv0yS@VYy`bwG-ZK;Bn824aGyXW;mG=HfIH{v3seiB(y{%$Gy<|d( zz=EZo4vGcw!uvU21{u`NtJ>oM;>U@S8B_kdxfxs{Czn4LFz7pkvI0!&U-U_w` z0hE_?XNp5T`t%fh;AJSfs1PsBbxb93OP}0PW}x&Y4bcI?YPcz=yJ4?UY*GD@)WsV(y^=kmiPjI#^!=PZPp~)seH<*B4-P>&%B)~%^(ht^ z`G`R*lyM8bM6ObV&m)K)@ZCt(A&$^SpEzSc9n!?stlm#-i|)ZAo6?O4^7&OL6XhVO zcjS2rwpO-IPg!iGFC|J2_a?}|oIUbj!LV|6#(*kPGLHvCmtv|=on{e3W)KOvdF!+u zd$X~&rlNY9kS-?8uYx!;Glgj212CNr=|5V4n8w!lP(XC2G|}~KgC{akigivHaI2O< z(bYq2yn;^7;)cZi-MeIa9PzvXLf6c^+hdQJ?UAKv$MI=LUZfssC>WKQ+r?C?Up~@a zJt$5P%9=^TVie4G!JjORZkE?O@c6Z}%6hn3W3+CCtt84$kkiF;`zwemcm-S|;?U9@ z$P$>-Jpv$hMSWM1ugzZp3~jCi+OS(=b)Q{jZF;|D`wHTMNNE&8PE$Q6UG2onPbMlAr=C$G)du_y^-j_PwS%-;{=jCL}iB^V}kQZ$+ z;H{6ZEsMTYt(%YA9=eUy)5AyLP%2vZ?c+YwL2dN;%1Om(niJW78p?WQ%?a111Y(FK z0XRMP_G^`WwAaok399u=iV$fGG-na2Y3_MBJU1KVG=;Q;PUr z_s;PU43LEY7*k|kP^NV!Gu8(YP)1H?#DXCLH!UL2?|r$lIisY{9$?RD z;_V+KilVvfEY8x@*}rLMivc=#Lh1%)ZbWr%#Wy$+boI#nZU*EyBgAlV?1&c2`C0LP$P(6!aP)9H`?3>dVGcPwOYYDn)LCb4SV4A) zpb9u{phXk3JU9ug&M87k-sn;4ut<9>scscDY=o^fNHM=FraNP)Pmfe%OvUp`MQzX#LF=r1Nvj%&X6ho0}R{ z-6zbuBY6T<+ld`b;up}e+u4q^BcR;{EmAlGX&L5}aL<|^2^v=_M5G_XPy_K_zP_D% zqkC3ZlEk_q$}2|7M_TabL(nCSwgZFA8)W;6&PENP#Ado3KayvHQ(E?@r%EESp?`IT z;*aC;#XIrFhd9Cb=Mp8l5x1*Af*H4XqUt^Rht~h9t_>S8bp!aETsY#aRHBUZ~%gM z8x1!S4KGsAw#%Lnrl<87sDvyf^-yo>Q`%NnT&Uvw^VgHAV@(~p`GRfPEyKMhQ3|ws z<1mN$d=`T=^mf|2D;(Kw7Tt4eTp`I;AyYM7YEV8 z?6nP5=rXyM2~{1B_+2ruEXdp$xqAc?bnp@3Q#*1QL8m*)$y z!w=BsW{FDq!;MjIR&u(C5>j#my$%oby=4{B4f zVNf>6&|+I9FU0E=DsYd5X7T!4ZbzJ5eXmz(51n}&Ka-Sm!r;P03cj+bDp7H8W?_J4 zM^IiZBz3US(#7DUR1Z7@PK+x^;v8H+6&t2pAZ~9u1$0o_eSBzd>$f(o+A3PNl#OtO zVJ=9lDKEJFlk;0G{Gq*N2Dg#>5PC)=SjCQSbC>LJ7v^)dyMPhpgui(kg{|ntAJ;$!BrryMu$Xv z{6CNXI<*pHogRTnt`bFd(jnYNl8}k!EPHJ@JYGa(Zjx%*ZuhU(_z;WTK%YerN2Z^T zLbn2l*??O7=V?F)3aEu2T7_edv#1~lLv9Ry52VOayx|6+-dNfQh-z=b)EqU?{1lUzj!?OrAgRJn&- zf^d>ocG4r}b5UK51tef6V+y#}=D)mqh&C`v6nbze`aD=a-x+V|^s`&-vXv7m;%vo> zN4309W@DH2hS$Ex6#)g4r{3<(qsWf*B&KTE%6QdR z@x)Aj2iZxeIRh$O_JZsvi#@!mb6FDvj5UPdH&~^AQ4dyQiku z!9{9qn6+TEiWy_AxQTOPMb*;QI>%oTbSslP7j{X3UbURFNwQcyls;X^oL>c4HvrLa zX^v2Sf9#HmnNx}r@pP7;+QXs$goVQO!hL+^y{)zL7cAzY&6gLC;eo!^)oz_zbuFb7 zE*l~BsPE1eBE;IHLPK084Z5e;F(B4bJv(*_K%{y}OWLRwER|~LnQVu%kI5=m2y1t#(mPKj)|;hg|wl*dee-2RTtN3l*l_$FZAFE zPVf~spP)8k?6$*iQvkCII*}YwE%DxHAGO37SAs#f&Xe>*vG%{SV}5dFQY5*13REXb zf)?<=%`EgW6qDDE4)=#BI!mbwM~{*BXtSsZp4NsHpZu&iZwivt;1NJZsu5-(lq}Xt z*mKUPuyWE(ZQ{8V*tk2m|H6zuO9y!#gO=0;lSFE^^bg`arv=i!-Jyq&(m(?v^*w|% z6nH>GFdpNQ!~&X4S}@DW;ZLysOIWHQ;y3^gcz^`m_MypzoT=uedhXJC8S3;cCv5ry zf|4Eu$s{R>al}A`t3Cy3gu7};j4MG)qnr|WV^I0YDn)?7g>9H-3}Xh)%;^%o;tr6? z&{y~lJ#k~=IjUY^^7|F|cuMmPOvVcE^JiXd0OEX$c6>dO$|Rj0JqsRWK?Ntx+Zyea zd`Rg=WN{guTY&mJk?V*_jZS)t-9!N|dlM zWlWH}oGA28VHCYpDEV&HVbI~Y#QrSsMC=Nw29LZHWJkLN=6Ss{w7xDQ)rYAz>nZWU346GQqY4^W@S|piCNwU1 zazxP9w#Z(*=9h_vyB#KqFy-Z zSZxiGMFQJAtm#c4CK*bLefy<-8ByZVL-qEdNDiGKuH5_7#2bIzMT-HkH@t+UMUT;X zC5RS@I*;u=X}+uuUW#cQpXk96S4aCCmvhfL$QpXW6}rb@5?OO&bo}E@E z;z)1lBY=Ta>^}v?kFAKW6oWXgdW-S57HPx9grNX(M^-cE=qjI~-b2}Jg2-l!q1|F_ zP?O>LZD}uiaT3lPW)SQ0ijev_khGx!TxQ;F3hdGKw-0ewOYveRs^98|nP(M!C<)ge z8NPD=`gud_qE~J8Ntc<1+U>=OkkO=V;v8Z7J5%mwp|uNgk>)~7$K1f)^Ci|j4@L#d z**xxVqri-RoVewXs{E{4m3*YVNe?5Q#f|8ot_EU?^C=yGgmF~WatwsmY`0n>J^@#2 z7iG1kj&&`)Hs_GR^el(!JfjrriQze`T1&kPkr~B6`iZm2iw*VNV23?{k_;@v9ptuckiJ^C(fIw@yfzODG@ zNs^Wj^!e2>bCxm2Ka`+Uj+j4OzZ6-^9G=D0`e8?W9c3|Ksk^Q07KEvGs>g^Dam!(8 z3Ph{tR`Z1l)Ey-qGV(DJ#-M?`d&>?k0BY%QCH4Olhrkw}heJ#kN&N`+V} zF6pHpu;Z&|8_$9#GP6ja)TwsFnw<9Z%OMU!M)vNBd)TNmMqv(6Myh4-+6t0q(r! zZPm`~UCzhIb{~WiCiXh1Mjtusi;|B++Ma2X^_wf&$7%Kb-gNL@j4qAtAaZM+du`1) z3Aw&bGZ&GZsL_cswfb#oo?!yj6=SD}-+YV!_Bqa?&x? zs(vCD);%0TE?)k@egWSRkRWUT$;r0WXeUHXAO@*fJz|V>;ot4lCBcJmMYDvTvzb^W z6SQ)RFFpxDo#DX?sf zPp9`#^&5G+i3~UHmi)upvu7<7zqkSWU-hE)`0{Rt&G;U*nP%;IjuJyn-fg*ywFA+A2(tAj*d5kYvua)MypyV-qiCgJ`Xd;6s#-TyQ zq{QL-_PAez4wK2L!g z;qOg0%dOey(}#M>mo zSnZ_L^#Fnet(76OE6|?_LCDm3qLQDtby?&+!UIDH84oe8tgzSM@floF z%rY?_trq;c1f%zkVrY!kGf3WAX{EdSu7S36vHS&hU&jIO5<*RROk+dWHt+&;VnK}g zB{z5#EJVR1XbU;1i=je4k;;3n!Ef1g6V63x6C!f0NUMSETQ0xqJp1)|*S!^R}AAG^)ru0Xr#4vbvLToXs8!EbD?sva`J29%K&*XNVc zPB#KR%x^TO;I3ew&E`r&jos^iZ(g0z3Ia7!j{OK9}1i@>UouNlW zzssQNH<*5M@Ak^)v?K0aJ)IB%1tidI>W~Q6 zsZ9YcpKG{B;|Ryw_H^5JO+vgLXvqyO_k=wttzbO*?tw}iL4sBo#Tq-!eZ>0`R1XHN7rp7P`I$=HS%B}C4#3%y;_R9=}T+6 zfB(yuM(#0WxJhh_4*AP;4_0>xE6@H!i>%Rmm_$6sM$C)x?U5N)Q=N^f4*ipMg1vo{ z#hD=6GUT;)2idrAE!@blP~I(=9D*y>zI$#Sd(JnZJC`rZZIz!GCxb;%kO6SDd~Eat%G|ka!zSc9-Cx$VP`du)b`i18m=cgrlJ0G)+9Pn0 z8i-R9;`Q4^_H8t}|1YVHHf=@|51Yjfnp*R6ou~muXu#eK%#~$1G)5JmziG5%H-m+8 zi)EA@r%^zg(YwfcZ9;?tkmn6C$8i{dA9nsWTDc&hQO$yu4VPy-(9|dA&Q6q3!+nT) zcp(Zb9rC~a>CG|x@c8MHrsj%AiR>4iJxTqZ!p6K+itB0#aRfshTD9KVoPUV7JJHKN z1ffTo&uIvReK$lo4Vf51U_;d->4+q^^z!ac@$Unx|Xo8YC@zwAuH$an?TzYu(va;b=l^g)9(@gwUzK{Rh7 ztDY@>l*r-9*jPYa@qtdky{Ty+b7(( zjpqP(qz*oi))c~N)PU1fOo0kmX^be#?$1C|^E&_rR!Ixpxrpx+lS@qAJivC|MoM1y zeFDxWZp|Ac&_^2h?^rQCIQg?6EbzCbMi=~03BKKcn&ESOJv=o^Yq{Q3sMv_)F=lW` zotJq&Xcf(CFZ>c@M@{bypDJ3eUNp5V8S7H$^Lwsr6;otKD@(D(`3WqV3wj}GM|<9; z-qp79)Q1Np*P4Id-6~wUe}mm(2ALQ(L7jhANM4*Q0dGZUpgzNP!descW6I z*yNi~#@ny(RC&lA7ErgyK3)ltSX;>Jn>V)u^L#u`aF$=JYLkc+@M;uDNaJwSpsAC# z<9UXZMLpW6P&n31k8a(wM3~XSf_9M;MsE>W6jV`2`XFw6p-+Stl9jZ6)h3E{lY|jL zqZ^Z+)~`w ziMtGp^!c(ai;UUcwt2Jra9cbwg_~wgY2I@R>8}LUj!! zNhA4^6SjCD!##(iD2$XuSrdkE7w6=iJFlI|u1|Vosc!dwwd%oa7d5&1C(WK7<aJvN)omPJ)IKe+fVh(7Q1jGhDg02GO#iqWnZ4S6<&bg zE+Op;cM*r}sy9#cUb^MN82#Mut(!160c6Dp6nnvtZlT04s4|;dT3Fd9i{gnyHoA$p zz0e0UTRVXbF(1#io5G=Q%97?h>bLz1F~@z}240Rs_t;f`mU;hS_D}OU;nG8$itr*V zC=9x%2vO!k(R12!ZmqN<7NT6>#I3ys&nd98hH)UEhMP->2wnVO30_65eaQnP;&sWg ztE$x$0gPQl2ZJDfj5&ClOw8f-*Mk%z#yHEHdV~xyRX-F}T#TFtAdol;)fa)pz$7z! z>TI443GPEEUV$mDJ|LXeB-Ei9n1dD>Ar!s2FYhi5WZ7*k<^>amy?qJ}0#LFU9Ln`! z5_>g9WWy#OG$C}DLbr!-1ew?S*M;Q4$4GgeKY3BpqJJH;?ABcQj(vZ=vMl828drz3 zG3}D#W_|-*mzR&6uVfM>-Y@W%?s^oKUtyC&-|zZ8dHW^M#_h?xA3|p1g9d6PN+X>( zV?`7<{#<>t@K(JvW=~lMm3I1gJ!m}Y)lB!aU_|#q>2ywYwjIq2yc`isEb=^)!$XBX zB*Bb`o$8R?`u#7<#P-{(+8b|mL-l6-K_ZUcZw#&J>(OoR;0=m7>pE=@#^w&d4>Y;2a2xlhP zb!Pl*vMT^P_`ihRZ&)gUC8*HplG??=+NErHIDL0<@SOxdfZ#(ISP!W5GpSjyS1O$4IRFy{4jI) z)VSTW*4+H}kGI-Cxg2#4`5`&XMtc$7Bz&{zw0vu#b6A7_uuzq_^zh-M+3!VnI~XrJ zWes$GcId?$9LccepNra>z>^R<@PnOC^MrSmy^#E$nD5fQ3CakH_iD8Fji5bTD8KV> zkS`-fC*YfC_%937SGeI>g5l2d)wGyM(6QoUdM?@xkL+EKBt5uh#mM_f7UHP=7!~&v zC#(r-wR-C~CO-q+NMn8ao2hp0l~W!Za=jjV%E`9`6pK7`D<<-$dmgRK_FMjI~zIDp+yC;5dUEG zAF-F7*>SB@a`^APl+7G%`ZNSk*sD?3u5^0 z-C6ls7>W=-PmFt8OOov}mu}aIwhV{Pm^Iz~e62emb0NE{B{`V3GSR?Y*~uy|G5pH! zw!}JTct}4(d`pDajPUyDdDo(_b*~HtjNF7JVq)YEZ%=oIyaN1I$REAT?w+c!Gd5(t z`Iy_XezvT9@0f*QHb~w} zz9XC(zk`e@Zfrc%bM52PoT-H6ZOeYoZ$sp>r&2=hoqc^;c-NCy@$8U6*O!mA`z~jx z{B%&N01{7D01j>VEV+O*uJG>mDIW+Y?;me0bI|=i9h{3_lK1=nx9{>)T56v1lruv@ zBQqjDe$>Va^|nw^QOU5;B&8&y!pK=|p2aiZ3C#?V6iFQtIXo@TfrrFXVc7;9CUh7& z=SXwE`}4d103JNxejl#a^?Y9L{;H`7HT;6skX7|$JK1J8q5&9OvUsTX`f>QMnf2F^ z;?Gx2&$=i45csRZi8``{so|cSi%(cqSuFUN50LO zj`{uMquy9@p`Z|L;oG z*R2;qgUno)eysXy%3`kbt zd7L_XthTag;oAE*>1ynkmx|X*2ge)toysl#Z$@;;Pp*$@VT3Oa?sxraf;zwW4Ubx+ zBmSrKzyZfA!NOld(^zvHVx#qy&NQypR~H?HRUL5V_aCr8pB=3~o5z)gAY{q^x~$qk zGiRA;oUo5>CB*`kev3=DWgt*rtu}*q?b5vS`{ox3c=U>G@w|8hD+vj(EePfF6!(AH z#H#oH6hmg(>a|jhRwy;8qO)d7vFbNgq$33U@oGGYA?VsB=z>vlSA;!(%cPW%Gsx)_ z92Q}dCZBWmUQG>8*CxY>Y7=25xs^N4vOj5SXjF5T+Q68e^nL}H@s1f#AD zQ$EMUw;-XtIPVL|)Rd6@)?PDG z>?v>Q)Ui1Tfw6!IlZuw4be(D|PrbI-)L-1Li^+40fcs%`9Lb5XQj^{^85lcip-MAo z!Hyf6lJYct#ZJI24u`2#i!O_;I@RvUL0huzTc=CE#JqAusXh1w$%4$#wG~f+>f@UzG^@!olOiox zPN^nmth)X+pg&?wlhlwB;z))sD2RFNLkpU9C4inu*KOu+e7Gl$_ov3>NtqYfsE09h z1q067&u2dFCZ}T4ro+Oq74|5SacicqX&|qPE|)`L}VEu=rKqWL2KG9u~t(*eD0zR&7B-5iNA6|phL`@WVCi; za8qg0QE`FLTa$A8Qbw2q>B!2OR-}RY+%QS_6CFMfN4Rw$siA;Vl+Bo^!TZ@LUdt(hmR0W0uN0gJ9} zy^u^(2pCUGIotUS{f|Wg4=G2`^BGs?e)JUOUi{9qN6WA5v2?s<2^j7rtWS8#w|jHm z3s+U0XhdH=Z($I;X4}wbqmr0^!1al5D$&OmFpcc1`i7!13eSRI7>iL4S?ESA)%##A zS6~A}vk*~>k1nc`TwX&;oyJ)$kY|)JdV@-A!m}UNUsqCw6*P1t?yLSJt8`sSDODrC zhp=`9u8s5XUwO1kOK?Q=JRu89a{^{rSlcKJ+7fStqpZJ!wj}v>m7K;5&y#vKi9r*t z>Xh9-A9#C%S~-SfwE9zzj0rb7KD=03X@#>&PJ=X|JHmglug`XDlHLl0>?S zDzvbPwPMC)8B|dWs?z^l2zFhZCwcm6LZO;FlR7pPX-hdgOC&i9GD48r;(HoffFDh^ zDWxyugp-gq)ESE?CIgnqkhXa6Stq}{c%zStO?M4<;pY~B%_MGqH`?eg{r~vz zJRi|M(S~ZYURK=a`FTTb+E?MazV51N?Q_u^-S2y-*T^eqVXr#}W`v5c-L*h!1vaYO zwJSu#nI;*%;!6u!&Xoa(*qbl`#w%0M`&ob0k%)VG6TJmT7Qf;iydF(JL(0i+V8y#5 zI!$}tOWuT(wm^w{l{8*0iO-^nr_&b(Z&N`e86>zUTOuhEHf|_}nEE6I#ut#G(-&GZ zw!sH3y6G+pVKtr{I_ErmK_3+yBu6j-9*4nuxw6Az;UjOlpc{P+M_Hb<#%evhWXAp} zwYYK)9#RTeO|_=3x=rDaKcVfNC*@crbj?;0X3B`ioh6xbcbbmQ)@N>v~`( zKAMd;a6(nydkpPA(M!#hi8&XM@{&3))<^NgR9fa+tMr~v+GPLlv?UlHExdhoFa|j8 zNLfDblF8`Bv7K-rFqvSw-(Nu!JujrDPlQggYbMldKP=wPjpx&U=0C?Dajs_+-VUEW z@6CX5oB1^)T0BBP_7N0u)c{gs2A9vwV6$e*_w0Dh2CSdc=9Gz^ye=~Qek`SY(gJv} z=&g7M>CZ>Kxa-l>uyOQFnIs7?oJrm4zlqr{QttDa9^B?D+6P_TljN!{2`8S5p{%cl z2(%;463)K*-;dbDnKV@{x3+f7R>yqg4qT`gy@#mAAT4H|ib8n7r?rvS@e-2zt4Suh z{N=NaO{(pPkgGe=Ho54kin*po;IKY??YtNsIN|g8(~_v6fWHt7YsvH75R8I7<|-UB z>^AxgN3x{9)el{{ z`ZpAlxQmvJ2aQakI67TJaa+w=Anmo;q==c6Otw6lG;u%0V_mqM>jUAdzmu(Yaqs(by zTi_fXSK*u4(hWpM;;mnh4d;jq@2YBnOV@a>HW+rzqKrQ0_&Sj0u=- zwmN*C;U<;gvwmY}-5w=I5A3kwOSu8?X^$7z@`btwwNOzrAJl*sUQbcovvHWZAABP9 zhb>lPT6o-M?jr-ox6VH5SMw-wb-MHeTqPIfrxMbXquha>mK2M$g697QkBoPMjg$XT zX%9zz^lr76we6L7Vr3qDfgxP~=!Dk`0zJXqh$uF325NmyNr&CxioY&j?wzXe)d4)mR|)_GULB+vX-Q_cSqknm~I& z|GO8yupEq#&FR@Y0r38$Ui;(NTQK6B1NJ)mVINMki;`SraF}A;nye|{i%uS}if_~; z`Tv~=Chg&Pn>v?OT~Gn9Z#QyP{0vi3i^+~9;-28qGelk;i+pY;>E2-3jkU2Cs>8sR zQhnuPpNXr=?LMs8$(-Uia%OEUX??^!2#(CMjd1|#x^}e-VIa=gb_*I%g_-9 z$;L7ryzrQ(H@vlBR-kLzh2+PPe$~AIK1y@OmBJBI7(l zQ`oL8<|;s*)uS8TP;>yfXyx*!fTWe53112Suv9mDA?VU)iZ+y|+V4*R6W}3dKiXjq z3TL0D%2Fbx*FMJg_@~$G7sz(h30DIn3E7pj)PJ$)#U47v_U+rgiEbc5i(mn+Ew2|5 zV4J!B9Re=fCsKlNr14GKRfkx0$Z*)GBn|ywk(ZHTp4Ol9Cbz|>CKN8%FI<3na*KGP z9W}tnr3N$iYlXg2emQCH6gJ8kB1&$0{}en}&|9S-yvE9RX=vup=g}Es&~fH5Jr66( z<7WmV@qA}!?#`g02t3~g^}U&RVP7Z9;#&rZX1LT;Je zUgs+MQ0GoE`5CMyBi-jAS;M^TD?xpR0g+ zF#u?bnXeLPWioDMeDI@<+$$6-#=SJ2Pyq#^NOs{CHmaeobClSbsOyL4$p3{6%;D(* z04dLhWsJHgWbN8B6JD7nFwj68So;{8rk$GyAd5|^$F0BjeBR(p^oAxsG}3M85Ed;A z-onLh)ZQ5&SH|b;7wUs7T?foMxiImq_}8pKC(1O9*7!V)YwXJua#yvvQpPBzq8gv8 zF7C$S=J9jSfx##u?+JQ7^7zlFy_Eay!=ZWP@rlgDABC5qHH5SK308&rmA9U!`18pR zDpZHfP=$t;hSh~05bx@(!MlRIbH4xb>&N+{uChCmA25Nnx2}W^NutQ?np1L5CIzVw zdUv$xjt1$-w3XC2jrvcM{;&efDTW+?y;VdAhg2~I zSXtwu!g1$bkj`0Phqu@H;ZoVudB)+5F7^+b@JRYkiIZ%~>AP0WwwRF^+STZYn@H|) z9Jw*ptz$M055b|>akso1<|kahDsyd#C-U@Cns#z9JrvRzct^-}N3nDVnI?~@VQ(w?u?Aq$pHBtoaDu%KO#2gJ$6!yl7 zoTCIrc9Ge#R>j{$)%#{1%MU#ZDr5DE6njcJ9%DF1A1mFYWG}?B4%TdQ|BoL+4wh}m zIU>yweGWV+!(QTXZ1R>mi89!?MhN4`eQ2rSxaC4o=G)!AT}iNX?s>2Hq%!V_ZaU+g zPrpFavi20qUkm_pPEib=G?3kvvMPX>d>2sY%6Qj{T9--t_xJfM%*0WQqUfSv|6mU2 z>^SoT7d#tIiWw}@?pIL+t1^mJeBZefO=ZIz(h)lvq|UV~%oY=92|TcO;g~@g_a*BZ zk#7FJ3t`5dHd{uhB{KI3(gyZ%Yj)J25Y?oh$FOi|C#AROZi@LgcRo5p zGx#M|R94C8QCP;dK7U-y7*f3>iefdFw6fTTV2nYe9|^diSoFM`;^-)tux7>g5>^Hy zNvSMCrVz=5wKgOn3cwd~XohqoyM`{6!{5iz)}F$2x)2ibjO(HmdGJ$4NKg7-+--h1 zoOAjnGsPhqWGfCqVipGIw>=SdgdDg%Mi{-cq7H0M-fGj0tCe=@4 zpz=`HpGkKh1BoAb`oLKd`$@VY!J3vhVu_gmDIg(S4g0wyhOP!z#M*LLv5RyGnt6(K z(o3%h^-seOzYKuty_>l!<6^aB6KU75;x{cCaaG~&a;SQ}Wc}m@jx-qK)y2gW;ZI4}kT%E3c`?#C5>+S|? zWu?f6(Pr!dB*r^ojuZ3XFC(udaPJ&%)l=ju4cYl~ZDZV;m2OgbZiE)oR-E|(Z z`nm6!UVA~x8fM)jr(T)eU6mkR>ZLRiVhfCWFyJv!ooOT!YA#B;iebcuyWN;R$F_Td z<%llz1@_9YIW3{i3xLeyuGaaeF;GQ`BSi($@Qq3Y!u_^De^QJ$~V49VQ@o%cKTCObqXlWp4;%n<#Oqkv-V zJEEd%pbY)YEG4v;d|<+l3~{0>;hvnO&WsB?iG%O5D#(@1o}iV$G=&c2eZ3*Q*f@J; z+Mkd^h)j|yLIvc91W>Ukp8EC>E!P~K7>j@C=nYcx_y-ms1MZtSsKB~DcH^cT?J4i- zHKoOM`Otmy;U;3apip9uj-8m9JOQcpO$<`N1Hh{(BVqhpPquts6ZuSCn-Te z%yJl?$L9VciNy~ozv&0#A>G0h;Ur}gruE|YP46=_EblIdOQFOBHh-KQH@fTan zGmOPrI9E`>=d}8=^1XF4xHG|6>qU1^UCB5h)|hnrk$6vo1jvx>aK<~&g%K<%PK?K&khQ9r189hJEIjk+v~!+1vuGoBp>nJ@aj`7YiI>sO27fuJIZZZ@1^c$?Dr1RqrB&4qWrj|2zHV7HW!QeRNBOR2eb2xYS5Cu9`G zyV*-AfGS%L__nKyx=};r7@J}j6%4A`u?weyaa)qXk9PT)RzcUi_gsJPm!=D$4nHSL z9=kEZ>_*~yv02p-h%7v1ImL;JUK9y-RHGoagopC>X)|%=%ZvKMxR4ksdbdTjDy)>I z5nt1*^LYI}VGaH*>wJ=@yd+Y2QOKQW*F~?zSQAzNkXPs-TAx1l-b)K#J0Vep zMDDEweHpsaSTxWAXT8lm2~}JONbh)K3)cQoK1!&xfP9c zM&Vx2#Pc*n-KHS<&e7;`f3mf_owYnB*jR-HkTsa2ZkzbPDZn6tclgu-a*no^LV0uW z-is?6j8C|RwU3s#nbYb2^t&^T@?I(ce+&|wNVB^Jc=(u)ySEc%@Eo6d3iuol(d^v< z>nkI(=X@5nG6|VQf@hWbjudlR&`!dp!#^#raX1yo)*P{+ivT~oD!;WO-xs?Ahc}$? zg54VOTpBKj7FuA6i_p)XMT8@5PITEt$$*KAavwZnD^JrZ65WUD>img@Ecn_p zsA~WB`ig0?K^$RbC($U1_Ns~D)#3rWi^F0Jr+|dmTOn?004h5#QOL!sTUOd$PXV)z zM3RC^bICOpZlVn2-l||976pnmv?p&yZ63WN)p&R*cGzsfbcxOXmMJc_>(2wZk0%#l z%p~Z-`pai4!ALa#>3DTVvEvWzjMu=>wEPpE?SRYW$-FtQVhKT`p6ak0tvLDsl(xN7 zn&h+kS#+g3t+_mGY_}g(lXTRj9CXZc$6PlG3fncwO@iamr1`!Dx0fz5xkMh?+Vxh> z)47h;XL$5oAASK6YL1|2RqOc{fhR!hu*8k{h1cer`^ogWq&tQ(cUKDF4+2kWF!lIP@;^|j$ zm?JMq*9v=3?iLgcS)^ZX?WSCvx7_FTQ|X9VrKQh(z?Wwco#xWeWV zU7z}@{zysPp`1JFj=goDwk^_c;h+yYqn3{r^2=5FL_rU>(b7c(JLu4&*C{uR^6dN5N`^zB-jci zH6dK)`zG#^q$BBJ0s~f8m0V+nmEf4zyKc z0;6!GSs?W(cDcAK$xVMRg3#+(Q{c*xLnO7NAsm|TfKIfb1c5>R{#K2wRrjXEiC*^% zml%OTvT=d7*kfdV{~z95cSls?P72?FE(`JGoR_MHC+gf}`&?LoWi+ejiu}&CwF0{G zBSgE!37E0}_h3sH=BPh$xRkubmNHwFwjrP0g|Aq^AfBMhW6lJ-g2gBir0MkD1?}X| zH+A+SF1;Zb+7E7|+l13Y5oot+!a4h!pWO?fiuYccFz4=&lQvklXAG-2lRX*lL>WRi zMF?WG@hLVF2J+YlZazd>f=|{%XqOct8eXQb;mWN`)=qxpvu0jWjV*34 zP2Lu{iFq)Cj!LO)hD+P>T;(TV1K@mx;(9!-&QoJzPvkq%%Byi!&i^Ld2_P6QV6C12 z8sNwsW}1AMg}#SHvz6)nDX}DUDRcoEfRbPrgmCl>s4QM{jMWF;#PTflIWyS7*!U)r z=7JkI8%X!n>s?rPJ2ZO+kKmxfUO&Msn<8WkZ}p(X#Zf{+ExMuE<vli4muf@2z!MQp6W zKLDdd3)CSnv!sz~(y}fDMS>lQ*>iYWD6${wDOmFD0@!%m|G)e#nE5C?_5PskRE0nC zaRC^b!(X$Y+{=fs{#JD`1u5Tk81DtQ=OMyP`l<~RufO^XqiW`H^F5h>%LW5m{M)o1 zeY6ZcH+?%}E2O8Vb)E%i_> zHSwPfq`Jv>q1hiZ6F1pI*@0;-mVpj z7e{;WL2l}9SOZ9KRHTVi9~1qZ;$v?Oyng+Jw`xbcK$qjV8fA4N%z>iGu}tq62}dDr zqirlhqiH+>g&l((HuqG%<0((Ha%D*MdABZOD0hO}Qs_#Ybwu%^H)Elxx{&_TbwQI z`5VsH$8vQU)~+bab5_e+Yz4>b(>~=#{%39SWf!DF>)CYT3*XC!0!&3?i7HY$| zDZkb^W2I|!YcCuBrK^^FcW?MR1I3ebk4qqjehBy~v*2=4k1ea-X64J& zsQ;5L{9-vqx4HH;O@@hZT6HP7yw~m66-vcGzI8=xDY1ew+;cvl>@M&7Z!%ihOS}W5 zgilY##F{U@9D$zKK1raY?6~hSsy&2nO`aa_imV^>H0-MS(Jrp@mrjrf2yps(59IgP zcP^c@y013*euM?tb$Qp$g3DE5#kVVp9)@~S@BQRvzSHYxw>xLIU;OpJ0%Ok?yMFcl zDfe{xdy}Hg8+I!fe+)SE)lZQbPm8vsg_cQvhtVXsV+VH-IjM_`Bhr8 zAMIGK{NpQg5f7(I!nfvq(=NJfL5kZxFn1+7Fd_+cDKX6E+}_hJ_2^O4vDvb$dyeJ5 zs>K8DH~rihg}F{udySz8Sl!l8UB>m{b7Kh3?+vgB_Sp!3|NUpFfrtJQU2AOID2gcj z{y%}1-+C9GE_@A~G7l7K^(MTM#w3=$zxgcnSo7oSiw8H!d)OA2EyD~9gHywd!l6ar zJpR)bS;kVQSEy%E=sGi_utNvGet&KMp3pDjpkn)eTZ4mD)#2a%R@7jz zT4;*Sarmm=oGb}#essKX_qJ$u;n7-;eStpgi-oV2uZ%1^d%eyKCR0<8d&-#gMlk)5T1FfpF^8f$< literal 0 HcmV?d00001 diff --git a/tests/fixtures/repos/repo/repodata/cd2e022a3f1163bed5dd38328a2c0bd7a8db1589a9e67b25c6341941914e1077-dummy-comps.xml b/tests/fixtures/repos/repo/repodata/cd2e022a3f1163bed5dd38328a2c0bd7a8db1589a9e67b25c6341941914e1077-dummy-comps.xml new file mode 100644 index 00000000..18544aa5 --- /dev/null +++ b/tests/fixtures/repos/repo/repodata/cd2e022a3f1163bed5dd38328a2c0bd7a8db1589a9e67b25c6341941914e1077-dummy-comps.xml @@ -0,0 +1,164 @@ + + + + + + + + core + Core + Smallest possible installation + true + false + + dummy-bash + + + + + standard + Standard + Common set of utilities that extend the minimal installation. + false + true + + dummy-lvm2 + + + + + text-internet + Text-based Internet + This group includes text-based email, Web, and chat clients. These applications do not require the X Window System. + false + true + + dummy-elinks + dummy-tftp + + + + + firefox + Firefox Web Browser + The Firefox web browser + false + false + + Dummy-firefox + dummy-icedtea-web + + + + + skype + Skype + Free internet telephony + false + true + + dummy-skype + + + + + resilient-storage + Resilient Storage + Clustered storage, including the GFS2 filesystem. + false + true + + dummy-gfs2-utils + dummy-lvm2-cluster + dummy-pacemaker + dummy-resource-agents + + + + + gluster + Gluster + GlusterFS support packages + false + true + + dummy-glusterfs-resource-agents + + + + + basic-desktop + Desktop + Basic Desktop packages + true + true + + dummy-imsettings-gnome + + + + + + + minimal + Minimal install + Basic functionality. + 99 + + core + + + + + + + desktop + Desktop + Desktop. + 10 + + core + standard + basic-desktop + + + + + + + empty + Empty + Should not appear in the repos. + 10 + + does-not-exist + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/fixtures/repos/repo/repodata/repomd.xml b/tests/fixtures/repos/repo/repodata/repomd.xml new file mode 100644 index 00000000..43ef3093 --- /dev/null +++ b/tests/fixtures/repos/repo/repodata/repomd.xml @@ -0,0 +1,69 @@ + + + 1478525452 + + 443dade43e632f2bbb768b1768cb090175429b5e70823525c3a3f4d45b7984ed + e60486cc17a922a5cfa3b0eeb6b02176d046bb81d4477806ccf76e49f2f619dd + + 1478525452 + 32219 + 442634 + + + 05ecf05b96e9d055dc9e3df028b1af2cf6661af7bb082278d96eebe4bf0b9012 + 2df95e0dc72d04e62064d15d3b95d3aac7c4f1733ebb67c16beab89345808ceb + + 1478525452 + 19701 + 73844 + + + 74a554f4a2c7392d9ef0cf6a07652d7a198a104a202584e71f57bc247a32f41b + 56bb0c634647446b741246930d55542b6ca50084008678ab441d5f4960d1eaea + + 1478525452 + 19712 + 117697 + + + 9249118941570779bf043a7a393f0308f891ac1d7fdd2dfe006d3caf69d26a6f + c0ecdec1aeac2c4e1f32f97c04c703a438e139f4d9d9631a95e3fca5fec61e5c + + 1478525452 + 57571 + 368640 + 10 + + + a5891b48313e9cd503e94e48c93a08b5160ce04f4fde2d1e32f21ef69f550141 + b8398ea076836772a553717e9abfcd6fec1cb7d69ad32c09094b4abf1345aa88 + + 1478525452 + 25706 + 94208 + 10 + + + 129bcb220b766abd0d38b33f919af26b017c6ae086cf087ca00d183d97d57a06 + 41a274ac1928cbd1b9126972b154826842af8781a6037fade0ca1bc57443d5d2 + + 1478525452 + 29618 + 122880 + 10 + + + cd2e022a3f1163bed5dd38328a2c0bd7a8db1589a9e67b25c6341941914e1077 + + 1478525452 + 5178 + + + 2f8cc4b5cf852eca9838393db012ad4e494ccea437ffbbbf95e110a388e15f35 + cd2e022a3f1163bed5dd38328a2c0bd7a8db1589a9e67b25c6341941914e1077 + + 1478525452 + 1244 + 5178 + + diff --git a/tests/test_pungi.py b/tests/test_pungi.py new file mode 100644 index 00000000..29fa6cbb --- /dev/null +++ b/tests/test_pungi.py @@ -0,0 +1,1363 @@ +# -*- coding: utf-8 -*- + +try: + import unittest2 as unittest +except ImportError: + import unittest + + +import os +import tempfile +import shutil +import sys + +from kobo.shortcuts import run + +HERE = os.path.dirname(__file__) +BINDIR = (os.path.join(HERE, '..', 'bin')) +sys.path.insert(0, os.path.join(HERE, '..')) +os.environ['PATH'] = '%s:%s' % (BINDIR, os.environ['PATH']) + +from pungi.wrappers.pungi import PungiWrapper + + +def convert_pkg_map(data): + """ + Go through the mapping, extract only paths and convert them to just + basenames. + """ + result = {} + for pkg_type in data: + result[pkg_type] = sorted(set([os.path.basename(pkg['path']) + for pkg in data[pkg_type]])) + return result + + +class TestPungi(unittest.TestCase): + + def setUp(self): + self.tmp_dir = tempfile.mkdtemp(prefix="test_compose_") + self.repo = os.path.join(os.path.dirname(__file__), "fixtures/repos/repo") + self.lookaside = os.path.join(os.path.dirname(__file__), + "fixtures/repos/repo-krb5-lookaside") + self.ks = os.path.join(self.tmp_dir, "ks") + self.out = os.path.join(self.tmp_dir, "out") + self.p = PungiWrapper() + + def tearDown(self): + shutil.rmtree(self.tmp_dir) + + def go(self, packages, groups, repo=None, lookaside=None, prepopulate=None, + multilib_whitelist=None, **kwargs): + """ + Write a kickstart with given packages and groups, then run the + depsolving and parse the output. + """ + repos = {"repo": repo or self.repo} + if lookaside: + repos['lookaside'] = lookaside + self.p.write_kickstart(self.ks, repos, groups, packages, prepopulate=prepopulate, + multilib_whitelist=multilib_whitelist) + kwargs.setdefault('full_archlist', True) + kwargs.setdefault('cache_dir', self.tmp_dir) + cmd = self.p.get_pungi_cmd(self.ks, self.tmp_dir, "DP", **kwargs) + run(cmd, logfile=self.out, stdout=True) + with open(self.out, "r") as f: + pkg_map = self.p.get_packages(f.read()) + return convert_pkg_map(pkg_map) + + def test_kernel(self): + packages = [ + "dummy-kernel", + ] + pkg_map = self.go(packages, None, greedy="none") + + self.assertNotIn("dummy-kernel-3.1.0-1.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-kernel-3.1.0-1.x86_64.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-kernel-3.1.0-1.src.rpm" + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_kernel_fulltree(self): + packages = [ + "dummy-kernel", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=True) + + self.assertNotIn("dummy-kernel-3.1.0-1.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-kernel-3.1.0-1.x86_64.rpm", # Important + "dummy-kernel-headers-3.1.0-1.x86_64.rpm", + "dummy-kernel-doc-3.1.0-1.noarch.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-kernel-3.1.0-1.src.rpm" + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_kernel_doc_fulltree(self): + packages = [ + "dummy-kernel-doc", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=True) + + self.assertNotIn("dummy-kernel-3.1.0-1.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-kernel-3.1.0-1.x86_64.rpm", # Important + "dummy-kernel-headers-3.1.0-1.x86_64.rpm", + "dummy-kernel-doc-3.1.0-1.noarch.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-kernel-3.1.0-1.src.rpm" + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_bash_noarch_pulls_64bit(self): + packages = [ + "dummy-glibc.+", + "dummy-bash-doc", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="ppc64") + + self.assertNotIn("dummy-bash-4.2.37-6.ppc.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.ppc64.rpm", # Important + "dummy-bash-doc-4.2.37-6.noarch.rpm", # Important + "dummy-filesystem-4.2.37-6.ppc64.rpm", + "dummy-glibc-2.14-5.ppc.rpm", + "dummy-glibc-2.14-5.ppc64.rpm", + "dummy-glibc-common-2.14-5.ppc64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.ppc64.rpm", + "dummy-glibc-debuginfo-2.14-5.ppc.rpm", + "dummy-glibc-debuginfo-2.14-5.ppc64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.ppc.rpm", + "dummy-glibc-debuginfo-common-2.14-5.ppc64.rpm", + ]) + + def test_foo32_doc_fulltree(self): + packages = [ + "dummy-foo32-doc", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=True) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-foo32-1-1.i686.rpm", # Important + "dummy-foo32-doc-1-1.noarch.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-foo32-1-1.src.rpm" + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_bash(self): + packages = [ + "dummy-bash", + ] + pkg_map = self.go(packages, None, greedy="none") + + self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-5.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.x86_64.rpm", # Important + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + def test_bash_s390x(self): + packages = [ + "dummy-bash", + ] + pkg_map = self.go(packages, None, greedy="none", arch="s390x") + + self.assertNotIn("dummy-bash-4.2.37-5.s390.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-5.s390x.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-6.s390.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.s390x.rpm", # Important + "dummy-filesystem-4.2.37-6.s390x.rpm", + "dummy-glibc-2.14-5.s390x.rpm", + "dummy-glibc-common-2.14-5.s390x.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.s390x.rpm", + "dummy-glibc-debuginfo-2.14-5.s390x.rpm", + "dummy-glibc-debuginfo-common-2.14-5.s390x.rpm", + ]) + + def test_bash_greedy(self): + # we want only the latest package version + packages = [ + "dummy-bash", + ] + pkg_map = self.go(packages, None, greedy="all") + + self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-5.x86_64.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.i686.rpm", # Important + "dummy-bash-4.2.37-6.x86_64.rpm", # Important + "dummy-filesystem-4.2.37-6.i686.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.i686.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.i686.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.i686.rpm", + "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + def test_bash_older(self): + packages = [ + "dummy-bash-4.2.37-5", + ] + pkg_map = self.go(packages, None, greedy="none") + + self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-5.x86_64.rpm", # Important + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-5.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-5.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + def test_system_release(self): + packages = [ + "dummy-filesystem", + "system-release", + ] + pkg_map = self.go(packages, None, greedy="none") + + self.assertNotIn("dummy-release-client-workstation-1.0.0-1.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-release-client-workstation-1.0.0-1.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-release-client-1.0.0-1.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-release-client-1.0.0-1.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-release-server-1.0.0-1.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-release-server-1.0.0-1.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-release-notes-1.2-1.noarch.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-filesystem-4.2.37-6.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-filesystem-4.2.37-6.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_system_release_greedy(self): + packages = [ + "system-release", + ] + pkg_map = self.go(packages, None, greedy="all") + + self.assertNotIn("dummy-release-notes-1.2-1.noarch.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-release-client-1.0.0-1.i686.rpm", # Important + "dummy-release-client-1.0.0-1.x86_64.rpm", # Important + "dummy-release-client-workstation-1.0.0-1.i686.rpm", # Important + "dummy-release-client-workstation-1.0.0-1.x86_64.rpm", # Important + "dummy-release-server-1.0.0-1.i686.rpm", # Important + "dummy-release-server-1.0.0-1.x86_64.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-release-client-1.0.0-1.src.rpm", + "dummy-release-client-workstation-1.0.0-1.src.rpm", + "dummy-release-server-1.0.0-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_smtpdaemon(self): + packages = [ + "dummy-vacation", + ] + pkg_map = self.go(packages, None, greedy="none") + + self.assertNotIn("dummy-postfix-2.9.2-2.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-sendmail-8.14.5-12.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-sendmail-8.14.5-12.x86_64.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-postfix-2.9.2-2.x86_64.rpm", # Important + "dummy-vacation-1.2.7.1-1.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-postfix-2.9.2-2.src.rpm", + "dummy-vacation-1.2.7.1-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "dummy-postfix-debuginfo-2.9.2-2.x86_64.rpm", + "dummy-vacation-debuginfo-1.2.7.1-1.x86_64.rpm", + ]) + + def test_smtpdaemon_sendmail(self): + packages = [ + "dummy-vacation", + "dummy-sendmail", + ] + pkg_map = self.go(packages, None, greedy="none") + + self.assertNotIn("dummy-postfix-2.9.2-2.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-postfix-2.9.2-2.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-sendmail-8.14.5-12.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-sendmail-8.14.5-12.x86_64.rpm", # Important + "dummy-vacation-1.2.7.1-1.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-sendmail-8.14.5-12.src.rpm", + "dummy-vacation-1.2.7.1-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "dummy-sendmail-debuginfo-8.14.5-12.x86_64.rpm", + "dummy-vacation-debuginfo-1.2.7.1-1.x86_64.rpm", + ]) + + def test_smtpdaemon_greedy(self): + packages = [ + "dummy-vacation", + ] + pkg_map = self.go(packages, None, greedy="all") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.i686.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.i686.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.i686.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-postfix-2.9.2-2.i686.rpm", # Important + "dummy-postfix-2.9.2-2.x86_64.rpm", # Important + "dummy-sendmail-8.14.5-12.i686.rpm", # Important + "dummy-sendmail-8.14.5-12.x86_64.rpm", # Important + "dummy-vacation-1.2.7.1-1.i686.rpm", + "dummy-vacation-1.2.7.1-1.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-postfix-2.9.2-2.src.rpm", + "dummy-sendmail-8.14.5-12.src.rpm", + "dummy-vacation-1.2.7.1-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-glibc-debuginfo-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "dummy-postfix-debuginfo-2.9.2-2.i686.rpm", + "dummy-postfix-debuginfo-2.9.2-2.x86_64.rpm", + "dummy-sendmail-debuginfo-8.14.5-12.i686.rpm", + "dummy-sendmail-debuginfo-8.14.5-12.x86_64.rpm", + "dummy-vacation-debuginfo-1.2.7.1-1.i686.rpm", + "dummy-vacation-debuginfo-1.2.7.1-1.x86_64.rpm", + ]) + + def test_firefox(self): + packages = [ + "Dummy-firefox", + ] + pkg_map = self.go(packages, None, greedy="none") + + self.assertNotIn("Dummy-firefox-16.0.1-1.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-devel-1.10-5.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-workstation-1.10-5.x86_64.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "Dummy-xulrunner-16.0.1-1.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "Dummy-firefox-16.0.1-1.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "Dummy-xulrunner-16.0.1-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", + ]) + + def test_firefox_selfhosting(self): + packages = [ + "Dummy-firefox", + ] + pkg_map = self.go(packages, None, greedy="none", selfhosting=True) + + self.assertNotIn("Dummy-firefox-16.0.1-2.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-workstation-1.10-5.x86_64.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-bash-4.2.37-6.x86_64.rpm", + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-krb5-1.10-5.x86_64.rpm", + "dummy-krb5-devel-1.10-5.x86_64.rpm", # Important + "dummy-krb5-libs-1.10-5.x86_64.rpm", + "Dummy-xulrunner-16.0.1-1.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-bash-4.2.37-6.src.rpm", + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "Dummy-firefox-16.0.1-1.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-krb5-1.10-5.src.rpm", + "Dummy-xulrunner-16.0.1-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", + "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", # Important + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", # Important + "dummy-krb5-debuginfo-1.10-5.x86_64.rpm", + "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", + ]) + + def test_firefox_selfhosting_with_krb5_lookaside(self): + packages = [ + "Dummy-firefox", + ] + pkg_map = self.go(packages, None, lookaside=self.lookaside, + greedy="none", selfhosting=True, + lookaside_repos=["lookaside"]) + + self.assertNotIn("Dummy-firefox-16.0.1-2.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-1.10-5.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-debuginfo-1.10-5.x86_64.rpm", pkg_map["debuginfo"]) + self.assertNotIn("dummy-krb5-1.10-5.src.rpm", pkg_map["srpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-bash-4.2.37-6.x86_64.rpm", + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "Dummy-xulrunner-16.0.1-1.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-bash-4.2.37-6.src.rpm", + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "Dummy-firefox-16.0.1-1.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "Dummy-xulrunner-16.0.1-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", + "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", + ]) + + def test_firefox_fulltree(self): + packages = [ + "Dummy-firefox", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=True) + + self.assertNotIn("Dummy-firefox-16.0.1-2.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-devel-1.10-5.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-workstation-1.10-5.x86_64.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-nscd-2.14-5.x86_64.rpm", + "Dummy-xulrunner-16.0.1-1.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "Dummy-firefox-16.0.1-1.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "Dummy-xulrunner-16.0.1-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", + ]) + + def test_firefox_selfhosting_fulltree(self): + packages = [ + "Dummy-firefox", + ] + pkg_map = self.go(packages, None, greedy="none", selfhosting=True, fulltree=True) + + self.assertNotIn("Dummy-firefox-16.0.1-2.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-bash-4.2.37-6.x86_64.rpm", + "dummy-bash-doc-4.2.37-6.noarch.rpm", + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-krb5-1.10-5.x86_64.rpm", + "dummy-krb5-devel-1.10-5.x86_64.rpm", # Important + "dummy-krb5-libs-1.10-5.x86_64.rpm", + "dummy-krb5-workstation-1.10-5.x86_64.rpm", # Important + "dummy-nscd-2.14-5.x86_64.rpm", + "Dummy-xulrunner-16.0.1-1.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-bash-4.2.37-6.src.rpm", + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "Dummy-firefox-16.0.1-1.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-krb5-1.10-5.src.rpm", + "Dummy-xulrunner-16.0.1-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", + "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "dummy-krb5-debuginfo-1.10-5.x86_64.rpm", + "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", + ]) + + def test_krb5_fulltree(self): + packages = [ + "dummy-krb5", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=True) + + self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-krb5-1.10-5.x86_64.rpm", + "dummy-krb5-devel-1.10-5.x86_64.rpm", # Important + "dummy-krb5-libs-1.10-5.x86_64.rpm", + "dummy-krb5-workstation-1.10-5.x86_64.rpm", # Important + "dummy-nscd-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-krb5-1.10-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "dummy-krb5-debuginfo-1.10-5.x86_64.rpm", + ]) + + @unittest.skip + def test_bash_multilib(self): + packages = [ + "dummy-bash.+", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=True) + + # 'dummy-bash' req already satisfied by bash.i686 + self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.i686.rpm", # Important + "dummy-bash-doc-4.2.37-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.i686.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-nscd-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + @unittest.skip + def test_bash_multilib_exclude(self): + # test if excluding a package really works + # NOTE: dummy-bash-doc would pull x86_64 bash in (we want noarch pulling 64bit deps in composes) + packages = [ + "dummy-bash.+", + "-dummy-bash-doc", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=True) + + self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-doc-4.2.37-6.noarch.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.i686.rpm", # Important + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.i686.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-nscd-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + def test_bash_multilib_greedy(self): + packages = [ + "dummy-bash.+", + ] + pkg_map = self.go(packages, None, greedy="all", fulltree=True) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.i686.rpm", # Important + "dummy-bash-4.2.37-6.x86_64.rpm", # Important + "dummy-bash-doc-4.2.37-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.i686.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.i686.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.i686.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-nscd-2.14-5.i686.rpm", + "dummy-nscd-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.i686.rpm", + "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + # This test is broken. + @unittest.skip + def test_bash_multilib_nogreedy(self): + packages = [ + "dummy-bash.+", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=True) + + self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.i686.rpm", # Important + "dummy-bash-doc-4.2.37-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + # "dummy-glibc-2.14-5.i686.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + # "dummy-glibc-common-2.14-5.i686.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.i686.rpm", + # "dummy-glibc-debuginfo-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + # "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + def test_bash_multilib_filter_greedy(self): + packages = [ + "dummy-bash", + "-dummy-bash.+", + ] + pkg_map = self.go(packages, None, greedy="all", fulltree=True) + + self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.x86_64.rpm", # Important + "dummy-bash-doc-4.2.37-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.i686.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.i686.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.i686.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-nscd-2.14-5.i686.rpm", + "dummy-nscd-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + def test_bash_filter_greedy(self): + packages = [ + "dummy-filesystem", + "dummy-bash.+", + "-dummy-bash", + ] + pkg_map = self.go(packages, None, greedy="all", fulltree=True) + + self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-filesystem-4.2.37-6.i686.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-filesystem-4.2.37-6.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_ipw3945_kmod(self): + # every package name is different + packages = [ + "dummy-kmod-ipw3945", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=True) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-kmod-ipw3945-1.2.0-4.20.x86_64.rpm", # Important + "dummy-kmod-ipw3945-xen-1.2.0-4.20.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-ipw3945-kmod-1.2.0-4.20.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-ipw3945-kmod-debuginfo-1.2.0-4.20.x86_64.rpm", + ]) + + def test_multilib_method_devel(self): + packages = [ + "dummy-lvm2-devel", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=False, + multilib_methods=["devel"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-lvm2-2.02.84-4.x86_64.rpm", + "dummy-lvm2-devel-2.02.84-4.i686.rpm", # Important + "dummy-lvm2-devel-2.02.84-4.x86_64.rpm", # Important + "dummy-lvm2-libs-2.02.84-4.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-lvm2-2.02.84-4.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "dummy-lvm2-debuginfo-2.02.84-4.i686.rpm", + "dummy-lvm2-debuginfo-2.02.84-4.x86_64.rpm", + ]) + + def test_selinux_policy_base(self): + packages = [ + "dummy-freeipa-server", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="ppc64") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-freeipa-server-2.2.0-1.ppc64.rpm", # Important + "dummy-selinux-policy-mls-3.10.0-121.noarch.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-freeipa-2.2.0-1.src.rpm", + "dummy-selinux-policy-3.10.0-121.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_selinux_policy_base_greedy_build(self): + packages = [ + "dummy-freeipa-server", + ] + pkg_map = self.go(packages, None, greedy="build", fulltree=False, arch="ppc64") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-freeipa-server-2.2.0-1.ppc64.rpm", # Important + "dummy-selinux-policy-minimal-3.10.0-121.noarch.rpm", + "dummy-selinux-policy-mls-3.10.0-121.noarch.rpm", # Important + "dummy-selinux-policy-targeted-3.10.0-121.noarch.rpm" + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-freeipa-2.2.0-1.src.rpm", + "dummy-selinux-policy-3.10.0-121.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_selinux_policy_base_existing_provides(self): + packages = [ + "dummy-selinux-policy-targeted", + "dummy-freeipa-server", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="ppc64") + + self.assertNotIn("dummy-selinux-policy-mls-3.10.0-121.noarch.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-freeipa-server-2.2.0-1.ppc64.rpm", # Important + "dummy-selinux-policy-targeted-3.10.0-121.noarch.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-freeipa-2.2.0-1.src.rpm", + "dummy-selinux-policy-3.10.0-121.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_selinux_policy_doc_fulltree(self): + packages = [ + "dummy-selinux-policy-doc" + ] + pkg_map = self.go(packages, None, fulltree=True) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-selinux-policy-doc-3.10.0-121.noarch.rpm", + "dummy-selinux-policy-minimal-3.10.0-121.noarch.rpm", + "dummy-selinux-policy-mls-3.10.0-121.noarch.rpm", + "dummy-selinux-policy-targeted-3.10.0-121.noarch.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-selinux-policy-3.10.0-121.src.rpm" + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_AdobeReader_enu_nosrc(self): + packages = [ + "dummy-AdobeReader_enu", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="x86_64") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-AdobeReader_enu-9.5.1-1.i486.rpm", # Important + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-AdobeReader_enu-9.5.1-1.nosrc.rpm", + "dummy-basesystem-10.0-6.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + def test_imsettings(self): + packages = [ + "dummy-imsettings", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="x86_64") + + self.assertNotIn("dummy-imsettings-gnome-1.2.9-1.x86_64.rpm", pkg_map["rpm"]) + # prefers qt over gnome (shorter name) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-imsettings-1.2.9-1.x86_64.rpm", # Important + "dummy-imsettings-qt-1.2.9-1.x86_64.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-imsettings-1.2.9-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_imsettings_basic_desktop(self): + packages = [ + "dummy-imsettings", + ] + groups = [ + "basic-desktop" + ] + pkg_map = self.go(packages, groups, greedy="none", fulltree=False, arch="x86_64") + + self.assertNotIn("dummy-imsettings-qt-1.2.9-1.x86_64.rpm", pkg_map["rpm"]) + # prefers gnome over qt (condrequires in @basic-desktop) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-imsettings-1.2.9-1.x86_64.rpm", # Important + "dummy-imsettings-gnome-1.2.9-1.x86_64.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-imsettings-1.2.9-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_imsettings_basic_desktop_nodeps(self): + packages = [ + "dummy-imsettings", + ] + groups = [ + "basic-desktop" + ] + pkg_map = self.go(packages, groups, greedy="none", fulltree=False, nodeps=True, + arch="x86_64") + + self.assertNotIn("dummy-imsettings-gnome-1.2.9-1.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-imsettings-qt-1.2.9-1.x86_64.rpm", pkg_map["rpm"]) + # prefers gnome over qt (condrequires in @basic-desktop) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-imsettings-1.2.9-1.x86_64.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-imsettings-1.2.9-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_imsettings_basic_desktop_and_qt(self): + packages = [ + "dummy-imsettings", + "dummy-imsettings-qt", + ] + groups = [ + "basic-desktop" + ] + pkg_map = self.go(packages, groups, greedy="none", fulltree=False, arch="x86_64") + + # prefers gnome over qt (condrequires in @basic-desktop) + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-imsettings-1.2.9-1.x86_64.rpm", # Important + "dummy-imsettings-gnome-1.2.9-1.x86_64.rpm", # Important + "dummy-imsettings-qt-1.2.9-1.x86_64.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-imsettings-1.2.9-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_bash_nodeps(self): + packages = [ + "dummy-bash", + ] + pkg_map = self.go(packages, None, greedy="none", nodeps=True) + + self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-5.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-bash-4.2.37-6.x86_64.rpm", # Important + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-bash-4.2.37-6.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", + ]) + + def test_bash_fulltree_nodeps(self): + packages = [ + "dummy-bash", + ] + pkg_map = self.go(packages, None, greedy="none", nodeps=True, fulltree=True) + + self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-5.x86_64.rpm", pkg_map["rpm"]) + self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-bash-4.2.37-6.x86_64.rpm", # Important + "dummy-bash-doc-4.2.37-6.noarch.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-bash-4.2.37-6.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", + ]) + + def test_lookaside_empty(self): + # if the input repo and lookaside repo are the same, output must be empty + packages = [ + "*", + ] + pkg_map = self.go(packages, None, lookaside=self.repo, + greedy="none", nodeps=True, fulltree=True, + lookaside_repos=["lookaside"]) + + self.assertItemsEqual(pkg_map["rpm"], []) + self.assertItemsEqual(pkg_map["srpm"], []) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_exclude_wildcards(self): + packages = [ + "dummy-bash", + "-dummy-bas*", + "dummy-glibc", + ] + pkg_map = self.go(packages, None, lookaside=self.repo, + greedy="none", nodeps=True, fulltree=True) + + # neither dummy-bash or dummy-basesystem is pulled in + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-nscd-2.14-5.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-glibc-2.14-5.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + def test_atlas_greedy_none(self): + packages = [ + "dummy-atlas-devel", + ] + pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="x86_64") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-atlas-3.8.4-7.x86_64.rpm", + "dummy-atlas-devel-3.8.4-7.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-atlas-3.8.4-7.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_atlas_greedy_build(self): + packages = [ + "dummy-atlas", + "dummy-atlas-devel", + ] + pkg_map = self.go(packages, None, greedy="build", fulltree=False, arch="x86_64") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-atlas-3.8.4-7.x86_64.rpm", + "dummy-atlas-devel-3.8.4-7.x86_64.rpm", + "dummy-atlas-sse3-3.8.4-7.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-atlas-3.8.4-7.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_atlas_greedy_build_multilib_devel(self): + packages = [ + "dummy-atlas-devel", + ] + pkg_map = self.go(packages, None, greedy="build", multilib_methods=["devel"], + fulltree=False, arch="x86_64") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-atlas-3.8.4-7.x86_64.rpm", + "dummy-atlas-devel-3.8.4-7.i686.rpm", + "dummy-atlas-devel-3.8.4-7.x86_64.rpm", + "dummy-atlas-sse3-3.8.4-7.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-atlas-3.8.4-7.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_atlas_greedy_build_multilib_devel_32bit(self): + packages = [ + "dummy-atlas-devel.+", + ] + pkg_map = self.go(packages, None, greedy="build", multilib_methods=["devel"], + fulltree=False, arch="x86_64") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-atlas-3.8.4-7.x86_64.rpm", + "dummy-atlas-devel-3.8.4-7.i686.rpm", + "dummy-atlas-sse3-3.8.4-7.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-atlas-3.8.4-7.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_atlas_greedy_all(self): + packages = [ + "dummy-atlas-devel", + ] + pkg_map = self.go(packages, None, greedy="all", fulltree=False, arch="x86_64") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-atlas-3.8.4-7.i686.rpm", + "dummy-atlas-3dnow-3.8.4-7.i686.rpm", + "dummy-atlas-devel-3.8.4-7.i686.rpm", + "dummy-atlas-sse-3.8.4-7.i686.rpm", + "dummy-atlas-sse2-3.8.4-7.i686.rpm", + "dummy-atlas-sse3-3.8.4-7.i686.rpm", + + "dummy-atlas-3.8.4-7.x86_64.rpm", + "dummy-atlas-devel-3.8.4-7.x86_64.rpm", + "dummy-atlas-sse3-3.8.4-7.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-atlas-3.8.4-7.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_skype(self): + packages = [ + "dummy-skype", + ] + pkg_map = self.go(packages, None, greedy="build", fulltree=False, arch="x86_64") + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-skype-4.2.0.13-1.i586.rpm", + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-glibc-2.14-5.i686.rpm", + ]) + # no SRPM for skype + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-2.14-5.i686.rpm", + ]) + + def test_prepopulate(self): + packages = [ + "dummy-glibc", + ] + prepopulate = [ + "dummy-bash.i686", + "dummy-lvm2.x86_64", + ] + + pkg_map = self.go(packages, None, prepopulate=prepopulate) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-basesystem-10.0-6.noarch.rpm", + "dummy-bash-4.2.37-6.i686.rpm", + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-2.14-5.i686.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-lvm2-2.02.84-4.x86_64.rpm", + "dummy-lvm2-libs-2.02.84-4.x86_64.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-bash-4.2.37-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + "dummy-lvm2-2.02.84-4.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-bash-debuginfo-4.2.37-6.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + "dummy-lvm2-debuginfo-2.02.84-4.x86_64.rpm", + ]) + + def test_langpacks(self): + packages = [ + "dummy-release-notes", + ] + pkg_map = self.go(packages, None) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-release-notes-1.2-1.noarch.rpm", + "dummy-release-notes-cs-CZ-1.2-1.noarch.rpm", + "dummy-release-notes-en-US-1.2-1.noarch.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-release-notes-1.2-1.src.rpm", + "dummy-release-notes-cs-CZ-1.2-1.src.rpm", + "dummy-release-notes-en-US-1.2-1.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], []) + + def test_multilib_whitelist(self): + # whitelist must work regardless if multilib_method is specified or not + packages = [ + "dummy-glibc", + ] + + pkg_map = self.go(packages, None, multilib_whitelist=["dummy-glibc"]) + + self.assertItemsEqual(pkg_map["rpm"], [ + "dummy-filesystem-4.2.37-6.x86_64.rpm", + "dummy-glibc-common-2.14-5.x86_64.rpm", + "dummy-glibc-2.14-5.i686.rpm", + "dummy-glibc-2.14-5.x86_64.rpm", + "dummy-basesystem-10.0-6.noarch.rpm", + ]) + self.assertItemsEqual(pkg_map["srpm"], [ + "dummy-basesystem-10.0-6.src.rpm", + "dummy-glibc-2.14-5.src.rpm", + "dummy-filesystem-4.2.37-6.src.rpm", + ]) + self.assertItemsEqual(pkg_map["debuginfo"], [ + "dummy-glibc-debuginfo-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", + "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", + "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", + ]) + + +if __name__ == "__main__": + unittest.main() From adaed6345c54398ac10a76c92a37f71f2921a904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Thu, 3 Nov 2016 12:57:58 +0100 Subject: [PATCH 2/6] pungi: Fulltree should not apply for input multilib package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the input explicitly lists a package as multilib, we should not automatically add native version just because of fulltree. The tests for this use case are now enabled and passing. Signed-off-by: Lubomír Sedlář --- pungi/gather.py | 5 +++-- tests/test_pungi.py | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/pungi/gather.py b/pungi/gather.py index 8d703cb1..eaf0864c 100644 --- a/pungi/gather.py +++ b/pungi/gather.py @@ -864,6 +864,7 @@ class Pungi(PungiBase): for name in searchlist: pattern = name multilib = False + orig_name = name if name.endswith(".+"): name = name[:-2] multilib = True @@ -898,7 +899,7 @@ class Pungi(PungiBase): # works for both "none" and "build" greedy methods packages = [self.ayum._bestPackageFromList(packages)] - if name in input_packages: + if orig_name in input_packages: self.input_packages.update(packages) if name in comps_package_names: self.comps_packages.update(packages) @@ -1104,7 +1105,7 @@ class Pungi(PungiBase): elif po.arch in self.valid_native_arches: has_native = True continue - if po.arch in self.valid_multilib_arches and self.greedy_method == "all": + if po.arch in self.valid_multilib_arches and (po in self.input_packages or self.greedy_method == "all"): include_multilib = True elif po.arch in self.valid_native_arches: include_native = True diff --git a/tests/test_pungi.py b/tests/test_pungi.py index 29fa6cbb..6ccf1aeb 100644 --- a/tests/test_pungi.py +++ b/tests/test_pungi.py @@ -664,7 +664,6 @@ class TestPungi(unittest.TestCase): "dummy-krb5-debuginfo-1.10-5.x86_64.rpm", ]) - @unittest.skip def test_bash_multilib(self): packages = [ "dummy-bash.+", @@ -698,7 +697,6 @@ class TestPungi(unittest.TestCase): "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ]) - @unittest.skip def test_bash_multilib_exclude(self): # test if excluding a package really works # NOTE: dummy-bash-doc would pull x86_64 bash in (we want noarch pulling 64bit deps in composes) From 079cc46458b6436185eb13a879ec6139fed9dcf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Fri, 4 Nov 2016 08:52:32 +0100 Subject: [PATCH 3/6] pungi: Fix reading multilib config files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When running from git, the files should be found relative to the python module, not executable itself. This change makes it possible to load the files when running tests. Signed-off-by: Lubomír Sedlář --- pungi/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pungi/config.py b/pungi/config.py index ae1a74df..88ece6b7 100644 --- a/pungi/config.py +++ b/pungi/config.py @@ -24,7 +24,7 @@ from ConfigParser import SafeConfigParser # In development, `here` will point to the bin/ directory with scripts. here = sys.path[0] -MULTILIBCONF = (os.path.join(os.path.dirname(here), 'share', 'multilib') +MULTILIBCONF = (os.path.join(os.path.dirname(__file__), '..', 'share', 'multilib') if here != '/usr/bin' else '/usr/share/pungi/multilib') From 4a7257f550b8aea4127949fad2d81e8d627bfe53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Fri, 4 Nov 2016 08:59:10 +0100 Subject: [PATCH 4/6] pungi: Connect yum callback to logger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch changes the format a little and makes sure the output goes to the same logger as the rest of the output. The output no longer contains control characters. Signed-off-by: Lubomír Sedlář --- pungi/gather.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/pungi/gather.py b/pungi/gather.py index eaf0864c..6ed07a9a 100644 --- a/pungi/gather.py +++ b/pungi/gather.py @@ -150,7 +150,17 @@ class PungiBase(object): class CallBack(urlgrabber.progress.TextMeter): """A call back function used with yum.""" - def progressbar(self, current, total, name=None): + def __init__(self, logger): + self.logger = logger + + def start(self, filename=None, url=None, basename=None, size=None, now=None, text=None): + self.logger.info('Downloading %s (%sB)' + % (text, urlgrabber.progress.format_number(size))) + + def update(self, amount_read, name=None): + return + + def end(self, amount_read, now=None): return @@ -325,8 +335,8 @@ class Pungi(PungiBase): self.ayum.repos.enableRepo(thisrepo.id) self.ayum._getRepos(thisrepo=thisrepo.id, doSetup=True) # Set the repo callback. - self.ayum.repos.setProgressBar(CallBack()) - self.ayum.repos.callback = CallBack() + self.ayum.repos.setProgressBar(CallBack(logger=self.logger)) + self.ayum.repos.callback = CallBack(logger=self.logger) thisrepo.metadata_expire = 0 thisrepo.mirrorlist_expire = 0 if os.path.exists(os.path.join(thisrepo.cachedir, 'repomd.xml')): From ea1bcf625b1cb26c02f81e095bb835945876357a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Fri, 4 Nov 2016 09:01:58 +0100 Subject: [PATCH 5/6] pungi: Only add logger once MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Pungi object reuses the same logger for all its instances. Every time a new instance is created, a stream handler would be added. This means that a second instance will print everything twice. When running tests, tens of instances would be created. This patch only adds the handler if there are no handlers configured yet. Signed-off-by: Lubomír Sedlář --- pungi/gather.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pungi/gather.py b/pungi/gather.py index 6ed07a9a..03a2cc33 100644 --- a/pungi/gather.py +++ b/pungi/gather.py @@ -214,12 +214,13 @@ class Pungi(PungiBase): lock = lockfile.LockFile(filename) self.yumlock = ReentrantYumLock(lock, self.logger) - # Create the stdout/err streams and only send INFO+ stuff there - formatter = logging.Formatter('%(name)s:%(levelname)s: %(message)s') - console = logging.StreamHandler() - console.setFormatter(formatter) - console.setLevel(logging.INFO) - self.logger.addHandler(console) + if not self.logger.handlers: + # Create the stdout/err streams and only send INFO+ stuff there + formatter = logging.Formatter('%(name)s:%(levelname)s: %(message)s') + console = logging.StreamHandler() + console.setFormatter(formatter) + console.setLevel(logging.INFO) + self.logger.addHandler(console) self.destdir = self.config.get('pungi', 'destdir') self.archdir = os.path.join(self.destdir, From 0cdef2d8e37b0467cd0a70c71f15a122561956cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Fri, 4 Nov 2016 09:08:11 +0100 Subject: [PATCH 6/6] pungi: Run in-process for testing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of spawning a separate process for each test, move the code to run in the main process. This gives us correct coverage information and makes the tests a lot faster. The input is still provided in a kickstart file. The output also goes into a log file that is later parsed. There is some extra work needed with logging setup to make the logs go to standard output so that nose can correctly capture them. Signed-off-by: Lubomír Sedlář --- pungi/wrappers/pungi.py | 55 +++++++++++++++++++++++++++++++++++++++++ tests/test_pungi.py | 22 ++++++++++------- 2 files changed, 68 insertions(+), 9 deletions(-) diff --git a/pungi/wrappers/pungi.py b/pungi/wrappers/pungi.py index 09ab621e..32033a6a 100644 --- a/pungi/wrappers/pungi.py +++ b/pungi/wrappers/pungi.py @@ -197,3 +197,58 @@ class PungiWrapper(object): result.setdefault(match.group(2), set()).add(match.group(1)) return result + + def run_pungi(self, ks_file, destdir, name, selfhosting=False, fulltree=False, + greedy='', cache_dir=None, arch='', multilib_methods=[], + nodeps=False, lookaside_repos=[]): + """ + This is a replacement for get_pungi_cmd that runs it in-process. Not + all arguments are supported. + """ + from .. import ks, gather, config + ksparser = ks.get_ksparser(ks_path=ks_file) + cfg = config.Config() + cfg.set('pungi', 'destdir', destdir) + cfg.set('pungi', 'family', name) + cfg.set('pungi', 'iso_basename', name) + cfg.set('pungi', 'fulltree', str(fulltree)) + cfg.set('pungi', 'selfhosting', str(selfhosting)) + cfg.set('pungi', 'cachedir', cache_dir) + cfg.set('pungi', 'full_archlist', "True") + cfg.set('pungi', 'workdirbase', "%s/work" % destdir) + cfg.set('pungi', 'greedy', greedy) + cfg.set('pungi', 'nosource', 'False') + cfg.set('pungi', 'nodebuginfo', 'False') + cfg.set('pungi', 'force', 'False') + cfg.set('pungi', 'resolve_deps', str(not nodeps)) + if arch: + cfg.set('pungi', 'arch', arch) + if multilib_methods: + cfg.set('pungi', 'multilib', " ".join(multilib_methods)) + if lookaside_repos: + cfg.set('pungi', 'lookaside_repos', " ".join(lookaside_repos)) + + mypungi = gather.Pungi(cfg, ksparser) + + with open(os.path.join(destdir, 'out'), 'w') as f: + with mypungi.yumlock: + mypungi._inityum() + mypungi.gather() + + for line in mypungi.list_packages(): + flags_str = ",".join(line["flags"]) + if flags_str: + flags_str = "(%s)" % flags_str + f.write("RPM%s: %s\n" % (flags_str, line["path"])) + mypungi.makeCompsFile() + mypungi.getDebuginfoList() + for line in mypungi.list_debuginfo(): + flags_str = ",".join(line["flags"]) + if flags_str: + flags_str = "(%s)" % flags_str + f.write("DEBUGINFO%s: %s\n" % (flags_str, line["path"])) + for line in mypungi.list_srpms(): + flags_str = ",".join(line["flags"]) + if flags_str: + flags_str = "(%s)" % flags_str + f.write("SRPM%s: %s\n" % (flags_str, line["path"])) diff --git a/tests/test_pungi.py b/tests/test_pungi.py index 6ccf1aeb..a3297e73 100644 --- a/tests/test_pungi.py +++ b/tests/test_pungi.py @@ -10,8 +10,7 @@ import os import tempfile import shutil import sys - -from kobo.shortcuts import run +import logging HERE = os.path.dirname(__file__) BINDIR = (os.path.join(HERE, '..', 'bin')) @@ -42,7 +41,13 @@ class TestPungi(unittest.TestCase): "fixtures/repos/repo-krb5-lookaside") self.ks = os.path.join(self.tmp_dir, "ks") self.out = os.path.join(self.tmp_dir, "out") - self.p = PungiWrapper() + logger = logging.getLogger('Pungi') + if not logger.handlers: + formatter = logging.Formatter('%(name)s:%(levelname)s: %(message)s') + console = logging.StreamHandler(sys.stdout) + console.setFormatter(formatter) + console.setLevel(logging.INFO) + logger.addHandler(console) def tearDown(self): shutil.rmtree(self.tmp_dir) @@ -53,17 +58,16 @@ class TestPungi(unittest.TestCase): Write a kickstart with given packages and groups, then run the depsolving and parse the output. """ + p = PungiWrapper() repos = {"repo": repo or self.repo} if lookaside: repos['lookaside'] = lookaside - self.p.write_kickstart(self.ks, repos, groups, packages, prepopulate=prepopulate, - multilib_whitelist=multilib_whitelist) - kwargs.setdefault('full_archlist', True) + p.write_kickstart(self.ks, repos, groups, packages, prepopulate=prepopulate, + multilib_whitelist=multilib_whitelist) kwargs.setdefault('cache_dir', self.tmp_dir) - cmd = self.p.get_pungi_cmd(self.ks, self.tmp_dir, "DP", **kwargs) - run(cmd, logfile=self.out, stdout=True) + p.run_pungi(self.ks, self.tmp_dir, 'DP', **kwargs) with open(self.out, "r") as f: - pkg_map = self.p.get_packages(f.read()) + pkg_map = p.get_packages(f.read()) return convert_pkg_map(pkg_map) def test_kernel(self):