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()