コード例 #1
0
ファイル: task_scheduler_test.py プロジェクト: nodirt/luci-py
 def test_cron_abort_expired_task_to_run(self):
   self.mock(random, 'getrandbits', lambda _: 0x88)
   data = _gen_request_data(
       properties=dict(dimensions={u'OS': u'Windows-3.1.1'}))
   request = task_request.make_request(data)
   result_summary = task_scheduler.schedule_request(request)
   abandoned_ts = self.mock_now(self.now, data['scheduling_expiration_secs']+1)
   self.assertEqual(1, task_scheduler.cron_abort_expired_task_to_run())
   self.assertEqual([], task_result.TaskRunResult.query().fetch())
   expected = {
     'abandoned_ts': abandoned_ts,
     'bot_id': None,
     'bot_version': None,
     'children_task_ids': [],
     'completed_ts': None,
     'costs_usd': [],
     'cost_saved_usd': None,
     'created_ts': self.now,
     'deduped_from': None,
     'durations': [],
     'exit_codes': [],
     'failure': False,
     'id': '1d69b9f088008810',
     'internal_failure': False,
     'modified_ts': abandoned_ts,
     'name': u'Request name',
     'properties_hash': None,
     'server_versions': [],
     'started_ts': None,
     'state': task_result.State.EXPIRED,
     'try_number': None,
     'user': u'Jesus',
   }
   self.assertEqual(expected, result_summary.key.get().to_dict())
コード例 #2
0
 def test_cron_abort_expired_task_to_run(self):
     self.mock(random, 'getrandbits', lambda _: 0x88)
     data = _gen_request_data(properties=dict(
         dimensions={u'OS': u'Windows-3.1.1'}))
     request = task_request.make_request(data)
     result_summary = task_scheduler.schedule_request(request)
     abandoned_ts = self.mock_now(self.now,
                                  data['scheduling_expiration_secs'] + 1)
     self.assertEqual(1, task_scheduler.cron_abort_expired_task_to_run())
     self.assertEqual([], task_result.TaskRunResult.query().fetch())
     expected = {
         'abandoned_ts': abandoned_ts,
         'bot_id': None,
         'bot_version': None,
         'children_task_ids': [],
         'completed_ts': None,
         'costs_usd': [],
         'cost_saved_usd': None,
         'created_ts': self.now,
         'deduped_from': None,
         'durations': [],
         'exit_codes': [],
         'failure': False,
         'id': '1d69b9f088008810',
         'internal_failure': False,
         'modified_ts': abandoned_ts,
         'name': u'Request name',
         'properties_hash': None,
         'server_versions': [],
         'started_ts': None,
         'state': task_result.State.EXPIRED,
         'try_number': None,
         'user': u'Jesus',
     }
     self.assertEqual(expected, result_summary.key.get().to_dict())
コード例 #3
0
ファイル: task_scheduler_test.py プロジェクト: maruel/luci-py
  def test_cron_abort_expired_task_to_run_retry(self):
    self.mock(random, 'getrandbits', lambda _: 0x88)
    now = utils.utcnow()
    data = _gen_request(
        properties=dict(dimensions={u'OS': u'Windows-3.1.1'}),
        created_ts=now,
        expiration_ts=now+datetime.timedelta(seconds=600))
    request = task_request.make_request(data, True)
    result_summary = task_scheduler.schedule_request(request)

    # Fake first try bot died.
    bot_dimensions = {
      u'OS': [u'Windows', u'Windows-3.1.1'],
      u'hostname': u'localhost',
      u'foo': u'bar',
    }
    _request, run_result = task_scheduler.bot_reap_task(
        bot_dimensions, 'localhost', 'abc')
    now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1)
    self.assertEqual((0, 1, 0), task_scheduler.cron_handle_bot_died())
    self.assertEqual(task_result.State.BOT_DIED, run_result.key.get().state)
    self.assertEqual(
        task_result.State.PENDING, run_result.result_summary_key.get().state)

    # BOT_DIED is kept instead of EXPIRED.
    abandoned_ts = self.mock_now(self.now, request.expiration_secs+1)
    self.assertEqual(1, task_scheduler.cron_abort_expired_task_to_run())
    self.assertEqual(1, len(task_result.TaskRunResult.query().fetch()))
    expected = {
      'abandoned_ts': abandoned_ts,
      'bot_dimensions': bot_dimensions,
      'bot_id': u'localhost',
      'bot_version': u'abc',
      'children_task_ids': [],
      'completed_ts': None,
      'costs_usd': [0.],
      'cost_saved_usd': None,
      'created_ts': self.now,
      'deduped_from': None,
      'durations': [],
      'exit_codes': [],
      'failure': False,
      'id': '1d69b9f088008810',
      'internal_failure': True,
      'modified_ts': abandoned_ts,
      'name': u'Request name',
      'outputs_ref': None,
      'properties_hash': None,
      'server_versions': [u'v1a'],
      'started_ts': self.now,
      'state': task_result.State.BOT_DIED,
      'tags': [u'OS:Windows-3.1.1', u'priority:50', u'tag:1', u'user:Jesus'],
      'try_number': 1,
      'user': u'Jesus',
    }
    self.assertEqual(expected, result_summary.key.get().to_dict())
