From 3b5f198f7625cf6ddc50f2a54608c07726b4e923 Mon Sep 17 00:00:00 2001 From: Ansgar Burchardt Date: Tue, 2 Sep 2014 23:55:22 +0200 Subject: [PATCH] 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 00000000..d105f6bd --- /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 00000000..42b52172 --- /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 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 +# +# 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() -- 2.39.2