Browse Source

[desktop] Fix test_error_handling_failure test case

Was flakey because it relied on looking at 500 test case.
Now forces 500 error that happens early on to cause fallback to
technical debugger.
abec 13 năm trước cách đây
mục cha
commit
335d7df398

+ 27 - 23
desktop/core/src/desktop/auth/views_test.py

@@ -29,9 +29,7 @@ class TestLoginWithHadoop(PseudoHdfsTestBase):
 
 
   def setUp(self):
   def setUp(self):
     # Simulate first login ever
     # Simulate first login ever
-    for user in User.objects.all():
-      user.delete()
-
+    User.objects.all().delete()
     self.c = Client()
     self.c = Client()
 
 
   def test_login(self):
   def test_login(self):
@@ -47,19 +45,6 @@ class TestLoginWithHadoop(PseudoHdfsTestBase):
     assert_equal(200, response.status_code, "Expected ok status.")
     assert_equal(200, response.status_code, "Expected ok status.")
     assert_false(response.context['first_login_ever'])
     assert_false(response.context['first_login_ever'])
 
 
-  def test_bad_first_user(self):
-    finish = conf.AUTH.BACKEND.set_for_testing("desktop.auth.backend.AllowFirstUserDjangoBackend")
-
-    response = self.c.get('/accounts/login/')
-    assert_equal(200, response.status_code, "Expected ok status.")
-    assert_true(response.context['first_login_ever'])
-
-    response = self.c.post('/accounts/login/', dict(username="foo 1", password="foo"))
-    assert_equal(200, response.status_code, "Expected ok status.")
-    assert_true('This value may contain only letters, numbers and @/./+/-/_ characters.' in response.content, response)
-
-    finish()
-
   def test_login_home_creation_failure(self):
   def test_login_home_creation_failure(self):
     response = self.c.get('/accounts/login/')
     response = self.c.get('/accounts/login/')
     assert_equal(200, response.status_code, "Expected ok status.")
     assert_equal(200, response.status_code, "Expected ok status.")
@@ -78,10 +63,29 @@ class TestLoginWithHadoop(PseudoHdfsTestBase):
     # 'Could not create home directory.' won't show up because the messages are consumed before
     # 'Could not create home directory.' won't show up because the messages are consumed before
 
 
 
 
-def test_non_jframe_login():
-  client = make_logged_in_client(username="test", password="test")
-  # Logout first
-  client.get('/accounts/logout')
-  # Login
-  response = client.post('/accounts/login/', dict(username="test", password="test"), follow=True)
-  assert_equal(response.template, 'index.mako')
+class TestLogin(object):
+  def setUp(self):
+    # Simulate first login ever
+    User.objects.all().delete()
+    self.c = Client()
+
+  def test_bad_first_user(self):
+    finish = conf.AUTH.BACKEND.set_for_testing("desktop.auth.backend.AllowFirstUserDjangoBackend")
+
+    response = self.c.get('/accounts/login/')
+    assert_equal(200, response.status_code, "Expected ok status.")
+    assert_true(response.context['first_login_ever'])
+
+    response = self.c.post('/accounts/login/', dict(username="foo 1", password="foo"))
+    assert_equal(200, response.status_code, "Expected ok status.")
+    assert_true('This value may contain only letters, numbers and @/./+/-/_ characters.' in response.content, response)
+
+    finish()
+
+  def test_non_jframe_login(self):
+    client = make_logged_in_client(username="test", password="test")
+    # Logout first
+    client.get('/accounts/logout')
+    # Login
+    response = client.post('/accounts/login/', dict(username="test", password="test"), follow=True)
+    assert_equal(response.template, 'index.mako')

+ 19 - 11
desktop/core/src/desktop/tests.py

@@ -22,7 +22,6 @@ from django.conf.urls.defaults import patterns, url
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.http import HttpResponse
 from django.http import HttpResponse
 from django.db.models import query, CharField, SmallIntegerField
 from django.db.models import query, CharField, SmallIntegerField
-from django.test.client import Client
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.paginator import Paginator
 from desktop.lib.paginator import Paginator
 from desktop.lib.conf import validate_path
 from desktop.lib.conf import validate_path
@@ -298,25 +297,34 @@ def test_error_handling_failure():
   # Try to get filebrowser page
   # Try to get filebrowser page
   # test for werkzeug debugger
   # test for werkzeug debugger
   # Restore rewrite_user
   # Restore rewrite_user
+  import desktop.auth.backend
+
+  c = make_logged_in_client()
 
 
   restore_django_debug = desktop.conf.DJANGO_DEBUG_MODE.set_for_testing(False)
   restore_django_debug = desktop.conf.DJANGO_DEBUG_MODE.set_for_testing(False)
   restore_500_debug = desktop.conf.HTTP_500_DEBUG_MODE.set_for_testing(False)
   restore_500_debug = desktop.conf.HTTP_500_DEBUG_MODE.set_for_testing(False)
 
 
-  # Add an error view
-  setattr(views.serve_500_error, 'login_notrequired', True)
-  error_url_pat = patterns('', url('^500_internal_error$', views.serve_500_error))
-  desktop.urls.urlpatterns.extend(error_url_pat)
+  original_rewrite_user = desktop.auth.backend.rewrite_user
+
+  def rewrite_user(user):
+    user = original_rewrite_user(user)
+    delattr(user, 'has_hue_permission')
+    return user
+
+  def store_exc_info(*args, **kwargs): pass
+  c.store_exc_info = store_exc_info
+
+  original_rewrite_user = desktop.auth.backend.rewrite_user
+  desktop.auth.backend.rewrite_user = rewrite_user
+
   try:
   try:
-    c = Client()
-    response = c.get('/500_internal_error')
-    assert_true('AttributeError at /500_internal_error' in response.content, response)
+    response = c.get('/dump_config')
+    assert_true('AttributeError at /dump_config' in response.content, response)
   finally:
   finally:
     # Restore the world
     # Restore the world
-    for i in error_url_pat:
-      desktop.urls.urlpatterns.remove(i)
     restore_django_debug()
     restore_django_debug()
     restore_500_debug()
     restore_500_debug()
-    delattr(views.serve_500_error, 'login_notrequired')
+    desktop.auth.backend.rewrite_user = original_rewrite_user
 
 
 
 
 def test_404_handling():
 def test_404_handling():