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