| 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 |
| 9 import webapp2 | 10 import webapp2 |
| 10 import webtest | 11 import webtest |
| 11 | 12 |
| 12 from testing_utils import testing | |
| 13 | |
| 14 from handlers import build_failure | 13 from handlers import build_failure |
| 14 from model import wf_analysis_status |
| 15 from model.wf_analysis import WfAnalysis | 15 from model.wf_analysis import WfAnalysis |
| 16 from model import wf_analysis_status | |
| 17 from waterfall import buildbot | 16 from waterfall import buildbot |
| 18 from waterfall import waterfall_config | 17 from waterfall.test import wf_testcase |
| 19 | |
| 20 | 18 |
| 21 # Root directory appengine/findit. | 19 # Root directory appengine/findit. |
| 22 ROOT_DIR = os.path.join(os.path.dirname(__file__), | 20 ROOT_DIR = os.path.join(os.path.dirname(__file__), |
| 23 os.path.pardir, os.path.pardir) | 21 os.path.pardir, os.path.pardir) |
| 24 | 22 |
| 25 | 23 |
| 26 class BuildFailureTest(testing.AppengineTestCase): | 24 class BuildFailureTest(wf_testcase.WaterfallTestCase): |
| 27 app_module = webapp2.WSGIApplication([ | 25 app_module = webapp2.WSGIApplication([ |
| 28 ('/build-failure', build_failure.BuildFailure), | 26 ('/build-failure', build_failure.BuildFailure), |
| 29 ], debug=True) | 27 ], debug=True) |
| 30 | 28 |
| 31 def setUp(self): | 29 def setUp(self): |
| 32 super(BuildFailureTest, self).setUp() | 30 super(BuildFailureTest, self).setUp() |
| 33 | 31 |
| 34 # Setup clean task queues. | 32 # Setup clean task queues. |
| 35 self.testbed.init_taskqueue_stub(root_path=ROOT_DIR) | 33 self.testbed.init_taskqueue_stub(root_path=ROOT_DIR) |
| 36 self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME) | 34 self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME) |
| (...skipping 30 matching lines...) Expand all Loading... |
| 67 def testInvalidBuildUrl(self): | 65 def testInvalidBuildUrl(self): |
| 68 build_url = 'abc' | 66 build_url = 'abc' |
| 69 self.assertRaisesRegexp( | 67 self.assertRaisesRegexp( |
| 70 webtest.app.AppError, | 68 webtest.app.AppError, |
| 71 re.compile('.*501 Not Implemented.*Url "%s" ' | 69 re.compile('.*501 Not Implemented.*Url "%s" ' |
| 72 'is not pointing to a build.*' % build_url, | 70 'is not pointing to a build.*' % build_url, |
| 73 re.MULTILINE | re.DOTALL), | 71 re.MULTILINE | re.DOTALL), |
| 74 self.test_app.get, '/build-failure', params={'url': build_url}) | 72 self.test_app.get, '/build-failure', params={'url': build_url}) |
| 75 | 73 |
| 76 def testNonAdminCanViewAnalysisOfFailureOnUnsupportedMaster(self): | 74 def testNonAdminCanViewAnalysisOfFailureOnUnsupportedMaster(self): |
| 77 master_name = 'm' | 75 master_name = 'm2' |
| 78 builder_name = 'b 1' | 76 builder_name = 'b 1' |
| 79 build_number = 123 | 77 build_number = 123 |
| 80 build_url = buildbot.CreateBuildUrl( | 78 build_url = buildbot.CreateBuildUrl( |
| 81 master_name, builder_name, build_number) | 79 master_name, builder_name, build_number) |
| 82 | 80 |
| 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) | 81 analysis = WfAnalysis.Create(master_name, builder_name, build_number) |
| 89 analysis.status = wf_analysis_status.ANALYZED | 82 analysis.status = wf_analysis_status.ANALYZED |
| 90 analysis.put() | 83 analysis.put() |
| 91 | 84 |
| 92 response = self.test_app.get('/build-failure', | 85 response = self.test_app.get('/build-failure', |
| 93 params={'url': build_url}) | 86 params={'url': build_url}) |
| 94 self.assertEquals(200, response.status_int) | 87 self.assertEquals(200, response.status_int) |
| 95 self.assertEqual(0, len(self.taskqueue_stub.get_filtered_tasks())) | 88 self.assertEqual(0, len(self.taskqueue_stub.get_filtered_tasks())) |
| 96 | 89 |
| 97 def testNonAdminCannotRequestAnalysisOfFailureOnUnsupportedMaster(self): | 90 def testNonAdminCannotRequestAnalysisOfFailureOnUnsupportedMaster(self): |
| 98 master_name = 'm' | 91 master_name = 'm2' |
| 99 builder_name = 'b 1' | 92 builder_name = 'b 1' |
| 100 build_number = 123 | 93 build_number = 123 |
| 101 build_url = buildbot.CreateBuildUrl( | 94 build_url = buildbot.CreateBuildUrl( |
| 102 master_name, builder_name, build_number) | 95 master_name, builder_name, build_number) |
| 103 | 96 |
| 104 def MockMasterIsSupported(*_): | |
| 105 return False | |
| 106 self.mock(waterfall_config, 'MasterIsSupported', MockMasterIsSupported) | |
| 107 | |
| 108 self.assertRaisesRegexp( | 97 self.assertRaisesRegexp( |
| 109 webtest.app.AppError, | 98 webtest.app.AppError, |
| 110 re.compile('.*501 Not Implemented.*Master "%s" ' | 99 re.compile('.*501 Not Implemented.*Master "%s" ' |
| 111 'is not supported yet.*' % master_name, | 100 'is not supported yet.*' % master_name, |
| 112 re.MULTILINE | re.DOTALL), | 101 re.MULTILINE | re.DOTALL), |
| 113 self.test_app.get, '/build-failure', params={'url': build_url}) | 102 self.test_app.get, '/build-failure', params={'url': build_url}) |
| 114 | 103 |
| 115 def testAdminCanRequestAnalysisOfFailureOnUnsupportedMaster(self): | 104 def testAdminCanRequestAnalysisOfFailureOnUnsupportedMaster(self): |
| 116 master_name = 'm' | 105 master_name = 'm2' |
| 117 builder_name = 'b' | 106 builder_name = 'b' |
| 118 build_number = 123 | 107 build_number = 123 |
| 119 build_url = buildbot.CreateBuildUrl( | 108 build_url = buildbot.CreateBuildUrl( |
| 120 master_name, builder_name, build_number) | 109 master_name, builder_name, build_number) |
| 121 | 110 |
| 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) | 111 self.mock_current_user(user_email='test@chromium.org', is_admin=True) |
| 127 | 112 |
| 128 response = self.test_app.get('/build-failure', params={'url': build_url}) | 113 response = self.test_app.get('/build-failure', params={'url': build_url}) |
| 129 self.assertEquals(200, response.status_int) | 114 self.assertEquals(200, response.status_int) |
| 130 | 115 |
| 131 self.assertEqual(1, len(self.taskqueue_stub.get_filtered_tasks())) | 116 self.assertEqual(1, len(self.taskqueue_stub.get_filtered_tasks())) |
| 132 | 117 |
| 133 def testAnyoneCanRequestAnalysisOfFailureOnSupportedMaster(self): | 118 def testAnyoneCanRequestAnalysisOfFailureOnSupportedMaster(self): |
| 134 master_name = 'm' | 119 master_name = 'm' |
| 135 builder_name = 'b 1' | 120 builder_name = 'b 1' |
| 136 build_number = 123 | 121 build_number = 123 |
| 137 build_url = buildbot.CreateBuildUrl( | 122 build_url = buildbot.CreateBuildUrl( |
| 138 master_name, builder_name, build_number) | 123 master_name, builder_name, build_number) |
| 139 | 124 |
| 140 def MockMasterIsSupported(*_): | |
| 141 return True | |
| 142 self.mock(waterfall_config, 'MasterIsSupported', MockMasterIsSupported) | |
| 143 | |
| 144 response = self.test_app.get('/build-failure', params={'url': build_url}) | 125 response = self.test_app.get('/build-failure', params={'url': build_url}) |
| 145 self.assertEquals(200, response.status_int) | 126 self.assertEquals(200, response.status_int) |
| 146 | 127 |
| 147 self.assertEqual(1, len(self.taskqueue_stub.get_filtered_tasks())) | 128 self.assertEqual(1, len(self.taskqueue_stub.get_filtered_tasks())) |
| OLD | NEW |