| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 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 webapp2 | 5 import webapp2 |
| 6 | 6 |
| 7 from testing_utils import testing | 7 from testing_utils import testing |
| 8 | 8 |
| 9 from handlers import swarming_task | 9 from handlers import swarming_task |
| 10 from model import wf_analysis_status | |
| 11 from model.wf_analysis import WfAnalysis | |
| 12 from model.wf_swarming_task import WfSwarmingTask | |
| 13 from waterfall import buildbot | 10 from waterfall import buildbot |
| 14 from waterfall import waterfall_config | |
| 15 | 11 |
| 16 class SwarmingTaskTest(testing.AppengineTestCase): | 12 class SwarmingTaskTest(testing.AppengineTestCase): |
| 17 app_module = webapp2.WSGIApplication([ | 13 app_module = webapp2.WSGIApplication([ |
| 18 ('/swarming-task', swarming_task.SwarmingTask),], debug=True) | 14 ('/swarming-task', swarming_task.SwarmingTask),], debug=True) |
| 19 | 15 |
| 20 def setUp(self): | 16 def setUp(self): |
| 21 super(SwarmingTaskTest, self).setUp() | 17 super(SwarmingTaskTest, self).setUp() |
| 22 self.master_name = 'm' | 18 self.master_name = 'm' |
| 23 self.builder_name = 'b' | 19 self.builder_name = 'b' |
| 24 self.build_number = 121 | 20 self.build_number = 121 |
| 25 | 21 |
| 26 def MockedGetSwarmingSettings(): | |
| 27 return {'server_host': 'chromium-swarm.appspot.com'} | |
| 28 self.mock( | |
| 29 waterfall_config, 'GetSwarmingSettings', MockedGetSwarmingSettings) | |
| 30 | |
| 31 def testGenerateSwarmingTasksDataReturnEmptyIfNoFailureMap(self): | |
| 32 WfAnalysis.Create( | |
| 33 self.master_name, self.builder_name, self.build_number).put() | |
| 34 | |
| 35 data = swarming_task._GenerateSwarmingTasksData( | |
| 36 self.master_name, self.builder_name, self.build_number) | |
| 37 | |
| 38 self.assertEqual({}, data) | |
| 39 | |
| 40 def testGenerateSwarmingTasksDataReturnEmptyIfNoSwarmingTests(self): | |
| 41 analysis = WfAnalysis.Create( | |
| 42 self.master_name, self.builder_name, self.build_number) | |
| 43 analysis.failure_result_map = { | |
| 44 'step1': '%s/%s/%s' % (self.master_name, self.builder_name, 120), | |
| 45 'step2': '%s/%s/%s' % ( | |
| 46 self.master_name, self.builder_name, self.build_number) | |
| 47 } | |
| 48 analysis.put() | |
| 49 | |
| 50 data = swarming_task._GenerateSwarmingTasksData( | |
| 51 self.master_name, self.builder_name, self.build_number) | |
| 52 | |
| 53 self.assertEqual({}, data) | |
| 54 | |
| 55 def testGenerateSwarmingTasksDataIfNoSwarmingTask(self): | |
| 56 analysis = WfAnalysis.Create( | |
| 57 self.master_name, self.builder_name, self.build_number) | |
| 58 analysis.failure_result_map = { | |
| 59 'step1': { | |
| 60 'test1': '%s/%s/%s' % (self.master_name, self.builder_name, 120), | |
| 61 'test2': '%s/%s/%s' % ( | |
| 62 self.master_name, self.builder_name, self.build_number) | |
| 63 }, | |
| 64 'step2': { | |
| 65 'test1': '%s/%s/%s' % (self.master_name, self.builder_name, 120) | |
| 66 } | |
| 67 } | |
| 68 analysis.put() | |
| 69 | |
| 70 data = swarming_task._GenerateSwarmingTasksData( | |
| 71 self.master_name, self.builder_name, self.build_number) | |
| 72 | |
| 73 expected_data = { | |
| 74 'step1': { | |
| 75 'swarming_tasks': [], | |
| 76 'tests': {} | |
| 77 }, | |
| 78 'step2': { | |
| 79 'swarming_tasks': [], | |
| 80 'tests': {} | |
| 81 } | |
| 82 } | |
| 83 self.assertEqual(expected_data, data) | |
| 84 | |
| 85 def testGenerateSwarmingTasksData(self): | |
| 86 analysis = WfAnalysis.Create( | |
| 87 self.master_name, self.builder_name, self.build_number) | |
| 88 analysis.failure_result_map = { | |
| 89 'step1': { | |
| 90 'test1': '%s/%s/%s' % (self.master_name, self.builder_name, 120), | |
| 91 'test2': '%s/%s/%s' % ( | |
| 92 self.master_name, self.builder_name, self.build_number) | |
| 93 }, | |
| 94 'step2': { | |
| 95 'test1': '%s/%s/%s' % ( | |
| 96 self.master_name, self.builder_name, self.build_number) | |
| 97 } | |
| 98 } | |
| 99 analysis.put() | |
| 100 | |
| 101 task0 = WfSwarmingTask.Create( | |
| 102 self.master_name, self.builder_name, 120, 'step1') | |
| 103 task0.task_id = 'task0' | |
| 104 task0.status = wf_analysis_status.ANALYZED | |
| 105 task0.put() | |
| 106 | |
| 107 task1 = WfSwarmingTask.Create( | |
| 108 self.master_name, self.builder_name, self.build_number, 'step1') | |
| 109 task1.task_id = 'task1' | |
| 110 task1.status = wf_analysis_status.ANALYZED | |
| 111 task1.put() | |
| 112 | |
| 113 task2 = WfSwarmingTask.Create( | |
| 114 self.master_name, self.builder_name, self.build_number, 'step2') | |
| 115 task2.put() | |
| 116 | |
| 117 data = swarming_task._GenerateSwarmingTasksData( | |
| 118 self.master_name, self.builder_name, self.build_number) | |
| 119 | |
| 120 expected_data = { | |
| 121 'step1': { | |
| 122 'swarming_tasks': [ | |
| 123 { | |
| 124 'status': 'Completed', | |
| 125 'task_id': 'task1', | |
| 126 'task_url': ( | |
| 127 'https://chromium-swarm.appspot.com/user/task/task1') | |
| 128 }, | |
| 129 { | |
| 130 'status': 'Completed', | |
| 131 'task_id': 'task0', | |
| 132 'task_url': ( | |
| 133 'https://chromium-swarm.appspot.com/user/task/task0') | |
| 134 } | |
| 135 ], | |
| 136 'tests': { | |
| 137 'test1': { | |
| 138 'status': 'Completed', | |
| 139 'task_id': 'task0', | |
| 140 'task_url': ( | |
| 141 'https://chromium-swarm.appspot.com/user/task/task0') | |
| 142 }, | |
| 143 'test2': { | |
| 144 'status': 'Completed', | |
| 145 'task_id': 'task1', | |
| 146 'task_url': ( | |
| 147 'https://chromium-swarm.appspot.com/user/task/task1') | |
| 148 } | |
| 149 } | |
| 150 }, | |
| 151 'step2': { | |
| 152 'swarming_tasks': [ | |
| 153 { | |
| 154 'status': 'Pending' | |
| 155 } | |
| 156 ], | |
| 157 'tests': { | |
| 158 'test1': { | |
| 159 'status': 'Pending' | |
| 160 } | |
| 161 } | |
| 162 } | |
| 163 } | |
| 164 self.assertEqual(expected_data, data) | |
| 165 | |
| 166 def testSwarmingTaskHandler(self): | 22 def testSwarmingTaskHandler(self): |
| 167 build_url = buildbot.CreateBuildUrl( | 23 build_url = buildbot.CreateBuildUrl( |
| 168 self.master_name, self.builder_name, self.build_number) | 24 self.master_name, self.builder_name, self.build_number) |
| 169 response = self.test_app.get('/swarming-task', params={'url': build_url}) | 25 response = self.test_app.get('/swarming-task', params={'url': build_url}) |
| 170 expected_results = {} | 26 expected_results = {} |
| 171 | 27 |
| 172 self.assertEqual(200, response.status_int) | 28 self.assertEqual(200, response.status_int) |
| 173 self.assertEqual(expected_results, response.json_body) | 29 self.assertEqual(expected_results, response.json_body) |
| OLD | NEW |