Currently, the parser causes IntegrityErrors while inserting duplicate patches; these tend to pollute database logs.
This change adds a check, which currently fails, to ensure we do not cause errors during a duplicate patch parse. Signed-off-by: Jeremy Kerr <j...@ozlabs.org> --- patchwork/tests/test_parser.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/patchwork/tests/test_parser.py b/patchwork/tests/test_parser.py index 3a41000..c7c918a 100644 --- a/patchwork/tests/test_parser.py +++ b/patchwork/tests/test_parser.py @@ -15,6 +15,7 @@ import unittest from django.test import TestCase from django.test import TransactionTestCase from django.db.transaction import atomic +from django.db import connection from patchwork.models import Comment from patchwork.models import Patch @@ -1091,14 +1092,28 @@ class DuplicateMailTest(TestCase): create_state() def _test_duplicate_mail(self, mail): + errors = [] + + def log_query_errors(execute, sql, params, many, context): + try: + result = execute(sql, params, many, context) + except Exception as e: + errors.append(e) + raise + return result + _parse_mail(mail) + with self.assertRaises(DuplicateMailError): - # If we see any database errors from the duplicate insert - # (typically an IntegrityError), the insert will abort the current - # transaction. This atomic() ensures that we can recover, and - # perform subsequent queries. - with atomic(): - _parse_mail(mail) + with connection.execute_wrapper(log_query_errors): + # If we see any database errors from the duplicate insert + # (typically an IntegrityError), the insert will abort the + # current transaction. This atomic() ensures that we can + # recover, and perform subsequent queries. + with atomic(): + _parse_mail(mail) + + self.assertEqual(errors, []) def test_duplicate_patch(self): diff = read_patch('0001-add-line.patch') -- 2.17.1 _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork