#32437: LiveServerTestCase.setUpClass() doesn't clean up fully on failure -------------------------------------+------------------------------------- Reporter: Chris Jerdonek | Owner: Chris | Jerdonek Type: Bug | Status: assigned Component: Testing framework | Version: 2.2 Severity: Normal | Resolution: Keywords: | Triage Stage: LiveServerTestCase,setUpClass | Unreviewed Has patch: 1 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Description changed by Chris Jerdonek:
Old description: > While working on #32417, I noticed in > [https://code.djangoproject.com/ticket/32417#comment:6 this comment] that > `LiveServerTestCase.setUpClass()` doesn't clean up all the way if > `setUpClass()` errors out. > > Specifically, `LiveServerTestCase.setUpClass()` > [https://github.com/django/django/blob/0963f184abd96800b76b19a6a181e1b544c7fafe/django/test/testcases.py#L1543-L1547 > looks like] this: > > {{{#!python > @classmethod > def setUpClass(cls): > super().setUpClass() > ... > cls._live_server_modified_settings = modify_settings( > ALLOWED_HOSTS={'append': cls.allowed_host}, > ) > ... > if cls.server_thread.error: > # Clean up behind ourselves, since tearDownClass won't get called > in > # case of errors. > cls._tearDownClassInternal() > raise cls.server_thread.error > }}} > > But `_tearDownClassInternal()` > [https://github.com/django/django/blob/0963f184abd96800b76b19a6a181e1b544c7fafe/django/test/testcases.py#L1559-L1568 > doesn't undo] the call to `modify_settings()`. > > I will post a PR shortly. New description: While working on #32417, I noticed in [https://code.djangoproject.com/ticket/32417#comment:6 this comment] that `LiveServerTestCase.setUpClass()` doesn't clean up all the way if `setUpClass()` errors out. Specifically, `LiveServerTestCase.setUpClass()` [https://github.com/django/django/blob/0963f184abd96800b76b19a6a181e1b544c7fafe/django/test/testcases.py#L1543-L1547 looks like] this: {{{#!python @classmethod def setUpClass(cls): super().setUpClass() ... cls._live_server_modified_settings = modify_settings( ALLOWED_HOSTS={'append': cls.allowed_host}, ) cls._live_server_modified_settings.enable() ... if cls.server_thread.error: # Clean up behind ourselves, since tearDownClass won't get called in # case of errors. cls._tearDownClassInternal() raise cls.server_thread.error }}} But `_tearDownClassInternal()` [https://github.com/django/django/blob/0963f184abd96800b76b19a6a181e1b544c7fafe/django/test/testcases.py#L1559-L1568 doesn't undo] the call to `cls._live_server_modified_settings.enable()`. I will post a PR shortly. -- -- Ticket URL: <https://code.djangoproject.com/ticket/32437#comment:2> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/067.e26cebdc9f84c8d3863f453fad86acb2%40djangoproject.com.