소스 검색

[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():