You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ponymail.apache.org by se...@apache.org on 2020/08/22 14:39:13 UTC
[incubator-ponymail-unit-tests] branch master updated: Generic
interface to Archiver
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 <se...@apache.org>
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()