From d12d51a51bd885b4e7738d34e798d28492381152 Mon Sep 17 00:00:00 2001 From: waterflow80 Date: Fri, 2 Aug 2024 02:33:46 +0100 Subject: [PATCH] Add unit tests for rpm metadata parsers --- .../test-files/filelists-sample-10.xml.gz | Bin 0 -> 782 bytes .../test-files/filelists-sample-2.xml.gz | Bin 0 -> 453 bytes .../tests/test-files/primary-sample-10.xml.gz | Bin 0 -> 932 bytes .../tests/test-files/primary-sample-2.xml.gz | Bin 0 -> 1221 bytes python/lzreposync/tests/test_lzreposync.py | 338 ++++++++++++++++-- 5 files changed, 300 insertions(+), 38 deletions(-) create mode 100644 python/lzreposync/tests/test-files/filelists-sample-10.xml.gz create mode 100644 python/lzreposync/tests/test-files/filelists-sample-2.xml.gz create mode 100644 python/lzreposync/tests/test-files/primary-sample-10.xml.gz create mode 100644 python/lzreposync/tests/test-files/primary-sample-2.xml.gz diff --git a/python/lzreposync/tests/test-files/filelists-sample-10.xml.gz b/python/lzreposync/tests/test-files/filelists-sample-10.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..1ce313e8f59c3418303a3c5ccf94f24a9a0ed95e GIT binary patch literal 782 zcmV+p1M&PHiwFp=FO6mZ17>M#Wo&74baO3pVQp}1Wi2r9QWrr~Lq1H*EAI=XN|D_QM~)|2pR3>+_eVew=hVu9tOV_NR3}yj(8xFT34zJYCgdxDDI5g<1_t|{(*>}O89&DjKt zT$kg#UC&S7Jz%uE58QtMXO;prsKgpDSMR%`lkV7umXs5OVh-t0THYTEs&eAQjW>u?gbK9&IgbPr4o=*%*g^Aa>WcKdO<>eC-x%$8rnGrWBbs zW6K^CBAFvtm~zq>1WJjSvG<*SD0g2cWfm?j6(9z?-n`?^EwV=*(3}oUKL~_wUl+=@@yZW01hVC

