diff options
Diffstat (limited to 'src/mailman_pgp/workflows')
| -rw-r--r-- | src/mailman_pgp/workflows/base.py | 3 | ||||
| -rw-r--r-- | src/mailman_pgp/workflows/tests/test_base.py | 130 | ||||
| -rw-r--r-- | src/mailman_pgp/workflows/tests/test_subscription.py | 2 |
3 files changed, 74 insertions, 61 deletions
diff --git a/src/mailman_pgp/workflows/base.py b/src/mailman_pgp/workflows/base.py index d05781d..014f2dd 100644 --- a/src/mailman_pgp/workflows/base.py +++ b/src/mailman_pgp/workflows/base.py @@ -55,9 +55,8 @@ class PGPMixin: class SetPubkeyMixin: - def __init__(self, pubkey=None, pre_confirmed=False): + def __init__(self, pubkey=None): self.pubkey = pubkey - self.pubkey_confirmed = pre_confirmed @property def pubkey_key(self): diff --git a/src/mailman_pgp/workflows/tests/test_base.py b/src/mailman_pgp/workflows/tests/test_base.py index af00d01..c59cfe0 100644 --- a/src/mailman_pgp/workflows/tests/test_base.py +++ b/src/mailman_pgp/workflows/tests/test_base.py @@ -24,8 +24,12 @@ from unittest.mock import patch from mailman.app.lifecycle import create_list from mailman.interfaces.pending import IPendings from mailman.interfaces.usermanager import IUserManager +from mailman.interfaces.workflows import IWorkflow from mailman.testing.helpers import get_queue_messages +from mailman.workflows.common import SubscriptionBase +from public import public from zope.component import getUtility +from zope.interface import implementer from mailman_pgp.database import mm_transaction, transaction from mailman_pgp.model.address import PGPAddress @@ -33,11 +37,11 @@ from mailman_pgp.model.list import PGPMailingList from mailman_pgp.pgp.tests.base import load_key from mailman_pgp.pgp.wrapper import PGPWrapper from mailman_pgp.testing.layers import PGPConfigLayer -from mailman_pgp.workflows.base import KEY_REQUEST -from mailman_pgp.workflows.subscription import ConfirmSubscriptionPolicy +from mailman_pgp.workflows.base import (KEY_REQUEST, PGPMixin, SetPubkeyMixin, + ConfirmPubkeyMixin) -class PubkeyMixinSetup(): +class PubkeyMixinTestSetup(): def setUp(self): with mm_transaction(): self.mlist = create_list('test@example.com', @@ -54,34 +58,62 @@ class PubkeyMixinSetup(): self.sender = self.um.create_address('rsa-1024b@example.org') -class TestPGPMixin(PubkeyMixinSetup, unittest.TestCase): +@implementer(IWorkflow) +class PGPTestWorkflow(SubscriptionBase, PGPMixin, SetPubkeyMixin, + ConfirmPubkeyMixin): + name = 'test-workflow' + description = '' + initial_state = 'prepare' + save_attributes = ( + 'pubkey_key', + 'pubkey_confirmed', + 'address_key', + 'subscriber_key', + 'user_key', + 'token_owner_key' + ) + + def __init__(self, mlist, subscriber=None, *, pubkey=None, + pubkey_pre_confirmed=False): + SubscriptionBase.__init__(self, mlist, subscriber) + SetPubkeyMixin.__init__(self, pubkey=pubkey) + ConfirmPubkeyMixin.__init__(self, pre_confirmed=pubkey_pre_confirmed) + PGPMixin.__init__(self) + + def _step_prepare(self): + self.push('do_subscription') + self.push('pubkey_confirmation') + self.push('pubkey_checks') + self.push('pgp_prepare') + self.push('sanity_checks') + + +@public +class TestPGPMixin(PubkeyMixinTestSetup, unittest.TestCase): layer = PGPConfigLayer def test_create_address(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender) workflow.run_thru('pgp_prepare') pgp_address = PGPAddress.for_address(self.sender) self.assertIsNotNone(pgp_address) def test_address_existing(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender) with transaction() as t: pgp_address = PGPAddress(self.sender) t.add(pgp_address) workflow.run_thru('pgp_prepare') + still = PGPAddress.for_address(self.sender) + self.assertIsNotNone(still) -class TestSetPubkeyMixin(PubkeyMixinSetup, unittest.TestCase): +@public +class TestSetPubkeyMixin(PubkeyMixinTestSetup, unittest.TestCase): layer = PGPConfigLayer def test_key_request_sent(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender) list(workflow) items = get_queue_messages('virgin', expected_count=1) message = items[0].msg @@ -91,24 +123,20 @@ class TestSetPubkeyMixin(PubkeyMixinSetup, unittest.TestCase): self.assertEqual(message.get_payload(), KEY_REQUEST) def test_receive_key(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender) list(workflow) with transaction(): pgp_address = PGPAddress.for_address(self.sender) pgp_address.key = self.sender_key.pubkey - receive_workflow = ConfirmSubscriptionPolicy(self.mlist) + receive_workflow = PGPTestWorkflow(self.mlist) receive_workflow.token = workflow.token receive_workflow.restore() receive_workflow.run_thru('receive_key') def test_set_pubkey(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True, - pubkey=self.sender_key.pubkey) + workflow = PGPTestWorkflow(self.mlist, self.sender, + pubkey=self.sender_key.pubkey) workflow.run_thru('pubkey_checks') pgp_address = PGPAddress.for_address(self.sender) self.assertIsNotNone(pgp_address) @@ -117,9 +145,7 @@ class TestSetPubkeyMixin(PubkeyMixinSetup, unittest.TestCase): self.sender_key.fingerprint) def test_pubkey_set(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender) with transaction() as t: pgp_address = PGPAddress(self.sender) pgp_address.key = self.sender_key.pubkey @@ -129,26 +155,23 @@ class TestSetPubkeyMixin(PubkeyMixinSetup, unittest.TestCase): self.sender_key.fingerprint) -class TestConfirmPubkeyMixin(PubkeyMixinSetup, unittest.TestCase): +@public +class TestConfirmPubkeyMixin(PubkeyMixinTestSetup, unittest.TestCase): layer = PGPConfigLayer def test_key_request_pubkey_set(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True, - pubkey=self.sender_key.pubkey, - pubkey_pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender, + pubkey=self.sender_key.pubkey, + pubkey_pre_confirmed=True) workflow.run_thru('pubkey_confirmation') with patch.object(workflow, '_step_do_subscription') as step: next(workflow) step.assert_called_once_with() def test_send_key_confirm_request(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True, - pubkey=self.sender_key.pubkey, - pubkey_pre_confirmed=False) + workflow = PGPTestWorkflow(self.mlist, self.sender, + pubkey=self.sender_key.pubkey, + pubkey_pre_confirmed=False) list(workflow) items = get_queue_messages('virgin', expected_count=1) message = items[0].msg @@ -159,14 +182,12 @@ class TestConfirmPubkeyMixin(PubkeyMixinSetup, unittest.TestCase): self.assertTrue(wrapped.is_encrypted()) def test_receive_confirmation(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True, - pubkey=self.sender_key.pubkey, - pubkey_pre_confirmed=False) + workflow = PGPTestWorkflow(self.mlist, self.sender, + pubkey=self.sender_key.pubkey, + pubkey_pre_confirmed=False) list(workflow) - receive_workflow = ConfirmSubscriptionPolicy(self.mlist) + receive_workflow = PGPTestWorkflow(self.mlist) receive_workflow.token = workflow.token receive_workflow.restore() receive_workflow.run_thru('receive_key_confirmation') @@ -175,13 +196,12 @@ class TestConfirmPubkeyMixin(PubkeyMixinSetup, unittest.TestCase): step.assert_called_once_with() -class TestBothPubkeyMixins(PubkeyMixinSetup, unittest.TestCase): +@public +class TestBothPubkeyMixins(PubkeyMixinTestSetup, unittest.TestCase): layer = PGPConfigLayer def test_pended_data_key_request(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender) with suppress(StopIteration): workflow.run_thru('send_key_request') self.assertIsNotNone(workflow.token) @@ -193,10 +213,8 @@ class TestBothPubkeyMixins(PubkeyMixinSetup, unittest.TestCase): self.assertEqual(pendable['token_owner'], 'subscriber') def test_pended_data_key_confirmation(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True, - pubkey=self.sender_key.pubkey) + workflow = PGPTestWorkflow(self.mlist, self.sender, + pubkey=self.sender_key.pubkey) with suppress(StopIteration): workflow.run_thru('send_key_confirm_request') self.assertIsNotNone(workflow.token) @@ -208,9 +226,7 @@ class TestBothPubkeyMixins(PubkeyMixinSetup, unittest.TestCase): self.assertEqual(pendable['token_owner'], 'subscriber') def test_exisitng_pgp_address(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender) with transaction() as t: pgp_address = PGPAddress(self.sender) @@ -224,9 +240,7 @@ class TestBothPubkeyMixins(PubkeyMixinSetup, unittest.TestCase): step.assert_called_once_with() def test_exisitng_pgp_address_not_confirmed(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender) with transaction() as t: pgp_address = PGPAddress(self.sender) @@ -239,9 +253,7 @@ class TestBothPubkeyMixins(PubkeyMixinSetup, unittest.TestCase): step.assert_called_once_with() def test_exisitng_pgp_address_no_key(self): - workflow = ConfirmSubscriptionPolicy(self.mlist, self.sender, - pre_verified=True, - pre_confirmed=True) + workflow = PGPTestWorkflow(self.mlist, self.sender) with transaction() as t: pgp_address = PGPAddress(self.sender) diff --git a/src/mailman_pgp/workflows/tests/test_subscription.py b/src/mailman_pgp/workflows/tests/test_subscription.py index 9464a83..f9fa1e1 100644 --- a/src/mailman_pgp/workflows/tests/test_subscription.py +++ b/src/mailman_pgp/workflows/tests/test_subscription.py @@ -20,6 +20,7 @@ import unittest from mailman.app.lifecycle import create_list from mailman.interfaces.usermanager import IUserManager +from public import public from zope.component import getUtility from mailman_pgp.database import mm_transaction @@ -29,6 +30,7 @@ from mailman_pgp.workflows.subscription import ( ModerationSubscriptionPolicy, OpenSubscriptionPolicy) +@public class TestSubscriptionWorkflows(unittest.TestCase): layer = PGPConfigLayer |
