Chris, I see. Seems like file ordering differs for some reason. I should not have relied on it, anyway. Rewrote it so file ordering is not taken into account. Does it work now?
Thank you, Maria вс, 15 янв. 2017 г. в 2:43, Chris Lamb <la...@debian.org>: > Maria, > > Thank you so much for these :) > > > Added some tests for APK comparator, see attached patch. > > Unfortunately I'm seeing: > > differences = [<Difference zipinfo {} -- zipinfo {} []>, <Difference APK > metadata -- APK metadata []>, <Difference AndroidManifest.xml -- > AndroidManifest.xml []>, <Difference original/AndroidManifest.xml -- > original/AndroidManifest.xml []>] > > @skip_unless_tools_exist('apktool', 'zipinfo') > def test_android_manifest(differences): > > assert differences[1].source1 == 'AndroidManifest.xml' > E assert 'APK metadata' == 'AndroidManifest.xml' > E - APK metadata > E + AndroidManifest.xml > > Any ideas? > > > However, please keep in mind apktool takes a lot of time to run even on > toy > > examples > > Whilst I am not a fan of it slowing down this much, I think I'd > prefer to see some tests in there (that we can speed up later) > rather than none. > > > Regards, > > -- > ,''`. > : :' : Chris Lamb > `. `'` la...@debian.org / chris-lamb.co.uk > `- >
From 67e0ca7b632699f54aec27069efd4e0c547ab708 Mon Sep 17 00:00:00 2001 From: Maria Glukhova <siamez...@gmail.com> Date: Fri, 13 Jan 2017 23:22:10 +0200 Subject: [PATCH] Add some tests for APK comarator. --- tests/comparators/test_apk.py | 66 ++++++++++++++++++++++++++++++++++ tests/data/apk_manifest_expected_diff | 11 ++++++ tests/data/apk_zipinfo_expected_diff | 6 ++++ tests/data/test1.apk | Bin 0 -> 866 bytes tests/data/test2.apk | Bin 0 -> 864 bytes 5 files changed, 83 insertions(+) create mode 100644 tests/comparators/test_apk.py create mode 100644 tests/data/apk_manifest_expected_diff create mode 100644 tests/data/apk_zipinfo_expected_diff create mode 100644 tests/data/test1.apk create mode 100644 tests/data/test2.apk diff --git a/tests/comparators/test_apk.py b/tests/comparators/test_apk.py new file mode 100644 index 0000000..3093027 --- /dev/null +++ b/tests/comparators/test_apk.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# +# diffoscope: in-depth comparison of files, archives, and directories +# +# Copyright © 2017 Maria Glukhova <siammez...@gmail.com> +# +# diffoscope is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# diffoscope is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with diffoscope. If not, see <https://www.gnu.org/licenses/>. + +import pytest + +from diffoscope.comparators.apk import ApkFile + +from utils import skip_unless_tools_exist, data, load_fixture, \ + assert_non_existing + +apk1 = load_fixture(data('test1.apk')) +apk2 = load_fixture(data('test2.apk')) + +def test_identification(apk1): + assert isinstance(apk1, ApkFile) + +def test_no_differences(apk1): + difference = apk1.compare(apk1) + assert difference is None + +@pytest.fixture +def differences(apk1, apk2): + return apk1.compare(apk2).details + +@skip_unless_tools_exist('apktool', 'zipinfo') +def test_compare_non_existing(monkeypatch, apk1): + assert_non_existing(monkeypatch, apk1) + +@skip_unless_tools_exist('apktool', 'zipinfo') +def test_zipinfo(differences): + assert differences[0].source1 == 'zipinfo {}' + assert differences[0].source2 == 'zipinfo {}' + expected_diff = open(data('apk_zipinfo_expected_diff')).read() + assert differences[0].unified_diff == expected_diff + +@skip_unless_tools_exist('apktool', 'zipinfo') +def test_android_manifest(differences): + manifest_diff = next((d for d in differences + if d.source1 == 'AndroidManifest.xml'), None) + assert manifest_diff is not None + assert manifest_diff.source2 == 'AndroidManifest.xml' + expected_diff = open(data('apk_manifest_expected_diff')).read() + assert manifest_diff.unified_diff == expected_diff + +@skip_unless_tools_exist('apktool', 'zipinfo') +def test_apk_metadata_source(differences): + metadata_diff = next((d for d in differences + if d.source1 == 'APK metadata'), None) + assert metadata_diff is not None + assert metadata_diff.source2 == 'APK metadata' diff --git a/tests/data/apk_manifest_expected_diff b/tests/data/apk_manifest_expected_diff new file mode 100644 index 0000000..9d37a92 --- /dev/null +++ b/tests/data/apk_manifest_expected_diff @@ -0,0 +1,11 @@ +@@ -1,9 +1,9 @@ + <?xml version="1.0" encoding="utf-8"?> +-<manifest android:versionCode="1" android:versionName="1.0" package="com.any.any" platformBuildVersionCode="24" platformBuildVersionName="7.0.0" ++<manifest android:versionCode="2" android:versionName="2.0" package="com.any.any" platformBuildVersionCode="24" platformBuildVersionName="7.0.0" + xmlns:android="http://schemas.android.com/apk/res/android"> + <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> + <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> + <application> + <activity android:name="com.any.any.SomeActivity"> + <intent-filter> diff --git a/tests/data/apk_zipinfo_expected_diff b/tests/data/apk_zipinfo_expected_diff new file mode 100644 index 0000000..d1810dc --- /dev/null +++ b/tests/data/apk_zipinfo_expected_diff @@ -0,0 +1,6 @@ +@@ -1,3 +1,3 @@ +-Zip file size: 866 bytes, number of entries: 1 ++Zip file size: 864 bytes, number of entries: 1 + -rw---- 2.0 fat 2096 bl defN 80-Jan-01 02:00 AndroidManifest.xml +-1 file, 2096 bytes uncompressed, 714 bytes compressed: 65.9% ++1 file, 2096 bytes uncompressed, 712 bytes compressed: 66.0% diff --git a/tests/data/test1.apk b/tests/data/test1.apk new file mode 100644 index 0000000000000000000000000000000000000000..45876d61fab82fc0c492af2cf60e56a3792f820f GIT binary patch literal 866 zcmWIWW@Zs#;Nak3U=UDbKnB7<j$>X*QGRBMZ(?3%T555LUPW%s+z|hKAxD|o!%laj zG@=hQi3sznxlPvFYM5mc$$3oe>a1<wB2=epMKvC{b)-Afrt-^!h3Wmr_#YhPe|WP$ z!R80&74yx;cN1T_J<5|a{`~BF^?rNfZf0?BJ%xb7iBcBrFDmoTu09g_NNl6?9#uO5 z`_6b5FNW(K&yPqy>iFSNqqI-perHhE?<3)lq(3(Q@YS(C!2HOt(4|H#t)Rh-O=3~A z+^&od-#KS~oclZD;nG{4#i`FM`()Rdzx>K{TUoB5y<r-&jjFuLjX8^4r&}|xvzBQ* zUE%hcq4ti;-1h>zQ*QNKd32}$=I=Xi3)lPY^Z#pAerwC>{+CX!uP5JM8ta|P8gk-I zv1mg7G-j>4$F!^7Tu!%MXg>M3OKfrIzt~UJTKgToTAZ<6^YZIQ4vQU!u1>Nk)LAV( z@nGrEmYjJX+q}{z?%Wc}C%bOZKE0l=FIBANSDz{5_RT5CDPoJ6b)mRbHuFOI<oC+w zuAR&&xc4NhcQxDf=qvHdjS4>Q4|%`hk6&2HS~;GpcPGhC-R>~YuYK=S^^{)^R~1ix z&8!p<yH4fH{q#5UthP@zoIhvRd&cii-YfYB&#PXL#kj0*aZBLp<j~vq{&j5aukP8t zDw}(A{^x0@q}7z?|8Ebwb2$Bc*oO&Kymvy?d1Sbz|999UtErgP!mPMS<~K{r@xBw% z?0+6k4*YuJzYPC-oj5z=In#fneJM9x>b~>%eoOxhzZHEas~$XARGVTt{puZ)<2NUK z)|zF#_FZMh^y`&(0`3<~X<z<XAWY8ayyaVUclYa}-;Jx@u~f0H4d3wPQJq_U71Q2D z*R-Rm3hh^JU-qu#$n-67r!Ez**|*$e`nDaLM3vX6CdXVzPx)bN)mG^fyLsB#8mHLQ z*zlW|&PCTvWyw9i$#V9B*sHffSI^rq|KjY;KU!J#&bqcb5@_CG@g!4;eG;!bA9`=B zld6+je1Ag6$7i#Da|d{{b1?SYw?D<iz+eDO{{h~NOd<@3%z!Kh$_%IgOV$YRW@Q5@ OVgy1*AkEDT;sF3N7=`@+ literal 0 HcmV?d00001 diff --git a/tests/data/test2.apk b/tests/data/test2.apk new file mode 100644 index 0000000000000000000000000000000000000000..925fb42d60056f56ae76d8ee1cd4f16c457e8d89 GIT binary patch literal 864 zcmWIWW@Zs#;Nak3U=UDbKnB7<j$>X*QGRBMZ(?3%T555LUPW%s+z|hKAxD|o(@uAz zqP8`#YO2Zk^r*$oI=14YicpX5D%0GzfvQurq8bm}I?|nKQ~Bk=!u0-Q{0|QDKfKwW zVDp3Xiuq>ayNL<Ph35S;D?k6<dw>4Sqpj_s`~?9=1Enn5e^ln5(LN&jNbTc<3hx?) zI-&g?Q<!5^=LzR`BtKIA*!jb$M!ie(op5|-{t^C1<{O_eeeXPe#PH+H8HW{bNhEae zRlQhr@V<J=vGR8dTc;PPpPf4IeDRxty}s+kZ^(XRsA<_E^FZ^b!NF%Dy1VX37TkTv z5p&Eqs{O@dwyc`=8_Ji{mWVxXOqDO#etfUgPrI+#cQP-pGh4<jxz@j~zf5<gXn<Pr zfzXcHD83aX-0NQyI?TV@a?j_zaQWHEKg&<PKmEt)=3|ZTE0$eXSALMxyE?S+(VR}{ zi3d$jy5#hIYzs<n-MJ-|Pj=m-eR}<0GbhD1ls?<hthUX<%#vBp_hn?dyVRGP&wh7o z_BD#0W4`m&gH;E=@_jX5$rJNO|LSd{{U^KTU2I;sCwkH1M`9h9UvAj`sHMc-rt)1< ztw+nI(@$IevG?4a{5(wl^UUerZJ*5h5&JN+tC&Ak_rMv?DH>U+YqBm|OKjvTnEvrv zXl~%Q+<QTVhh3h0{(oVUEz`F(ee74VAN1KIJ~;952mg`V6N~0(Jv>ynN#-|;%zRlv zbG{#k)s<fh{<pNdC%LEMnT7tRvn$?bx%DRX*B94$752TEv4Z_w&7S@>k2ZD9e!4@T zur9K2`BU5eH$__guRlrmef|(C*Eg}fWABPTM_#Pjm1Dp5x$na1;Z>E+=f7R9+8q2s zbV}U83!DG8+-uu&*)Tq&O4IrL+za2g9Gu!Cv29vMq2t_%&(5!q_;s;VSHjGjvvg`m ztg5qh`j4r?TWSwK%V{ce%?$6U0vfwL<HKprs?eq3reAXG&pux(WfH%kYSGU{SN+fG zCw`GG(uu1tu4fGJX6INgC_Uu_69a<*F!cv`Gct)VAhH6o94ITG0xTILz?+o~q=*p+ L9f33_Gl&NOgqe-F literal 0 HcmV?d00001 -- 2.11.0