コード例 #4
0
  def test_cron_abort_expired_task_to_run_retry(self):
    self.mock(random, 'getrandbits', lambda _: 0x88)
    now = utils.utcnow()
    data = _gen_request(
        properties=dict(dimensions={u'OS': u'Windows-3.1.1'}),
        created_ts=now,
        expiration_ts=now+datetime.timedelta(seconds=600))
    request = task_request.make_request(data, True)
    result_summary = task_scheduler.schedule_request(request)

    # Fake first try bot died.
    bot_dimensions = {
      u'OS': [u'Windows', u'Windows-3.1.1'],
      u'hostname': u'localhost',
      u'foo': u'bar',
    }
    _request, run_result = task_scheduler.bot_reap_task(
        bot_dimensions, 'localhost', 'abc')
    now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1)
    self.assertEqual((0, 1, 0), task_scheduler.cron_handle_bot_died())
    self.assertEqual(task_result.State.BOT_DIED, run_result.key.get().state)
    self.assertEqual(
        task_result.State.PENDING, run_result.result_summary_key.get().state)

    # BOT_DIED is kept instead of EXPIRED.
    abandoned_ts = self.mock_now(self.now, request.expiration_secs+1)
    self.assertEqual(1, task_scheduler.cron_abort_expired_task_to_run())
    self.assertEqual(1, len(task_result.TaskRunResult.query().fetch()))
    expected = {
      'abandoned_ts': abandoned_ts,
      'bot_dimensions': bot_dimensions,
      'bot_id': u'localhost',
      'bot_version': u'abc',
      'children_task_ids': [],
      'completed_ts': None,
      'costs_usd': [0.],
      'cost_saved_usd': None,
      'created_ts': self.now,
      'deduped_from': None,
      'durations': [],
      'exit_codes': [],
      'failure': False,
      'id': '1d69b9f088008810',
      'internal_failure': True,
      'modified_ts': abandoned_ts,
      'name': u'Request name',
      'outputs_ref': None,
      'properties_hash': None,
      'server_versions': [u'v1a'],
      'started_ts': self.now,
      'state': task_result.State.BOT_DIED,
      'tags': [u'OS:Windows-3.1.1', u'priority:50', u'tag:1', u'user:Jesus'],
      'try_number': 1,
      'user': u'Jesus',
    }
    self.assertEqual(expected, result_summary.key.get().to_dict())
コード例 #5
0
 def test_cron_abort_expired_task_to_run(self):
   self.mock(random, 'getrandbits', lambda _: 0x88)
   request = task_request.make_request(
       _gen_request(
           properties={'dimensions': {u'OS': u'Windows-3.1.1'}},
           pubsub_topic='projects/abc/topics/def'),
       True)
   pub_sub_calls = self.mock_pub_sub()
   result_summary = task_scheduler.schedule_request(request)
   abandoned_ts = self.mock_now(self.now, request.expiration_secs+1)
   self.assertEqual(
       ['1d69b9f088008810'],
       task_scheduler.cron_abort_expired_task_to_run('f.local'))
   self.assertEqual([], task_result.TaskRunResult.query().fetch())
   expected = {
     'abandoned_ts': abandoned_ts,
     'bot_dimensions': None,
     'bot_id': None,
     'bot_version': None,
     'children_task_ids': [],
     'completed_ts': None,
     'costs_usd': [],
     'cost_saved_usd': None,
     'created_ts': self.now,
     'deduped_from': None,
     'durations': [],
     'exit_codes': [],
     'failure': False,
     'id': '1d69b9f088008810',
     'internal_failure': False,
     'modified_ts': abandoned_ts,
     'name': u'Request name',
     'outputs_ref': None,
     'properties_hash': None,
     'server_versions': [],
     'started_ts': None,
     'state': task_result.State.EXPIRED,
     'tags': [u'OS:Windows-3.1.1', u'priority:50', u'tag:1', u'user:Jesus'],
     'try_number': None,
     'user': u'Jesus',
   }
   self.assertEqual(expected, result_summary.key.get().to_dict())
   self.assertEqual(1, len(pub_sub_calls)) # pubsub completion notification
コード例 #6
0
 def get(self):
     task_scheduler.cron_abort_expired_task_to_run(self.request.host_url)
     self.response.headers['Content-Type'] = 'text/plain; charset=utf-8'
     self.response.out.write('Success.')
コード例 #7
0
 def get(self):
     ndb.get_context().set_cache_policy(lambda _: False)
     task_scheduler.cron_abort_expired_task_to_run(self.request.host_url)
     self.response.headers['Content-Type'] = 'text/plain; charset=utf-8'
     self.response.out.write('Success.')
コード例 #8
0
ファイル: handlers_backend.py プロジェクト: eakuefner/luci-py
 def get(self):
   task_scheduler.cron_abort_expired_task_to_run()
   self.response.headers['Content-Type'] = 'text/plain; charset=utf-8'
   self.response.out.write('Success.')
コード例 #9
0
 def run_cron(self):
     task_scheduler.cron_abort_expired_task_to_run()