From 7e95d7a93088675f984d1079e4e3c3ddc1723b0f Mon Sep 17 00:00:00 2001
From: Claude Paroz <claude@2xlibre.net>
Date: Fri, 24 May 2013 20:45:03 +0200
Subject: [PATCH] Fixed a regression in router initialization

Regression was introduced in 6a6bb168b. Thanks Bas Peschier for the
report.
---
 django/db/utils.py               |  5 +++--
 tests/multiple_database/tests.py | 27 +++++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/django/db/utils.py b/django/db/utils.py
index 6ba6bf346c..99804ee8fa 100644
--- a/django/db/utils.py
+++ b/django/db/utils.py
@@ -224,13 +224,14 @@ class ConnectionRouter(object):
     def routers(self):
         if self._routers is None:
             self._routers = settings.DATABASE_ROUTERS
+        routers = []
         for r in self._routers:
             if isinstance(r, six.string_types):
                 router = import_by_path(r)()
             else:
                 router = r
-            self._routers.append(router)
-        return self._routers
+            routers.append(router)
+        return routers
 
     def _router_func(action):
         def _route_db(self, model, **hints):
diff --git a/tests/multiple_database/tests.py b/tests/multiple_database/tests.py
index 2bff7b3b66..e72fb6a4f9 100644
--- a/tests/multiple_database/tests.py
+++ b/tests/multiple_database/tests.py
@@ -5,11 +5,13 @@ import pickle
 from operator import attrgetter
 import warnings
 
+from django.conf import settings
 from django.contrib.auth.models import User
 from django.contrib.contenttypes.models import ContentType
 from django.core import management
 from django.db import connections, router, DEFAULT_DB_ALIAS
 from django.db.models import signals
+from django.db.utils import ConnectionRouter
 from django.test import TestCase
 from django.test.utils import override_settings
 from django.utils.six import StringIO
@@ -918,6 +920,7 @@ class QueryTestCase(TestCase):
                                   published=datetime.date(2009, 5, 4),
                                   extra_arg=True)
 
+
 class TestRouter(object):
     # A test router. The behavior is vaguely master/slave, but the
     # databases aren't assumed to propagate changes.
@@ -972,6 +975,30 @@ class WriteRouter(object):
     def db_for_write(self, model, **hints):
         return 'writer'
 
+
+class ConnectionRouterTestCase(TestCase):
+    @override_settings(DATABASE_ROUTERS=[
+        'multiple_database.tests.TestRouter',
+        'multiple_database.tests.WriteRouter'])
+    def test_router_init_default(self):
+        router = ConnectionRouter()
+        self.assertListEqual([r.__class__.__name__ for r in router.routers],
+                             ['TestRouter', 'WriteRouter'])
+
+    def test_router_init_arg(self):
+        router = ConnectionRouter([
+            'multiple_database.tests.TestRouter',
+            'multiple_database.tests.WriteRouter'
+        ])
+        self.assertListEqual([r.__class__.__name__ for r in router.routers],
+                             ['TestRouter', 'WriteRouter'])
+
+        # Init with instances instead of strings
+        router = ConnectionRouter([TestRouter(), WriteRouter()])
+        self.assertListEqual([r.__class__.__name__ for r in router.routers],
+                             ['TestRouter', 'WriteRouter'])
+
+
 class RouterTestCase(TestCase):
     multi_db = True