summaryrefslogtreecommitdiff
path: root/tests/urlpatterns_reverse
diff options
context:
space:
mode:
Diffstat (limited to 'tests/urlpatterns_reverse')
-rw-r--r--tests/urlpatterns_reverse/tests.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py
index 0201e28bf8..67a4370e78 100644
--- a/tests/urlpatterns_reverse/tests.py
+++ b/tests/urlpatterns_reverse/tests.py
@@ -5,6 +5,7 @@ Unit tests for reverse URL lookups.
from __future__ import unicode_literals
import sys
+import threading
from admin_scripts.tests import AdminScriptTestCase
@@ -429,6 +430,18 @@ class ResolverTests(SimpleTestCase):
self.assertTrue(resolver._is_callback('urlpatterns_reverse.nested_urls.View3'))
self.assertFalse(resolver._is_callback('urlpatterns_reverse.nested_urls.blub'))
+ def test_populate_concurrency(self):
+ """
+ RegexURLResolver._populate() can be called concurrently, but not more
+ than once per thread (#26888).
+ """
+ resolver = RegexURLResolver(r'^/', 'urlpatterns_reverse.urls')
+ resolver._local.populating = True
+ thread = threading.Thread(target=resolver._populate)
+ thread.start()
+ thread.join()
+ self.assertNotEqual(resolver._reverse_dict, {})
+
@override_settings(ROOT_URLCONF='urlpatterns_reverse.reverse_lazy_urls')
class ReverseLazyTest(TestCase):