From a60e75e2c6897fd262ec95a35e0e94b9027c11d4 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Thu, 16 Apr 2020 09:29:25 +0800 Subject: tests: ensure we don't see database errors during duplicate insert 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 Signed-off-by: Stephen Finucane [stephenfin: Add 'expectedFailure' marker to keep all tests green] --- patchwork/tests/test_parser.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/patchwork/tests/test_parser.py b/patchwork/tests/test_parser.py index 442e719..0122fb8 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 @@ -1114,15 +1115,30 @@ 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, []) + @unittest.expectedFailure def test_duplicate_patch(self): diff = read_patch('0001-add-line.patch') m = create_email(diff, listid=self.listid, msgid='1@example.com') -- cgit v1.2.3