瀏覽代碼

[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 年之前
父節點
當前提交
335d7df
共有 2 個文件被更改,包括 46 次插入34 次删除
  1. 27 23
      desktop/core/src/desktop/auth/views_test.py
  2. 19 11
      desktop/core/src/desktop/tests.py

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

@@ -29,9 +29,7 @@ class TestLoginWithHadoop(PseudoHdfsTestBase):
 
   def setUp(self):
     # Simulate first login ever
-    for user in User.objects.all():
-      user.delete()
-
+    User.objects.all().delete()
     self.c = Client()
 
   def test_login(self):
@@ -47,19 +45,6 @@ class TestLoginWithHadoop(PseudoHdfsTestBase):
     assert_equal(200, response.status_code, "Expected ok status.")
     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):
     response = self.c.get('/accounts/login/')
     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
 
 
-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.http import HttpResponse
 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.paginator import Paginator
 from desktop.lib.conf import validate_path
@@ -298,25 +297,34 @@ def test_error_handling_failure():
   # Try to get filebrowser page
   # test for werkzeug debugger
   # 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_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:
-    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:
     # Restore the world
-    for i in error_url_pat:
-      desktop.urls.urlpatterns.remove(i)
     restore_django_debug()
     restore_500_debug()
-    delattr(views.serve_500_error, 'login_notrequired')
+    desktop.auth.backend.rewrite_user = original_rewrite_user
 
 
 def test_404_handling():