| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import os | 5 import os |
| 6 import re | 6 import re |
| 7 | 7 |
| 8 from google.appengine.ext import testbed | 8 from google.appengine.ext import testbed |
| 9 import webapp2 | 9 import webapp2 |
| 10 import webtest | 10 import webtest |
| 11 | 11 |
| 12 from testing_utils import testing | 12 from testing_utils import testing |
| 13 | 13 |
| 14 from handlers import build_failure | 14 from handlers import build_failure |
| 15 from model import wf_analysis_status |
| 16 from model.test import configured_test_case |
| 15 from model.wf_analysis import WfAnalysis | 17 from model.wf_analysis import WfAnalysis |
| 16 from model import wf_analysis_status | |
| 17 from waterfall import buildbot | 18 from waterfall import buildbot |
| 18 from waterfall import waterfall_config | |
| 19 | 19 |
| 20 | 20 |
| 21 # Root directory appengine/findit. | 21 # Root directory appengine/findit. |
| 22 ROOT_DIR = os.path.join(os.path.dirname(__file__), | 22 ROOT_DIR = os.path.join(os.path.dirname(__file__), |
| 23 os.path.pardir, os.path.pardir) | 23 os.path.pardir, os.path.pardir) |
| 24 | 24 |
| 25 | 25 |
| 26 class BuildFailureTest(testing.AppengineTestCase): | 26 class BuildFailureTest(testing.AppengineTestCase): |
| 27 app_module = webapp2.WSGIApplication([ | 27 app_module = webapp2.WSGIApplication([ |
| 28 ('/build-failure', build_failure.BuildFailure), | 28 ('/build-failure', build_failure.BuildFailure), |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 re.MULTILINE | re.DOTALL), | 73 re.MULTILINE | re.DOTALL), |
| 74 self.test_app.get, '/build-failure', params={'url': build_url}) | 74 self.test_app.get, '/build-failure', params={'url': build_url}) |
| 75 | 75 |
| 76 def testNonAdminCanViewAnalysisOfFailureOnUnsupportedMaster(self): | 76 def testNonAdminCanViewAnalysisOfFailureOnUnsupportedMaster(self): |
| 77 master_name = 'm' | 77 master_name = 'm' |
| 78 builder_name = 'b 1' | 78 builder_name = 'b 1' |
| 79 build_number = 123 | 79 build_number = 123 |
| 80 build_url = buildbot.CreateBuildUrl( | 80 build_url = buildbot.CreateBuildUrl( |
| 81 master_name, builder_name, build_number) | 81 master_name, builder_name, build_number) |
| 82 | 82 |
| 83 def MockMasterIsSupported(*_): | |
| 84 return False | |
| 85 self.mock(waterfall_config, 'MasterIsSupported', | |
| 86 MockMasterIsSupported) | |
| 87 | |
| 88 analysis = WfAnalysis.Create(master_name, builder_name, build_number) | 83 analysis = WfAnalysis.Create(master_name, builder_name, build_number) |
| 89 analysis.status = wf_analysis_status.ANALYZED | 84 analysis.status = wf_analysis_status.ANALYZED |
| 90 analysis.put() | 85 analysis.put() |
| 91 | 86 |
| 92 response = self.test_app.get('/build-failure', | 87 response = self.test_app.get('/build-failure', |
| 93 params={'url': build_url}) | 88 params={'url': build_url}) |
| 94 self.assertEquals(200, response.status_int) | 89 self.assertEquals(200, response.status_int) |
| 95 self.assertEqual(0, len(self.taskqueue_stub.get_filtered_tasks())) | 90 self.assertEqual(0, len(self.taskqueue_stub.get_filtered_tasks())) |
| 96 | 91 |
| 97 def testNonAdminCannotRequestAnalysisOfFailureOnUnsupportedMaster(self): | 92 def testNonAdminCannotRequestAnalysisOfFailureOnUnsupportedMaster(self): |
| 98 master_name = 'm' | 93 master_name = 'm' |
| 99 builder_name = 'b 1' | 94 builder_name = 'b 1' |
| 100 build_number = 123 | 95 build_number = 123 |
| 101 build_url = buildbot.CreateBuildUrl( | 96 build_url = buildbot.CreateBuildUrl( |
| 102 master_name, builder_name, build_number) | 97 master_name, builder_name, build_number) |
| 103 | 98 |
| 104 def MockMasterIsSupported(*_): | |
| 105 return False | |
| 106 self.mock(waterfall_config, 'MasterIsSupported', MockMasterIsSupported) | |
| 107 | |
| 108 self.assertRaisesRegexp( | 99 self.assertRaisesRegexp( |
| 109 webtest.app.AppError, | 100 webtest.app.AppError, |
| 110 re.compile('.*501 Not Implemented.*Master "%s" ' | 101 re.compile('.*501 Not Implemented.*Master "%s" ' |
| 111 'is not supported yet.*' % master_name, | 102 'is not supported yet.*' % master_name, |
| 112 re.MULTILINE | re.DOTALL), | 103 re.MULTILINE | re.DOTALL), |
| 113 self.test_app.get, '/build-failure', params={'url': build_url}) | 104 self.test_app.get, '/build-failure', params={'url': build_url}) |
| 114 | 105 |
| 115 def testAdminCanRequestAnalysisOfFailureOnUnsupportedMaster(self): | 106 def testAdminCanRequestAnalysisOfFailureOnUnsupportedMaster(self): |
| 116 master_name = 'm' | 107 master_name = 'm' |
| 117 builder_name = 'b' | 108 builder_name = 'b' |
| 118 build_number = 123 | 109 build_number = 123 |
| 119 build_url = buildbot.CreateBuildUrl( | 110 build_url = buildbot.CreateBuildUrl( |
| 120 master_name, builder_name, build_number) | 111 master_name, builder_name, build_number) |
| 121 | 112 |
| 122 def MockMasterIsSupported(*_): | |
| 123 return False | |
| 124 self.mock(waterfall_config, 'MasterIsSupported', MockMasterIsSupported) | |
| 125 | |
| 126 self.mock_current_user(user_email='test@chromium.org', is_admin=True) | 113 self.mock_current_user(user_email='test@chromium.org', is_admin=True) |
| 127 | 114 |
| 128 response = self.test_app.get('/build-failure', params={'url': build_url}) | 115 response = self.test_app.get('/build-failure', params={'url': build_url}) |
| 129 self.assertEquals(200, response.status_int) | 116 self.assertEquals(200, response.status_int) |
| 130 | 117 |
| 131 self.assertEqual(1, len(self.taskqueue_stub.get_filtered_tasks())) | 118 self.assertEqual(1, len(self.taskqueue_stub.get_filtered_tasks())) |
| 132 | 119 |
| 133 def testAnyoneCanRequestAnalysisOfFailureOnSupportedMaster(self): | 120 def testAnyoneCanRequestAnalysisOfFailureOnSupportedMaster(self): |
| 134 master_name = 'm' | 121 master_name = 'm' |
| 135 builder_name = 'b 1' | 122 builder_name = 'b 1' |
| 136 build_number = 123 | 123 build_number = 123 |
| 137 build_url = buildbot.CreateBuildUrl( | 124 build_url = buildbot.CreateBuildUrl( |
| 138 master_name, builder_name, build_number) | 125 master_name, builder_name, build_number) |
| 139 | 126 self.mock_current_user(user_email='test@chromium.org', is_admin=True) |
| 140 def MockMasterIsSupported(*_): | 127 configured_test_case.MockConfigSettings() |
| 141 return True | 128 self.mock_current_user(user_email='anyone@chromium.org', is_admin=False) |
| 142 self.mock(waterfall_config, 'MasterIsSupported', MockMasterIsSupported) | |
| 143 | 129 |
| 144 response = self.test_app.get('/build-failure', params={'url': build_url}) | 130 response = self.test_app.get('/build-failure', params={'url': build_url}) |
| 145 self.assertEquals(200, response.status_int) | 131 self.assertEquals(200, response.status_int) |
| 146 | 132 |
| 147 self.assertEqual(1, len(self.taskqueue_stub.get_filtered_tasks())) | 133 self.assertEqual(1, len(self.taskqueue_stub.get_filtered_tasks())) |
| OLD | NEW |