14a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# Copyright 2015 The Chromium Authors. All rights reserved.
24a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# Use of this source code is governed by a BSD-style license that can be
34a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# found in the LICENSE file.
44a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
54a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport unittest
64a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
74a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard import buildbucket_job
84a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard import testing_common
94a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairclass BuildbucketJobTest(testing_common.TestCase):
124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def setUp(self):
144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    super(BuildbucketJobTest, self).setUp()
154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self._args_base = {
16cef7893435aa41160dd1255c43cb8498279738ccChris Craik        'try_job_id': 1,
1746b43bff003ceda46cf9a5d40a47f7674996d2e0Zhen Wang        'recipe_tester_name': 'linux_perf_bisect',
184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'good_revision': '1',
194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'bad_revision': '2',
204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'test_command': 'tools/perf/dummy_command',
214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'metric': 'dummy_metric',
224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'repeats': '5',
234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'timeout_minutes': '10',
244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'bug_id': None,
254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'gs_bucket': 'dummy_bucket',
264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'builder_host': None,
274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        'builder_port': None,
284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    }
294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def testCreateJob(self):
314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    job = buildbucket_job.BisectJob(**self._args_base)
324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    params = job.GetBuildParameters()
334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    assert isinstance(params, dict)
344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertIn('builder_name', params)
354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    properties = params['properties']
364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    assert isinstance(properties, dict)
374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    bisect_config = properties['bisect_config']
384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    assert isinstance(bisect_config, dict)
394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertIn('test_type', bisect_config)
404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertIn('command', bisect_config)
414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertIn('src', bisect_config['command'])
424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertIn('metric', bisect_config)
434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertIn('good_revision', bisect_config)
444a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertIn('bad_revision', bisect_config)
454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertIn('repeat_count', bisect_config)
464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertIn('max_time_minutes', bisect_config)
474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def testMissingRequiredArgs(self):
494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self._args_base['test_command'] = None
504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    with self.assertRaises(ValueError):
514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair      job = buildbucket_job.BisectJob(**self._args_base)
524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair      _ = job.GetBuildParameters()
534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairif __name__ == '__main__':
554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  unittest.main()
56