| Index: appengine/findit/handlers/test/handlers_util_test.py
|
| diff --git a/appengine/findit/handlers/test/try_job_result_test.py b/appengine/findit/handlers/test/handlers_util_test.py
|
| similarity index 65%
|
| copy from appengine/findit/handlers/test/try_job_result_test.py
|
| copy to appengine/findit/handlers/test/handlers_util_test.py
|
| index b229af1bf4dddbb3a6ca3de34261a1fe5591bc54..f0c6230339b779a0fb896fee14c9f4bc7ebdde75 100644
|
| --- a/appengine/findit/handlers/test/try_job_result_test.py
|
| +++ b/appengine/findit/handlers/test/handlers_util_test.py
|
| @@ -1,36 +1,184 @@
|
| -# Copyright 2015 The Chromium Authors. All rights reserved.
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| -import webapp2
|
| -
|
| from testing_utils import testing
|
|
|
| -from handlers import try_job_result
|
| +from handlers import handlers_util
|
| from model.wf_analysis import WfAnalysis
|
| from model import wf_analysis_status
|
| from model.wf_swarming_task import WfSwarmingTask
|
| from model.wf_try_job import WfTryJob
|
| from waterfall import buildbot
|
| +from waterfall import waterfall_config
|
|
|
|
|
| -class TryJobResultTest(testing.AppengineTestCase):
|
| - app_module = webapp2.WSGIApplication([
|
| - ('/try-job-result', try_job_result.TryJobResult),], debug=True)
|
| +class HandlersUtilResultTest(testing.AppengineTestCase):
|
|
|
| def setUp(self):
|
| - super(TryJobResultTest, self).setUp()
|
| + super(HandlersUtilResultTest, self).setUp()
|
| self.master_name = 'm'
|
| self.builder_name = 'b'
|
| self.build_number = 121
|
| - self.mock_current_user(user_email='test@chromium.org', is_admin=True)
|
| +
|
| + def MockedGetSwarmingSettings():
|
| + return {'server_host': 'chromium-swarm.appspot.com'}
|
| + self.mock(
|
| + waterfall_config, 'GetSwarmingSettings', MockedGetSwarmingSettings)
|
| +
|
| + def testGenerateSwarmingTasksDataNoAnalysis(self):
|
| + data = handlers_util.GenerateSwarmingTasksData(
|
| + self.master_name, self.builder_name, self.build_number)
|
| +
|
| + self.assertEqual({}, data)
|
| +
|
| + def testGenerateSwarmingTasksDataReturnEmptyIfNoFailureMap(self):
|
| + WfAnalysis.Create(
|
| + self.master_name, self.builder_name, self.build_number).put()
|
| +
|
| + data = handlers_util.GenerateSwarmingTasksData(
|
| + self.master_name, self.builder_name, self.build_number)
|
| +
|
| + self.assertEqual({}, data)
|
| +
|
| + def testGenerateSwarmingTasksDataReturnEmptyIfNoSwarmingTests(self):
|
| + analysis = WfAnalysis.Create(
|
| + self.master_name, self.builder_name, self.build_number)
|
| + analysis.failure_result_map = {
|
| + 'step1': '%s/%s/%s' % (self.master_name, self.builder_name, 120),
|
| + 'step2': '%s/%s/%s' % (
|
| + self.master_name, self.builder_name, self.build_number)
|
| + }
|
| + analysis.put()
|
| +
|
| + data = handlers_util.GenerateSwarmingTasksData(
|
| + self.master_name, self.builder_name, self.build_number)
|
| +
|
| + self.assertEqual({}, data)
|
| +
|
| + def testGenerateSwarmingTasksDataIfNoSwarmingTask(self):
|
| + analysis = WfAnalysis.Create(
|
| + self.master_name, self.builder_name, self.build_number)
|
| + analysis.failure_result_map = {
|
| + 'step1': {
|
| + 'test1': '%s/%s/%s' % (self.master_name, self.builder_name, 120),
|
| + 'test2': '%s/%s/%s' % (
|
| + self.master_name, self.builder_name, self.build_number)
|
| + },
|
| + 'step2': {
|
| + 'test1': '%s/%s/%s' % (self.master_name, self.builder_name, 120)
|
| + }
|
| + }
|
| + analysis.put()
|
| +
|
| + data = handlers_util.GenerateSwarmingTasksData(
|
| + self.master_name, self.builder_name, self.build_number)
|
| +
|
| + expected_data = {
|
| + 'step1': {
|
| + 'swarming_tasks': [],
|
| + 'tests': {}
|
| + },
|
| + 'step2': {
|
| + 'swarming_tasks': [],
|
| + 'tests': {}
|
| + }
|
| + }
|
| + self.assertEqual(expected_data, data)
|
| +
|
| + def testGenerateSwarmingTasksData(self):
|
| + analysis = WfAnalysis.Create(
|
| + self.master_name, self.builder_name, self.build_number)
|
| + analysis.failure_result_map = {
|
| + 'step1': {
|
| + 'test1': '%s/%s/%s' % (self.master_name, self.builder_name, 120),
|
| + 'test2': '%s/%s/%s' % (
|
| + self.master_name, self.builder_name, self.build_number)
|
| + },
|
| + 'step2': {
|
| + 'test1': '%s/%s/%s' % (
|
| + self.master_name, self.builder_name, self.build_number)
|
| + }
|
| + }
|
| + analysis.put()
|
| +
|
| + task0 = WfSwarmingTask.Create(
|
| + self.master_name, self.builder_name, 120, 'step1')
|
| + task0.task_id = 'task0'
|
| + task0.status = wf_analysis_status.ANALYZED
|
| + task0.put()
|
| +
|
| + task1 = WfSwarmingTask.Create(
|
| + self.master_name, self.builder_name, self.build_number, 'step1')
|
| + task1.task_id = 'task1'
|
| + task1.status = wf_analysis_status.ANALYZED
|
| + task1.put()
|
| +
|
| + task2 = WfSwarmingTask.Create(
|
| + self.master_name, self.builder_name, self.build_number, 'step2')
|
| + task2.put()
|
| +
|
| + data = handlers_util.GenerateSwarmingTasksData(
|
| + self.master_name, self.builder_name, self.build_number)
|
| +
|
| + expected_data = {
|
| + 'step1': {
|
| + 'swarming_tasks': [
|
| + {
|
| + 'status': 'Completed',
|
| + 'task_id': 'task1',
|
| + 'task_url': (
|
| + 'https://chromium-swarm.appspot.com/user/task/task1')
|
| + },
|
| + {
|
| + 'status': 'Completed',
|
| + 'task_id': 'task0',
|
| + 'task_url': (
|
| + 'https://chromium-swarm.appspot.com/user/task/task0')
|
| + }
|
| + ],
|
| + 'tests': {
|
| + 'test1': {
|
| + 'status': 'Completed',
|
| + 'task_id': 'task0',
|
| + 'task_url': (
|
| + 'https://chromium-swarm.appspot.com/user/task/task0')
|
| + },
|
| + 'test2': {
|
| + 'status': 'Completed',
|
| + 'task_id': 'task1',
|
| + 'task_url': (
|
| + 'https://chromium-swarm.appspot.com/user/task/task1')
|
| + }
|
| + }
|
| + },
|
| + 'step2': {
|
| + 'swarming_tasks': [
|
| + {
|
| + 'status': 'Pending'
|
| + }
|
| + ],
|
| + 'tests': {
|
| + 'test1': {
|
| + 'status': 'Pending'
|
| + }
|
| + }
|
| + }
|
| + }
|
| + self.assertEqual(expected_data, data)
|
| +
|
| + def testGetAllTryJobResultsNoAnalysis(self):
|
| + data = handlers_util.GetAllTryJobResults(
|
| + self.master_name, self.builder_name, self.build_number)
|
| +
|
| + self.assertEqual({}, data)
|
|
|
| def testGetTryJobResultReturnNoneIfNoFailureResultMap(self):
|
| analysis = WfAnalysis.Create(
|
| self.master_name, self.builder_name, self.build_number)
|
| analysis.put()
|
|
|
| - result = try_job_result._GetAllTryJobResults(
|
| + result = handlers_util.GetAllTryJobResults(
|
| self.master_name, self.builder_name, self.build_number)
|
|
|
| self.assertEqual({}, result)
|
| @@ -43,7 +191,7 @@ class TryJobResultTest(testing.AppengineTestCase):
|
| }
|
| analysis.put()
|
|
|
| - result = try_job_result._GetAllTryJobResults(
|
| + result = handlers_util.GetAllTryJobResults(
|
| self.master_name, self.builder_name, self.build_number)
|
|
|
| expected_result = {
|
| @@ -68,7 +216,7 @@ class TryJobResultTest(testing.AppengineTestCase):
|
| self.master_name, self.builder_name, self.build_number)
|
| try_job.put()
|
|
|
| - result = try_job_result._GetAllTryJobResults(
|
| + result = handlers_util.GetAllTryJobResults(
|
| self.master_name, self.builder_name, self.build_number)
|
|
|
| expected_result = {
|
| @@ -102,7 +250,7 @@ class TryJobResultTest(testing.AppengineTestCase):
|
| ]
|
| try_job.put()
|
|
|
| - result = try_job_result._GetAllTryJobResults(
|
| + result = handlers_util.GetAllTryJobResults(
|
| self.master_name, self.builder_name, self.build_number)
|
|
|
| expected_result = {
|
| @@ -136,7 +284,7 @@ class TryJobResultTest(testing.AppengineTestCase):
|
| ]
|
| try_job.put()
|
|
|
| - result = try_job_result._GetAllTryJobResults(
|
| + result = handlers_util.GetAllTryJobResults(
|
| self.master_name, self.builder_name, self.build_number)
|
|
|
| expected_result = {
|
| @@ -181,7 +329,7 @@ class TryJobResultTest(testing.AppengineTestCase):
|
| ]
|
| try_job.put()
|
|
|
| - result = try_job_result._GetAllTryJobResults(
|
| + result = handlers_util.GetAllTryJobResults(
|
| self.master_name, self.builder_name, self.build_number)
|
|
|
| expected_result = {
|
| @@ -225,7 +373,7 @@ class TryJobResultTest(testing.AppengineTestCase):
|
| ]
|
| try_job.put()
|
|
|
| - result = try_job_result._GetAllTryJobResults(
|
| + result = handlers_util.GetAllTryJobResults(
|
| self.master_name, self.builder_name, self.build_number)
|
|
|
| expected_result = {
|
| @@ -243,15 +391,6 @@ class TryJobResultTest(testing.AppengineTestCase):
|
|
|
| self.assertEqual(expected_result, result)
|
|
|
| - def testTryJobResultHandler(self):
|
| - build_url = buildbot.CreateBuildUrl(
|
| - self.master_name, self.builder_name, self.build_number)
|
| - response = self.test_app.get('/try-job-result', params={'url': build_url})
|
| - expected_results = {}
|
| -
|
| - self.assertEqual(200, response.status_int)
|
| - self.assertEqual(expected_results, response.json_body)
|
| -
|
| def testGetTryJobResultWhenTryJobForTestCompleted(self):
|
| analysis = WfAnalysis.Create(
|
| self.master_name, self.builder_name, self.build_number)
|
| @@ -415,7 +554,7 @@ class TryJobResultTest(testing.AppengineTestCase):
|
| ]
|
| try_job_122.put()
|
|
|
| - result = try_job_result._GetAllTryJobResults(
|
| + result = handlers_util.GetAllTryJobResults(
|
| self.master_name, self.builder_name, self.build_number)
|
|
|
| expected_result = {
|
| @@ -492,3 +631,72 @@ class TryJobResultTest(testing.AppengineTestCase):
|
| }
|
| }
|
| self.assertEqual(expected_result, result)
|
| +
|
| + def testUpdateFlakinessNoTask(self):
|
| + step_name = 's'
|
| + failure_key_set = ['m/b/1']
|
| + culprits_info = None
|
| + handlers_util._UpdateFlakiness(step_name, failure_key_set, culprits_info)
|
| + self.assertIsNone(culprits_info)
|
| +
|
| + def testGetCulpritInfoForTryJobResultStep(self):
|
| + try_job_key = 'm/b/120'
|
| + culprits_info = {
|
| + 'a_test': {
|
| + 'step': 'a_test',
|
| + 'test': 'N/A',
|
| + 'try_job_key': try_job_key
|
| + }
|
| + }
|
| +
|
| + try_job_120 = WfTryJob.Create(
|
| + self.master_name, self.builder_name, 120)
|
| + try_job_120.status = wf_analysis_status.ANALYZED
|
| + try_job_120.test_results = [
|
| + {
|
| + 'result': {
|
| + 'rev0': {
|
| + 'a_test': {
|
| + 'status': 'failed',
|
| + 'valid': True,
|
| + 'failures': ['a_test3']
|
| + }
|
| + }
|
| + },
|
| + 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/'
|
| + 'builders/linux_chromium_variable/builds/120'),
|
| + 'try_job_id': '0',
|
| + 'culprit': {
|
| + 'a_test': {
|
| + 'tests': {
|
| + 'a_test3': {
|
| + 'revision': 'rev0',
|
| + 'commit_position': '0',
|
| + 'review_url': 'url_0'
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| + ]
|
| + try_job_120.put()
|
| +
|
| + handlers_util._GetCulpritInfoForTryJobResult(try_job_key, culprits_info)
|
| +
|
| + expected_culprits_info = {
|
| + 'a_test-a_test3': {
|
| + 'step': 'a_test',
|
| + 'test': 'a_test3',
|
| + 'try_job_key': 'm/b/120',
|
| + 'try_job_build_number': 120,
|
| + 'status': 'Completed',
|
| + 'try_job_url': (
|
| + 'http://build.chromium.org/p/tryserver.chromium.linux/'
|
| + 'builders/linux_chromium_variable/builds/120'),
|
| + 'revision': 'rev0',
|
| + 'commit_position': '0',
|
| + 'review_url': 'url_0'
|
| + }
|
| + }
|
| +
|
| + self.assertEqual(expected_culprits_info, culprits_info)
|
|
|