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

_______________________________________________
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Reply via email to