Add support for adjusting etcd ttl on job_heartbeat. Switch the heartbeat method to a coroutine.
This commit is contained in:
parent
2b6c2a2a50
commit
34bf92673b
6 changed files with 62 additions and 13 deletions
|
@ -78,11 +78,13 @@ class TestEphemeral(unittest.TestCase):
|
|||
self.uniregister_component_callback,
|
||||
self.job_heartbeat_callback,
|
||||
self.job_complete_callback,
|
||||
'127.0.0.1'
|
||||
'127.0.0.1',
|
||||
30,
|
||||
)
|
||||
|
||||
self.manager.initialize({'EXECUTOR': 'test'})
|
||||
|
||||
self.mock_job = self._create_build_job()
|
||||
self.mock_job_key = os.path.join(ETCD_BUILDER_PREFIX, BUILD_UUID)
|
||||
|
||||
def tearDown(self):
|
||||
|
@ -95,15 +97,13 @@ class TestEphemeral(unittest.TestCase):
|
|||
|
||||
@async_test
|
||||
def test_schedule_and_complete(self):
|
||||
mock_job = self._create_build_job()
|
||||
|
||||
self.etcd_client_mock.read = Mock(side_effect=KeyError)
|
||||
test_component = BuildComponent(None)
|
||||
self.register_component_callback.return_value = test_component
|
||||
|
||||
# Ask for a builder to be scheduled
|
||||
loop = get_event_loop()
|
||||
is_scheduled = yield From(self.manager.schedule(mock_job, loop))
|
||||
is_scheduled = yield From(self.manager.schedule(self.mock_job, loop))
|
||||
|
||||
self.assertTrue(is_scheduled)
|
||||
|
||||
|
@ -114,7 +114,7 @@ class TestEphemeral(unittest.TestCase):
|
|||
|
||||
self.assertEqual(self.register_component_callback.call_count, 1)
|
||||
|
||||
yield From(self.manager.job_completed(mock_job, BuildJobResult.COMPLETE, test_component))
|
||||
yield From(self.manager.job_completed(self.mock_job, BuildJobResult.COMPLETE, test_component))
|
||||
|
||||
self.assertEqual(self.test_executor.stop_builder.call_count, 1)
|
||||
self.etcd_client_mock.delete.assert_called_once_with(self.mock_job_key)
|
||||
|
@ -125,7 +125,7 @@ class TestEphemeral(unittest.TestCase):
|
|||
self.etcd_client_mock.watch.assert_called_once_with(ETCD_BUILDER_PREFIX, recursive=True)
|
||||
|
||||
# Send a signal to the callback that a worker has expired
|
||||
expired_result = Mock(sepc=etcd.EtcdResult)
|
||||
expired_result = Mock(spec=etcd.EtcdResult)
|
||||
expired_result.action = ETCD_EXPIRE_RESULT
|
||||
expired_result.key = self.mock_job_key
|
||||
expired_result._prev_node = Mock(spec=etcd.EtcdResult)
|
||||
|
@ -157,3 +157,17 @@ class TestEphemeral(unittest.TestCase):
|
|||
|
||||
self.assertEquals(self.test_executor.stop_builder.call_count, 0)
|
||||
|
||||
@async_test
|
||||
def test_heartbeat_response(self):
|
||||
builder_result = Mock(spec=etcd.EtcdResult)
|
||||
builder_result.value = {'builder_id': '123', 'expiration': '123'}
|
||||
self.etcd_client_mock.read = Mock(return_value=builder_result)
|
||||
|
||||
yield From(self.manager.job_heartbeat(self.mock_job))
|
||||
|
||||
# Wait for threads to complete
|
||||
yield From(sleep(.01))
|
||||
|
||||
self.job_heartbeat_callback.assert_called_once_with(self.mock_job)
|
||||
self.assertEqual(self.etcd_client_mock.write.call_count, 1)
|
||||
self.assertEqual(self.etcd_client_mock.write.call_args_list[0][0][0], self.mock_job_key)
|
||||
|
|
Reference in a new issue