On Mon, 09 Jan 2017 17:11:39 +0000 Chris Lamb <la...@debian.org> wrote: > Fixed - so sorry about that! Now I wonder if we should insist on tests > with patches... ;)
Added some tests for APK comparator, see attached patch. However, please keep in mind apktool takes a lot of time to run even on toy examples, so adding these tests would extend the time taken by the whole testing process significantly (almost doubles it at my system). Which makes me wonder if that was the reason such tests were not added together with APK comparator in the first place... Maria Glukhova
From ba61270f532e29fdaa990190dc7be50ae5c91e44 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 | 62 ++++++++++++++++++++++++++++++++++ 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, 79 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..6253ace --- /dev/null +++ b/tests/comparators/test_apk.py @@ -0,0 +1,62 @@ +# -*- 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): + assert differences[1].source1 == 'AndroidManifest.xml' + assert differences[1].source2 == 'AndroidManifest.xml' + expected_diff = open(data('apk_manifest_expected_diff')).read() + assert differences[1].unified_diff == expected_diff + +@skip_unless_tools_exist('apktool', 'zipinfo') +def test_apk_metadata_source(differences): + assert differences[2].source1 == 'APK metadata' + assert differences[2].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