diff --git a/djblets/extensions/manager.py b/djblets/extensions/manager.py
index 603bedce9227d87f47b3b50ab6a715e24ccaf7ae..3d74b94a90601671d0f391dc2c8040f4e0055e0f 100644
--- a/djblets/extensions/manager.py
+++ b/djblets/extensions/manager.py
@@ -46,6 +46,7 @@ from django.core.management import call_command
 from django.core.management.base import CommandError
 from django.core.management.color import no_style
 from django.core.urlresolvers import reverse
+from django.db import IntegrityError
 from django.db.models import loading
 from django.template.loader import template_source_loaders
 from django.utils import six
@@ -456,7 +457,8 @@ class ExtensionManager(object):
                 if not hasattr(ext_class, 'registration'):
                     find_registrations = True
             else:
-                registrations_to_fetch.append(class_name)
+                registrations_to_fetch.append(
+                    (class_name, entrypoint.dist.project_name))
                 find_registrations = True
 
         if find_registrations:
@@ -474,14 +476,17 @@ class ExtensionManager(object):
             # Go through each registration we still need and couldn't find,
             # and create an entry in the database. These are going to be
             # newly discovered extensions.
-            for class_name in registrations_to_fetch:
+            for class_name, ext_name in registrations_to_fetch:
                 if class_name not in found_registrations:
-                    registered_ext, is_new = \
-                        RegisteredExtension.objects.get_or_create(
+                    try:
+                        registered_ext = RegisteredExtension.objects.create(
                             class_name=class_name,
-                            defaults={
-                                'name': entrypoint.dist.project_name
-                            })
+                            name=ext_name)
+                    except IntegrityError:
+                        # An entry was created since we last looked up
+                        # anything. Fetch it from the database.
+                        registered_ext = RegisteredExtension.objects.get(
+                            class_name=class_name)
 
                     found_registrations[class_name] = registered_ext
 
diff --git a/djblets/extensions/middleware.py b/djblets/extensions/middleware.py
index 16f80bd1ec8ab6c6026877b3ddbcee46616a01be..d05bc5e91d5671736d887dbf361a950aab5d7f6e 100644
--- a/djblets/extensions/middleware.py
+++ b/djblets/extensions/middleware.py
@@ -27,6 +27,7 @@ from __future__ import unicode_literals
 
 import threading
 
+from django.conf import settings
 from djblets.extensions.manager import get_extension_managers
 
 
@@ -35,10 +36,13 @@ class ExtensionsMiddleware(object):
     def __init__(self, *args, **kwargs):
         super(ExtensionsMiddleware, self).__init__(*args, **kwargs)
 
+        self.do_expiration_checks = not getattr(settings, 'RUNNING_TEST',
+                                                False)
         self._lock = threading.Lock()
 
     def process_request(self, request):
-        self._check_expired()
+        if self.do_expiration_checks:
+            self._check_expired()
 
     def process_view(self, request, view, args, kwargs):
         request._djblets_extensions_kwargs = kwargs
