This is an automated email from the ASF dual-hosted git repository.
sebb pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/incubator-ponymail-unit-tests.git
The following commit(s) were added to refs/heads/master by this push:
new 8f271f6 Generic interface to Archiver
8f271f6 is described below
commit 8f271f627d39c6db3ed88c9e6d81e77ca3d5f3ce
Author: Sebb <[email protected]>
AuthorDate: Sat Aug 22 15:34:22 2020 +0100
Generic interface to Archiver
---
tests/interfacer.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
tests/test-generators.py | 23 +++++------------------
tests/test-parsing.py | 24 ++++++------------------
3 files changed, 56 insertions(+), 36 deletions(-)
diff --git a/tests/interfacer.py b/tests/interfacer.py
new file mode 100644
index 0000000..dfaa8fb
--- /dev/null
+++ b/tests/interfacer.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+
+"""
+This is a wrapper to standardise the API for different versions
+"""
+
+import sys
+import inspect
+
+class Archiver(object):
+ def __init__(self, archiver_, args):
+ self.expected_archie_parameters =
inspect.signature(archiver_.Archiver).parameters
+ self.expected_compute_parameters =
inspect.signature(archiver_.Archiver.compute_updates).parameters
+
+ # <= 0.11:
+ if 'parseHTML' in self.expected_archie_parameters:
+ if hasattr(args, 'generator'):
+ archiver_.archiver_generator = args.generator
+ self.archie = archiver_.Archiver(parseHTML=args.parse_html)
+ else: # 0.12+
+ if hasattr(args, 'generator'):
+ self.archie = archiver_.Archiver(generator=args.generator,
parse_html=args.parse_html)
+ else:
+ self.archie = archiver_.Archiver(parse_html=args.parse_html)
+
+ if 'raw_msg' in self.expected_compute_parameters:
+ self.compute = self._compute_foal
+ # PM 0.12 parameters
+ elif 'args' in self.expected_compute_parameters:
+ self.compute = self._compute_12
+ # PM <= 0.11 parameters (missing args)
+ else:
+ self.compute = self._compute_11
+
+ def _compute_foal(self, fake_args, lid, private, message, message_raw):
+ return self.archie.compute_updates(fake_args, lid, private, message,
message_raw)[0]
+
+ def _compute_12(self, fake_args, lid, private, message, message_raw):
+ return self.archie.compute_updates(fake_args, lid, private, message)[0]
+
+ def _compute_11(self, fake_args, lid, private, message, message_raw):
+ return self.archie.compute_updates(lid, private, message)[0]
+
+ def compute_updates(self, fake_args, lid, private, message, message_raw):
+ return self.compute(fake_args, lid, private, message, message_raw)
diff --git a/tests/test-generators.py b/tests/test-generators.py
index 04a7d78..50c2522 100755
--- a/tests/test-generators.py
+++ b/tests/test-generators.py
@@ -10,6 +10,7 @@ import yaml
import argparse
import collections
import inspect
+import interfacer
parse_html = False
nonce = None
@@ -79,13 +80,8 @@ def run_tests(args):
if gen_type not in generator_names:
sys.stderr.write("Warning: generators.py does not have the
'%s' generator, skipping tests\n" % gen_type)
continue
- # <= 0.11:
- if 'parseHTML' in expected_archie_parameters:
- archiver.archiver_generator = gen_type
- archie = archiver.Archiver(parseHTML=parse_html)
- # current master and foal
- else:
- archie = archiver.Archiver(generator=gen_type,
parse_html=parse_html)
+ test_args = collections.namedtuple('testargs', ['parse_html',
'generator'])(parse_html, gen_type)
+ archie = interfacer.Archiver(archiver, test_args)
mbox = mailbox.mbox(mboxfile, None, create=False)
no_messages = len(mbox.keys())
no_tests = len(tests)
@@ -102,17 +98,8 @@ def run_tests(args):
(gen_type, test['index'],
test['message-id'], msgid))
continue # no point continuing
lid = args.lid or
archiver.normalize_lid(message.get('list-id', '??'))
- # Foal parameters
- if 'raw_msg' in expected_compute_parameters:
- json, _, _, _ = archie.compute_updates(fake_args, lid,
False, message, message_raw)
- # PM 0.12 parameters
- elif 'args' in expected_compute_parameters:
- json, _, _, _ = archie.compute_updates(fake_args, lid,
False, message)
- # PM <= 0.11 parameters (missing args)
- else:
- # May return 2 or 4 values; only want first
- json = archie.compute_updates(lid, False, message)[0]
-
+ json = archie.compute_updates(fake_args, lid, False, message,
message_raw)
+
if json['mid'] != test['generated']:
errors += 1
sys.stderr.write("""[FAIL] %s, index %2u: Expected '%s',
got '%s'!\n""" %
diff --git a/tests/test-parsing.py b/tests/test-parsing.py
index 3266888..47cc943 100755
--- a/tests/test-parsing.py
+++ b/tests/test-parsing.py
@@ -11,6 +11,7 @@ import argparse
import collections
import hashlib
import inspect
+import interfacer
nonce = None
fake_args = collections.namedtuple('fakeargs', ['verbose', 'ibody'])(False,
None)
@@ -60,18 +61,14 @@ def generate_specs(args):
def run_tests(args):
- import archiver
+ import archiver
errors = 0
tests_run = 0
yml = yaml.safe_load(open(args.load, 'r'))
parse_html = yml.get('args', {}).get('parse_html', False)
- expected_archie_parameters =
inspect.signature(archiver.Archiver).parameters
- expected_compute_parameters =
inspect.signature(archiver.Archiver.compute_updates).parameters
- # <= 0.11:
- if 'parseHTML' in expected_archie_parameters:
- archie = archiver.Archiver(parseHTML=parse_html)
- else:
- archie = archiver.Archiver(parse_html=parse_html)
+
+ test_args = collections.namedtuple('testargs', ['parse_html'])(parse_html)
+ archie = interfacer.Archiver(archiver, test_args)
for mboxfile, tests in yml['parsing'].items():
mbox = mailbox.mbox(mboxfile, None, create=False)
@@ -90,16 +87,7 @@ def run_tests(args):
(test['index'], test['message-id'], msgid))
continue # no point continuing
lid = archiver.normalize_lid(message.get('list-id', '??'))
- # Foal parameters
- if 'raw_msg' in expected_compute_parameters:
- json, _, _, _ = archie.compute_updates(fake_args, lid, False,
message, message_raw)
- # PM 0.12 parameters
- elif 'args' in expected_compute_parameters:
- json, _, _, _ = archie.compute_updates(fake_args, lid, False,
message)
- # PM <= 0.11 parameters (missing args)
- else:
- # May return 2 or 4 values; only want first
- json = archie.compute_updates(lid, False, message)[0]
+ json = archie.compute_updates(fake_args, lid, False, message,
message_raw)
body_sha3_256 = None
if json and json.get('body') is not None:
body_sha3_256 =
hashlib.sha3_256(json['body'].encode('utf-8')).hexdigest()