diff options
| author | J08nY | 2017-06-27 21:29:37 +0200 |
|---|---|---|
| committer | J08nY | 2017-06-27 21:29:37 +0200 |
| commit | 5598bee159a8a8c2de2ea926ff11de029e0e4e1c (patch) | |
| tree | 5942774e03cc2c144b4dabfee2339b9bac104344 /src/mailman_pgp | |
| parent | 39944faaa390f26ecb3f4bd77da86dbe580dc43a (diff) | |
| download | mailman-pgp-5598bee159a8a8c2de2ea926ff11de029e0e4e1c.tar.gz mailman-pgp-5598bee159a8a8c2de2ea926ff11de029e0e4e1c.tar.zst mailman-pgp-5598bee159a8a8c2de2ea926ff11de029e0e4e1c.zip | |
Integrate tests with Mailman, add basic integration tests.
Diffstat (limited to 'src/mailman_pgp')
| -rw-r--r-- | src/mailman_pgp/config/tests/__init__.py | 0 | ||||
| -rw-r--r-- | src/mailman_pgp/config/tests/test_config.py | 43 | ||||
| -rw-r--r-- | src/mailman_pgp/model/base.py | 4 | ||||
| -rw-r--r-- | src/mailman_pgp/pgp/tests/test_keygen.py | 17 | ||||
| -rw-r--r-- | src/mailman_pgp/rules/signature.py | 16 | ||||
| -rw-r--r-- | src/mailman_pgp/rules/tests/__init__.py | 0 | ||||
| -rw-r--r-- | src/mailman_pgp/rules/tests/test_signature.py | 47 | ||||
| -rw-r--r-- | src/mailman_pgp/styles/tests/__init__.py | 0 | ||||
| -rw-r--r-- | src/mailman_pgp/tests/__init__.py | 0 | ||||
| -rw-r--r-- | src/mailman_pgp/tests/test_plugin.py | 32 |
10 files changed, 147 insertions, 12 deletions
diff --git a/src/mailman_pgp/config/tests/__init__.py b/src/mailman_pgp/config/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/mailman_pgp/config/tests/__init__.py diff --git a/src/mailman_pgp/config/tests/test_config.py b/src/mailman_pgp/config/tests/test_config.py new file mode 100644 index 0000000..c274d8e --- /dev/null +++ b/src/mailman_pgp/config/tests/test_config.py @@ -0,0 +1,43 @@ +# Copyright (C) 2017 Jan Jancar +# +# This file is a part of the Mailman PGP plugin. +# +# 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 3 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, see <http://www.gnu.org/licenses/>. + +from unittest import TestCase + +from mailman.testing.layers import ConfigLayer + +from mailman_pgp.config import config +from mailman_pgp.database import Database +from mailman_pgp.pgp import PGP + + +class TestConfig(TestCase): + layer = ConfigLayer + + def test_name(self): + self.assertEqual(config.name, 'pgp') + + def test_sections(self): + sections = sorted(['db', 'keydirs', 'keypairs', 'queues']) + self.assertListEqual(sorted(config.sections()), sections) + + def test_db(self): + self.assertTrue(hasattr(config, 'db')) + self.assertIsInstance(config.db, Database) + + def test_pgp(self): + self.assertTrue(hasattr(config, 'pgp')) + self.assertIsInstance(config.pgp, PGP) diff --git a/src/mailman_pgp/model/base.py b/src/mailman_pgp/model/base.py index e126366..502400d 100644 --- a/src/mailman_pgp/model/base.py +++ b/src/mailman_pgp/model/base.py @@ -37,7 +37,3 @@ class Base: :rtype: sqlalchemy.orm.query.Query """ return config.db.session.query(cls) - - -from mailman_pgp.model.address import PGPAddress # noqa -from mailman_pgp.model.list import PGPMailingList # noqa diff --git a/src/mailman_pgp/pgp/tests/test_keygen.py b/src/mailman_pgp/pgp/tests/test_keygen.py new file mode 100644 index 0000000..5047cc6 --- /dev/null +++ b/src/mailman_pgp/pgp/tests/test_keygen.py @@ -0,0 +1,17 @@ +# Copyright (C) 2017 Jan Jancar +# +# This file is a part of the Mailman PGP plugin. +# +# 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 3 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, see <http://www.gnu.org/licenses/>. + diff --git a/src/mailman_pgp/rules/signature.py b/src/mailman_pgp/rules/signature.py index 126ac84..7ddc947 100644 --- a/src/mailman_pgp/rules/signature.py +++ b/src/mailman_pgp/rules/signature.py @@ -55,9 +55,9 @@ class Signature: def check(self, mlist, msg, msgdata): """See `IRule`.""" # Find the `PGPMailingList` this is for. - enc_list = query(PGPMailingList).filter_by( + pgp_list = query(PGPMailingList).filter_by( list_id=mlist.list_id).first() - if enc_list is None: + if pgp_list is None: raise ValueError('PGP enabled mailing list not found.') # Wrap the message to work with it. @@ -65,7 +65,7 @@ class Signature: # Take unsigned_msg_action if unsigned. if not wrapped.is_signed(): - action = enc_list.unsigned_msg_action + action = pgp_list.unsigned_msg_action if action != Action.defer: record_action(msg, msgdata, action, msg.sender, 'The message is unsigned.') @@ -73,7 +73,7 @@ class Signature: # Take `inline_pgp_action` if inline signed. if wrapped.inline.is_signed(): - action = enc_list.inline_pgp_action + action = pgp_list.inline_pgp_action if action != Action.defer: record_action(msg, msgdata, action, msg.sender, 'Inline PGP is not allowed.') @@ -83,19 +83,19 @@ class Signature: user_manager = getUtility(IUserManager) sender = msg.sender address = user_manager.get_address(sender) - enc_address = PGPAddress.query().filter_by( + pgp_address = PGPAddress.query().filter_by( email=address.email).first() - if enc_address is None: + if pgp_address is None: raise ValueError('PGP enabled address not found.') # See if we have a key. - key = enc_address.key + key = pgp_address.key if key is None: raise ValueError('No key?') # Take the `invalid_sig_action` if the verification failed. if not wrapped.verifies(key): - action = enc_list.invalid_sig_action + action = pgp_list.invalid_sig_action if action != Action.defer: record_action(msg, msgdata, action, msg.sender, 'Signature did not verify.') diff --git a/src/mailman_pgp/rules/tests/__init__.py b/src/mailman_pgp/rules/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/mailman_pgp/rules/tests/__init__.py diff --git a/src/mailman_pgp/rules/tests/test_signature.py b/src/mailman_pgp/rules/tests/test_signature.py new file mode 100644 index 0000000..1e509e7 --- /dev/null +++ b/src/mailman_pgp/rules/tests/test_signature.py @@ -0,0 +1,47 @@ +# Copyright (C) 2017 Jan Jancar +# +# This file is a part of the Mailman PGP plugin. +# +# 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 3 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, see <http://www.gnu.org/licenses/>. +from unittest import TestCase + +from mailman.app.lifecycle import create_list +from mailman.config import config +from mailman.testing.helpers import specialized_message_from_string as mfs +from mailman.testing.layers import ConfigLayer + +from mailman_pgp.rules.signature import Signature + + +class TestSignature(TestCase): + layer = ConfigLayer + + def test_has_rule(self): + self.assertIn(Signature.name, config.rules.keys()) + + def test_no_pgp_list(self): + ordinary_list = create_list('ordinary@example.com') + msg = mfs("""\ +From: anne@example.com +To: ordinary@example.com +Subject: A Message with non-ascii body +Message-ID: <ant> +MIME-Version: 1.0 + +A message body. +""") + + rule = config.rules[Signature.name] + with self.assertRaises(ValueError): + rule.check(ordinary_list, msg, {}) diff --git a/src/mailman_pgp/styles/tests/__init__.py b/src/mailman_pgp/styles/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/mailman_pgp/styles/tests/__init__.py diff --git a/src/mailman_pgp/tests/__init__.py b/src/mailman_pgp/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/mailman_pgp/tests/__init__.py diff --git a/src/mailman_pgp/tests/test_plugin.py b/src/mailman_pgp/tests/test_plugin.py new file mode 100644 index 0000000..bcdf751 --- /dev/null +++ b/src/mailman_pgp/tests/test_plugin.py @@ -0,0 +1,32 @@ +# Copyright (C) 2017 Jan Jancar +# +# This file is a part of the Mailman PGP plugin. +# +# 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 3 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, see <http://www.gnu.org/licenses/>. + +from unittest import TestCase + +from mailman.config import config as mailman_config +from mailman.testing.layers import ConfigLayer + +from mailman_pgp.plugin import PGPMailman + + +class TestPlugin(TestCase): + layer = ConfigLayer + + def test_instance_loaded(self): + self.assertIn('pgp', mailman_config.plugins.keys()) + instance = mailman_config.plugins['pgp'] + self.assertIsInstance(instance, PGPMailman) |