kQWET*jM~XS~l3KPzM#Wo&74baO3pVQp}1Wi2u;cx`L|?UYS#+#nE!@BI~s z`x*?!8&~$`P$^L_Z4d3CM;Hb#T7Mw0tMuO&N86@~(lpvr4v~EBXI{}>-;D$L zfid}c>S$STN^pYN`l;{ex34$5D|&r+*E&Do;M0;wK0l?79+xG&XKe7(dRN%>gaz7_ zjksv57tQ{hrzB`N=^is9XwGzgCE?V2+fn7D;MLwJ1st@n0Gw;i#h!!ZrsURDd2y)0 zHc}}>=NeOM&6{RltG%IQ(j#`XPfNtSi@Pway`R#~XiJHXaO|kw9(9$=6Vjf=5)AY9 zEep<(O}Y@9`iMhEhfpe2$f7Dr%I>L6(1EQfX33_m*h9VCvn`eb8eok+6lren8}M?_ z1{f{Eg=8Ms1tg{mpn3ckl#V*$BPc{nxFmL)mYax}`)rC3(<7cNKSQ3N^^yLaYVd$l z!o;2&?KA)IJjgzL{__3fr`z8NT6T8i6W-Jsn$k#w%1Cu(gm9=hIIe}XHR`&QP4=uS v8{W7k+Y+Qvds%@lg_7L8$eSTRT@Co=&Hs7x_1NU$c02q6QP@>_Km`B*cx~jm literal 0 HcmV?d00001 diff --git a/python/lzreposync/tests/test-files/primary-sample-10.xml.gz b/python/lzreposync/tests/test-files/primary-sample-10.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..a50ad60642620b2771cb6ceb49f5f36f0ed8124e GIT binary patch literal 932 zcmV;V16%wbiwFojERALW18{O_ZDDeGEpuUQaBO8QF)%K8ZEOJTnq7;WIvB_A_fv%2 zt4TC*TpWAVmO@Jxw!P@pA;vh$sF6gsyZ!V{9Os3@K$mjZ(=CC4y#1diJ}>_8V)8eS zeFq+-Hmw@A5Qhi?IS5s?!)^<|et8#c;G5zm@8!fRK5<~>gW1Ann#S8G>e^v`46AuB zLs`wyQ56Z*_iBI#^{pQJUs_lV1S1!FzLVBJf%ejM38tq}ZlO~YHvr@V?`5$wla_X( zgRz@;?O=kES9!FYIT6>QDIPcMAC~0NvT(a=pg@jFG+StcwL30sLR{opc3aqun9?u~ zlMusbu@a3Gdo%azgP4XB%IwqbcWt$W-`?KCg4QuXNm^1Wkl>^e0wInNNs*{fiBVN2 z_J;%$RTfh!WnE__;~ZsK%4k~V(eaYyMmzRgKNauq*C@eZVyhB-l2yyWJ8ieWE4>GI zHvZtlVDji_6p`PBB( z-EUKlQ-rcjhEWDVIk%lnJ7yW%P(rg~l}!6X9y`c35YEyhB@o!wn0VJoXM(eY#TyEN zYl!wiE?bORN2`xc3GTuJjh6Kma;IZSbhX)nL)Qcs{SvMQq3hLy$6D#0Pi|@#cKfz# zg-wtwKEA*E7?2PLN(UXcInJZYruLzo zo}y24=Tc}(9DSae;{^xd*>Fi`qs&xr-7gEm4$AY%S#8v;g|xHlFW|MD7%f~r4nEKJ zXP=Gam35=}VBd9HEIn-@BWNL!t6GxLQ-PvmK2NRnUvOeAn+Jslg$IQP#UB9*=0V{> z;X(0AK{1YkC7pbcFAB~@hRaxrq>SmNB&3!Ui5hVdS4?t-`$%rZj6B~9Z* za7<{7Y7dIv1ce>0gCeGw#{U9EOjsPp=_M#)vLP8k*Fmv1(DOmD8oW+WsL}+Z`Y!b* zK={vM1w{D?BSaD?BTn!HSJ%g=d9l#f!26T)^VojlYkJ zLAl{2XpwnZcv^T`yxuR1mqP_c9u*!H9u*!HzeWZ2sPL%psQAB7ar!T3aq|;}_PZEX GDgXcpyv3^k literal 0 HcmV?d00001 diff --git a/python/lzreposync/tests/test-files/primary-sample-2.xml.gz b/python/lzreposync/tests/test-files/primary-sample-2.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..4df23c7debc9260498abf00377dbb37166b4510a GIT binary patch literal 1221 zcmV;$1Uma4iwFn{d5mTN18{O_ZDDeGEpuUQaBO8QGA?*+Yyj<8TW{Mo6n^)wAoP@A z)7_G-z;>|>X&NBKGNgUj(?F4wMVJybl5*nx`W;I0C9UImLpNk-0mG)K?|kR*+<4&G zo2N>kHB*|)dhUc?;2>5LNqN1TJ0Cy1b*Ijo#b{PBgDEx`0le08r!=Oy@_oVU_Q|8| zig}E-{ubpESyi%jdi0fQs=t%~jDs3XR(Q#PKXO3n@QBQ&VROeK79)gaHLloVsf}W= zP;MjIC9k!cV>T%jBq0I85hWxDa1cb3fY2Zh z16qvX6Ofe9EKU-}iXzKXjDswjq{$?o`CBEOM)<9;+AMA!hGU|B0bz09Gs-b~t6=+4 zsuj8i2e`Mjp7~oT%RreXiZ=#Md%(gq!boqaP}NZtJE|OOMiKaDsc=(jBnwnde!rU-oTE&1LgCU*8 zHGAxg>_P_zQlkTAf*YK3!3~F3*2tV8OexT5UNvHa@(qI2GFS);w_Jl(?all{4_l89 z>8ch(s^{%ed*HEJx0-oUEoc4?V)3mK9aIB$m(E_H7z5^&kxegSVHVyw2ciK97*2v9 zn`U8hl#uMZy|u6x+9xkoLPY@5ZslC&j;uesUy?^|JA2$|>qY|5>I z9=I3m+*wL(7Fbo?LzMQ&{hK`+a#axqtKW1WTE@ zlSV<;m~GU?S+Wh#AORU|3q$u?!zQZ@RG#gJa|et&G|NGSz)R?|*S|O~bVC0W*XIX4 zgYkvldcKZ}E}PtReEDx_3oj^xs}I!TeM9pp*5!9_kzHO~UZmrko6CRBRXr7-)AXtE zJcu2!V!yXsor)_o*vK_f3JtfBvITs~wgdFbC_&xsj&`@jtECs7bM)haH+Q!`{`4CZ z_T(H2p1;GQu#!=HmQJ4EvL`nJ1%FFMRJT=eLaYzTbN_clGS^Ztb0Q`{4@t154Q_XN zdiUW-o`%zXo%Q-YAs?tqT$9ta-Dli$u0y$*ziqp_8|X_+S4~6Gv0(qnbcHd=!aQbV zoX5#DkD`Jl0Vx6;#WZC&4dV=^t|H8WtjJ)nB5|Hf;xWNtl*B>tZMyn4U44P+3Vx1H zS8)<1@h8(&9Hns_PY$Q6IGRRT6da$fhH^T8x*7!jpVJleI=7LJOikS&d|d-p5~N}J jH4a#iP_JpcdS!Fb$=T#<7#Mbc)-3)6uD#%4HWB~;QT9XI literal 0 HcmV?d00001 diff --git a/python/lzreposync/tests/test_lzreposync.py b/python/lzreposync/tests/test_lzreposync.py index 782b2e8839fa..f364beb62572 100644 --- a/python/lzreposync/tests/test_lzreposync.py +++ b/python/lzreposync/tests/test_lzreposync.py @@ -1,54 +1,316 @@ +# pylint: disable=missing-module-docstring +import datetime +import gzip import io -import os.path -from unittest.mock import patch, mock_open +import unittest -from lzreposync import Handler, RPMRepo +from lzreposync.filelists_parser import FilelistsParser +from lzreposync.primary_parser import ( + PrimaryParser, + complex_attrs, + map_dependency_attribute, +) +from lzreposync.rpm_metadata_parser import MetadataParser def test_download_and_parse_metadata(): - test_hash = "00c99a7e67dac325f1cbeeedddea3e4001a8f803c9bf43d9f50b5f1c756b0887" - test_name = "Leap15" - test_cache_dir = ".cache" - test_repo = "https://download.opensuse.org/update/leap/15.5/oss/repodata/" - cache_file = os.path.join("{}/{}".format(test_cache_dir, test_name), test_name + ".hash") - test_rpm_handler = Handler() + """TODO""" - with patch("builtins.open", mock_open()) as mocked_file: - rpm_repo = RPMRepo(test_name, test_cache_dir, - test_repo, - test_rpm_handler) - rpm_repo.get_packages_metadata() - mocked_file.assert_called_once_with(cache_file, 'w') - mocked_file().write.assert_called_once_with(test_hash) +def test_verify_signature(): + """TODO""" -def test_parse_primary_missing_element_attributes(): - """ - Testing the parsing with a primary.xml file of 2 packages, one of which have missing element attributes: - 'epoch' and the 'ver' of the second package are missing. - The current parser's behaviour is to ignore the missing attribute, and continue parsing - """ - test_primary_path = "primary_test_missing_element_attributes.xml.gz" - test_cache_dir = ".cache" - handler = Handler() +class LazyRepoSyncTest(unittest.TestCase): - with open(test_primary_path, "rb") as primary_gz: - file_obj = io.BytesIO(primary_gz.read()) + def test_parse_primary(self): + """ + Test the parsing functionality for rpm's primary.xml metadata file + """ - rpm_repo = RPMRepo(None, test_cache_dir, None, handler) - parsed_packages_count = rpm_repo.parse_metadata_file(file_obj) + # Prepare test data: valid rpm package metadata in primary.xml + primary_xml = """ + + + gstreamer-plugins-bad + aarch64 + + 5f32047b55c0ca2dcc00a00270cd0b10df4df40c6cd9355eeff9b6aa0997657b +

GStreamer Streaming-Media Framework Plug-Ins + GStreamer is a streaming media framework based on graphs of filters + that operate on media data... + + http://bugs.opensuse.org + https://gstreamer.freedesktop.org +