[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master] Add first unit tests for GnuPG wrapper.



---
 tests/fixtures/gpg/expired-subkey.asc    |   13 +++++++
 tests/fixtures/gpg/expired.asc           |   13 +++++++
 tests/fixtures/gpg/gnupghome/pubring.gpg |  Bin 0 -> 1609 bytes
 tests/fixtures/gpg/gnupghome/secring.gpg |  Bin 0 -> 2937 bytes
 tests/fixtures/gpg/valid.asc             |   13 +++++++
 tests/test_gpg.py                        |   57 ++++++++++++++++++++++++++++++
 6 files changed, 96 insertions(+)
 create mode 100644 tests/fixtures/gpg/expired-subkey.asc
 create mode 100644 tests/fixtures/gpg/expired.asc
 create mode 100644 tests/fixtures/gpg/gnupghome/pubring.gpg
 create mode 100644 tests/fixtures/gpg/gnupghome/secring.gpg
 create mode 100644 tests/fixtures/gpg/valid.asc
 create mode 100755 tests/test_gpg.py

diff --git a/tests/fixtures/gpg/expired-subkey.asc b/tests/fixtures/gpg/expired-subkey.asc
new file mode 100644
index 0000000..d105f6b
--- /dev/null
+++ b/tests/fixtures/gpg/expired-subkey.asc
@@ -0,0 +1,13 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA512
+
+Valid: expired-subkey
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1
+
+iJwEAQEKAAYFAlLsQwMACgkQ+DxQkDe7kaCctQQAuzx+L6Bo+8oI9zTb04Cg2EAW
+ul4rN7XIqj3Q9/Cy2/+6+ET7GE414cA3KEElrimgAHHNdr6xPOJnEYAHSlMRG0wk
+gP9zk0nAt1ZJRgmWKb2zgbV6DYz7gAcUVaZMd+fixBdn39E3SkMnDHsUhWZNecsG
+BpSvYQJ7pQDnqo9gWbY=
+=AKH9
+-----END PGP SIGNATURE-----
diff --git a/tests/fixtures/gpg/expired.asc b/tests/fixtures/gpg/expired.asc
new file mode 100644
index 0000000..42b5217
--- /dev/null
+++ b/tests/fixtures/gpg/expired.asc
@@ -0,0 +1,13 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA512
+
+Valid: expired
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1
+
+iJwEAQEKAAYFAjp4sQMACgkQVDsrrtoETwtbowQAxZ+imlX8u44TCRaJmgSDx6dV
+G+BiNiM7RXbfoYD3jmKWX8ILdxBXyMP2YaPmtRij03h1q8idjol6mxGl2xBrOdbB
+hE7N+67MuvpGB1yBOb6JJQuqLALyoK+efzcqPBEJv3s0eeYbWkB4ZxWRhso1DDnm
+RYieWYyoR9/oNVhsBmE=
+=WR84
+-----END PGP SIGNATURE-----
diff --git a/tests/fixtures/gpg/gnupghome/pubring.gpg b/tests/fixtures/gpg/gnupghome/pubring.gpg
new file mode 100644
index 0000000000000000000000000000000000000000..88d7e4db74ed0d9cc0baa58c81d97e368900f6ca
GIT binary patch
literal 1609
zcmajfcTm%37{Kx5mk_3eA;Tcb6evPi0c1(l2oh9eiBwP^j2MWBWflUmWJP630s=)4
zC`-Z+4jM+mvb3_11Y|{KSmlVUVj1=9U3=}H@7?pq`+nZ<J!BG8?`m%;7z$$W1f;I_
zOIrrq-7<{$*y87MVXHL1l8sw$U~N?;W0Vn$L1ck(`knL7YR9wePhOTSZn{w-v1*z!
zU1{0gmVrhG5igCE7sqifvskY-mvGI-lh4%_JU`W3b|Tz_=(Ro#zwVW?GSQ)5uT<~H
zd|xD$65kO^^tVj~4_+67dw&KAf<fRaC3Ju{&c_uig>em(GH^XSsNh`#ja>tryu3YK
zRdEDACr=#KD5e1_3<f}o9Kikq00{^OH%R9e2*%6J#R&mmB3uAB4=+>{fPjG$U_dMk
z#KSFMt*=~0hhF6cR-vGw0tXP)%p@wmTFW;^lu;NVu<=`pO0ukGCd%N`cynuBYSijW
zgc5R^#D)5-&<UkY(9!evP}>eXSvHZ%C6aXW=*;NBoj$Jcdr$IEY?A!kW5drDr}BqI
zWN6a2B1{sP5?aD0N--j|_HD@{S(PHRz;jQPc@_F4;qCqvZ$irf5QI#ETDF)M@99@+
z%PY0!RLNfZmb@OzMp_gT;bSP`YEo_S@hmy#H0H^i%*oh-mp%>OTZr~Uu64#)G6|O{
zT3Rx#9ZqpeF5T|f9nrL|wcCIEoTcY*vZEK1Hk6dHZFIIOpBR-8VpEE3jplK$PN5@d
zAJ>C%1v9MCP>nWh8b*3$jeu`VKYOSzZ@W)>Xn&ym@A9<=@-iI2{^j@N|I@rH^QN8R
zZ9=5rG-T%p-eNrY5qvPaywm)~(cy;y7bP4iJq%HQbn~QoGb>dh6;0MDg`GIth&Wx(
z7L!jHDs_tpuqGmM2dGGstRUL<W>+1ae$fw6F{at))lw5(ki}PRK;d)7Zle9howsx)
z2A5&j65qz2K#V_lZop>Lf}FT4oU^uKq&gqG@ztEVXTIXDNWD>Blw_vgnP+6pkMh1|
zUf7f#A8n!|4Bv_5pP+U&%E3p*%55FE`IVIQUJD4kt~hFt%lGVdP=|4&K^G}XYeNk{
zVg+9h-?ZPNfXN<7zEB1K-`V22Z4WAVG$YpXtv4vtqzP?oP_bD%)IMSe<{73DrRkVl
zqT=)BFLUIV;;nq0_d5R?{r!XUKfC|CKK1|fvxDSn*t!W5*lEbF+VCeayZ)v74qVg|
zu-#Xk0`d*wZ{z7ms|-KeUP&OYE6`7Ijmh|FIeBCocQy24o$q<x5NRRW+l<wFs)iYh
zA!%}J19--wa(!3S=u~*SV)xrzmi;e+-|XtaU-Y#AGbR{CP1Xrhj)9^$&z_JS%IVoe
z42lPYoI{A8sos6GuU~smJabRKmv8z)>%$zT8AW&M2dIe|m$+&TYk|J2_MK_dr5-Ip
z!DA6eKI>X5;YH|O4VP2B2*kUoNvU}LcO*7i!-cvidw2f*w1;))l&<(A0l6l1{uOl0
zG4#ejB>w~Pvdkr*9vRh$oxk*aE|VcLm_jlxi;xjBHI<}6>d%BJ8V^hy6dwyd4;A0r
zBJhKjnScavxJ5vP+yY<dGNqu$_C{cbBl~M)!@%N+PJQB!3Tsdh4M#MD+4BL?4DHm1
zMpvfY)**~lQN4V(Je~<cRP(M0SaT%UeKx_eboImHrVNP==(*v7tx~zWW`sg&>6J4d
zv~3)+`y#T!&alJbh&TA_dLDNIg%{iL`U>uTDpe$kl)Dqg&f|HJqvfXRg1Y+f?0Trw
z7`*hz(FVy9(M3B!D5#8omlfn(7zq~iIi4m{JEe%f!o(A6-7Q91$;8JS>c`pcZ22xL
zW-f~;NGP{wc_0^1HktNr1+b*-m06Mmd^8(@AN-h(vUxF*v~^{`)F`elE!Iw#>}B4~
q`EsgBUuQSzoy`4F6q_KvfLgXiB+3fZwF!ZL<z$M^b(7ESf9#)EYq&)K

literal 0
HcmV?d00001

diff --git a/tests/fixtures/gpg/gnupghome/secring.gpg b/tests/fixtures/gpg/gnupghome/secring.gpg
new file mode 100644
index 0000000000000000000000000000000000000000..a5245194e19dd9e57d6004508261d16b14200458
GIT binary patch
literal 2937
zcmajhcQo8<8o=?HpV3C|%piIVqYa`(B1)7Xh;o%+w2YE+)i4pAC^ve^5TdsbBLstl
zsELpSQDYd4810G{B`e9^-FwdN+5Pi5=lSP7=ktEglL7t&Q8RsC1BQU6pg|cs9|f-l
z`F+!jT<i*Pz4Wc7v|-n4r=9!_mu4gln;JuuY3JV1dDJ|YZ+FH-xT@2(8op(azSMBF
zuQyLuHw1I}b6r&e^#+;z{9xVdrS^Q0+^Y9plZmshJ%w6#W`wm*`X-@Yy;ZU`fcU9W
zApJpqJSOm326)VxmFebp5DORt22q?KR)^!)JyG$bJF$}U(w;7m3lsd@xYXR(Lvh;#
zUaq_37N_wSd`(hqzq2Xdm%Z&+O)KNPxfexq9_~yQD1psQ$)IRG{r*^^&JDXDvy};l
zHhLG>!?FrP!pnKzi<_UxU2^d=G-;?u%Skbq$k90ZLh6SakwZ?yCb3ZUQByDgA{rw(
zr)7NXRjknw4|PNz-{7*BKb{|8v5nA)J6evO5m&Fb?dtXQT;wPQ9{rxke&(jBa`@;u
zc8;BX{{H0j3jk;*|9Mz@?Jg>k-SS=%A~Q}W#D&&+M_YYTFf^6x1tTPH+;y9qN0U$7
zq;5H|rbS5SzOj|!df3xiQlGVsN8@<_w3^`F$Kb1fmw%s*i2ZE??kOvis2Ga}sskm`
z<ynJ6zqn>lV>=9?Mq=W9_B}7WM4T7i;CZ_MQrGGrkKjy5swz%WH|VC<Z8wyFkz25U
zhTE?}2JIHC?H1(hbJN>R*2_1*+1m@H71s`7JAJnVCGf)n0H>g&1*tfJsOV^Es3`y{
z4jO<KN(bQtD8K+e7~l#AL1~#S)un4EA*OV|76de2<^ZZU)Q>K0RPvAGoGOoG-XBVr
zNfTDYA~p8rUUnB}L~lKXNg|e#XprB<2OxODr0$nn$U_HczEzZTHQ%Ih3^r!$=mSl}
ztv`y9yGf!eDVpES#7ZYPgz$n+k@|^5xDuPbWE=;+?~sonzkvfEd@)m+PW&SuQ(xe-
zH}~oQ5GdnR^3^Wms#D1g%A%6pg*ajJ3)wsIy9l!?4AW;MW-GP1iZ@@xC5w2b5IY}V
z_Vjl9?`E7IDa;2Ft`dDsa+H*Wy8E3I)?J4^P)D3ugWK1S+w#>M&h)=G${J72JJdRl
zE5$@7hFR61x?`Xojp>sJ{NhfiSJ^Uo=AJ??D$7W4bK4i)k$e6x$<jj#L`$Q`;VLml
z!@R8Ftww!x3KBCU{o%XR(2EP{IN3$nT`~6_rQA4Uf>VAbj4Qh~v}9T;nRdBM8^mMa
zW9artHx2quBS_GB52c7P_dJ*rE-mrLxlt)#sV(r*MTNQhYt`P1^8_y1v;0-0DKWK5
zN6|{>u06dWaa~vq02-p?F)yZjq^JI><Hf|J4lQqv*NIP>&~x?qhsyK}U$qaDizn|M
z(=v~(C%jP$#Y}o$f2w?})ARb4YW0m0%GbgGXtoZvXXPgxJ^Mg1Pr~l3u`*L!JeF;L
zhj+<t%w-;=e!U$>l~z^GWl{%^eK)ewxkwN@t4~8`xg5L)&5)}_0-&b83XAKPCh8Ej
zp@GH^KXYX#s=>z_w%t>53~{zAA(iW6y&Ycr-u&jHR1Y3|Zd~DW-$Gl+YEr}$Y3DJg
z^_+c#z=>Y_!St8opJM;J;^v=<g(!g^4o(&SPrrj$dmD-CzELbo6h{nbv$?cnrm=#$
z0b^VCiP#`LxMR-96lb9B%X#^i<P3O*ZnjDd7617T*xA-yF44sC8u!Q`OAPGEXgxwd
zKLmexFxY~g)C+(;`>goEr>iNZET6tnBZuAvb)XwC=kiSzKDI%Hs`l>~2{sA@uZ&vF
zm}NiQU@P3-)RO%Yy8k!7^{0L}JtXRF>nc+X)dz~TEE$nE&5g@Db05U$tFSR0MKKcU
z2RcNUra#wRbD(9ElvaDq%>4QpyT%jxN7qC8wL3HhlcJUO<p2bV<@JQU-M1WYwr8q8
zL_F}%U2fIh`_G_?k=vz~`#JTg1Z7l6m0=&mE^?g8J6s`J(J`%B=JuO^`4t&#wC*M3
zB!C{bsfPKyk~)4#G0`0?EWTkATjkNl+6!$D&EdHjAQxnv!hf-IUT7^W4L89GTk6y(
zmwiwejCVf|e;z52z_)#6(W-nfHU!%mEITth<5Nsm!9u@&)I5yy4bw8;a$v~Jb?F{y
zHp64iU)mRInvKc!aCvfps{#P+>bAt~se2t1RFXim83R{1She$|BOsAqDZ|@(B46tD
z8oU+q{(AU9+iujfd-FMF%n2NTy7z@LAVkJQyiFDlfDV?}T_!{i+whM47OBWg)k{9K
ztPJIQ9GVJ|Q)`r!oFRUS_eurfHl#b_!zAClquT?Tt!;B+gcl@#<5%(`Rp4X3QjLrY
zm&>@=Zhk7t?J(#L(lSLz!Q_pCA8p$BaFdlB1X30ncydE2scR<)4LQ9xc>R0an`FZA
z=J`o}GDQ~)4{(UTN^Ifpa@ya2$N0|A`9FL7cggktPjW$sNYk!rA_28TaUwUd$7S<z
z{f+}oJwMgS^8sejcJ8+iCJ`2S0oUI10mXyC0TSE9sfvxX=|eBmdwMPYI&@)ztoXNi
zTeoC2^VY($M7BrKQ)|+#gV8e!5q%QFZ=aCuUa?4>s4<m%=mM7YjU*Jw{05Yxl?mP>
zVMjS<Ne_*XP!M7T#(l2wB>9JA?5`3NPbI&nU%J#CTSzp_QC+wT(Kn>wmTe-hPM*m9
zX3%+gM9H@-g~O5Fve|-d4dSQZD)t@*d$%wz@PP4M(yp$8YyFzA-<MBIo|Xd(s@%!U
zBAxP#o4Rp4y8EM1jQ6=~vFku9BDw?h<#N#qc8X&xJxRMZQi#jIfDcd6dM;c-dzA3c
z5+5^bwsK$URV&;}Ikso#*Iy3**c^eAIOO`kST9RmKWN{wTbyf30XG~R`|1^1LM&6n
zOsRcRjlepo+KDzV(1dqH4OtY(1tv>=n22z4o!)CRFe>}vJyq%Ws$#Z3CE?MF6MXWa
z9`m!=8dpC3t8etAhUA|mFe)EP=Ft)7K8n}^pmAv*JJx~<d(%72`3EjM;|({u0OWmn
zvKC5vv1E%y{JMNJaZ^x-bjFQTl{peNg<db<qsN#h`NFA0lcK`UoJuD3zerYx4r9kY
zZHCQhgph<7LoeUb$Il+8B~kiE6}@vl9O(DZw!8Re8osmX%{h+lM4rtn&tn-GCL?N9
zR=xwENt9Si57O?nRI(qweaC&eV6AwNcY9%_n=IN^-b9WzB#fN(PZ|=F_;X&8D<`O8
zsp1=>%o6=~6%WFC3c4}6>Tx_+2f}@NDKPzPED?YMzb*w(IW6;F46y<bp3@boUn@UO
zg?$aPKU7*DJ{I4Gfbd=zO)5KjKyXSqBUbCmlKT$D)E1{&se3V$;2Zt&L?5g;9qK_!
zyjrt0yLKRyGzqA=dxctL&<-xMhBZ$%EYB)iITU<|%nv`e8^Hv7gSJ-lyb;W{)`wOX
z_Xv=|CFKZsI2+k`7F9Z4J&;|Mm!BZ*+!OfBRKvjD&R5O3X2Svj)iR!tLtM(Ez$~|U
zvxJ%#B+yrgXiT$**>ra{CS_lqch_TAbkKtMgp6VFt+OM0B36-BSUdMJs?>r_QWBhL
zrT~T>Tg*jTl}x98yE1B^mC%wEZ=;&+V?0d#bfHsS<s|i;(486Nt}pj0a^o88p)hkx
SFDtl*n#j2_oPF`fC;11|GCAx3

literal 0
HcmV?d00001

diff --git a/tests/fixtures/gpg/valid.asc b/tests/fixtures/gpg/valid.asc
new file mode 100644
index 0000000..2daae47
--- /dev/null
+++ b/tests/fixtures/gpg/valid.asc
@@ -0,0 +1,13 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA512
+
+Valid: yes
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1
+
+iJwEAQEKAAYFAlQGNXoACgkQy51cWChgboRrDAP9E/cwAQgF5BpzIEN5Wnus4mf0
+L4QdVPXCVjU4f8YS4FKali0++shPRFxgqBhWaOT9XFR9y0+ZzHjfcXffY0loYMQ6
+JCZdIK0lQ4aPDFqX6892+Aka0ZaijL+20yd9IE+9E7M7rCCW+PgVFRIIKnB7Eyc2
+MkCGwQ91CAOjErXnZPw=
+=UsYp
+-----END PGP SIGNATURE-----
diff --git a/tests/test_gpg.py b/tests/test_gpg.py
new file mode 100755
index 0000000..8f752f6
--- /dev/null
+++ b/tests/test_gpg.py
@@ -0,0 +1,57 @@
+#! /usr/bin/env python
+#
+# Copyright (C) 2014, Ansgar Burchardt <ansgar@debian.org>
+#
+# This program 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import unittest
+from base_test import DakTestCase, fixture
+from daklib.gpg import GpgException, SignedFile
+
+keyring = fixture('gpg/gnupghome/pubring.gpg')
+fpr_valid = '0ABB89079CB58F8F94F6F310CB9D5C5828606E84'
+fpr_expired = '05A558AE65B77B559BBE0C4D543B2BAEDA044F0B'
+fpr_expired_subkey = '8865D9EC71713394ADBD8F729F7A24B7F6388CE1'
+
+def verify(filename, require_signature=True):
+    with open(fixture(filename)) as fh:
+        data = fh.read()
+    return SignedFile(data, [keyring], require_signature)
+
+class GpgTest(DakTestCase):
+    def test_valid(self):
+        result = verify('gpg/valid.asc')
+        self.assertTrue(result.valid)
+        self.assertEqual(result.primary_fingerprint, fpr_valid)
+        self.assertEqual(result.contents, "Valid: yes\n")
+
+    def test_expired(self):
+        result = verify('gpg/expired.asc', False)
+        self.assertFalse(result.valid)
+        self.assertEqual(result.primary_fingerprint, fpr_expired)
+        self.assertEqual(result.contents, "Valid: expired\n")
+
+    def test_expired_assertion(self):
+        with self.assertRaises(GpgException):
+            verify('gpg/expired.asc')
+
+    def test_expired_subkey(self):
+        result = verify('gpg/expired-subkey.asc', False)
+        self.assertFalse(result.valid)
+        self.assertEqual(result.primary_fingerprint, fpr_expired_subkey)
+        self.assertEqual(result.contents, "Valid: expired-subkey\n")
+
+if __name__ == '__main__':
+    unittest.main()
-- 
1.7.10.4


Reply to: