diff --git a/tests/transactions/tests.py b/tests/transactions/tests.py index 5e947de65f..dcfd30fcaa 100644 --- a/tests/transactions/tests.py +++ b/tests/transactions/tests.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +import os import sys import threading import time @@ -218,6 +219,18 @@ class AtomicTests(TransactionTestCase): transaction.savepoint_rollback(sid) self.assertQuerysetEqual(Reporter.objects.all(), ['']) + @skipIf(sys.platform.startswith('win'), "Windows doesn't have signals.") + def test_rollback_on_keyboardinterrupt(self): + try: + with transaction.atomic(): + Reporter.objects.create(first_name='Tintin') + # Send SIGINT (simulate Ctrl-C). One call isn't enough. + os.kill(os.getpid(), 2) + os.kill(os.getpid(), 2) + except KeyboardInterrupt: + pass + self.assertEqual(Reporter.objects.all().count(), 0) + class AtomicInsideTransactionTests(AtomicTests): """All basic tests for atomic should also pass within an existing transaction."""