def test_handle_task(self): worker1 = Worker(hostname='fuzzie') worker1.event('online', time(), time(), {}) mw = self.cam.handle_worker((worker1.hostname, worker1)) task1 = create_task(worker1) task1.event('received', time(), time(), {}) mt = self.cam.handle_task((task1.uuid, task1)) self.assertEqual(mt.worker, mw) worker2 = Worker(hostname=None) task2 = create_task(worker2) task2.event('received', time(), time(), {}) mt = self.cam.handle_task((task2.uuid, task2)) self.assertIsNone(mt.worker) task1.event('succeeded', time(), time(), {'result': 42}) self.assertEqual(task1.state, states.SUCCESS) self.assertEqual(task1.result, 42) mt = self.cam.handle_task((task1.uuid, task1)) self.assertEqual(mt.name, task1.name) self.assertEqual(mt.result, 42) task3 = create_task(worker1, name=None) task3.event('revoked', time(), time(), {}) mt = self.cam.handle_task((task3.uuid, task3)) self.assertIsNone(mt)
def test_handle_task(self): worker1 = Worker(hostname='fuzzie') worker1.event('online', time(), time(), {}) mw = self.cam.handle_worker((worker1.hostname, worker1)) task1 = self.create_task(worker1) task1.event('received', time(), time(), {}) mt = self.cam.handle_task((task1.uuid, task1)) assert mt.worker == mw worker2 = Worker(hostname=None) task2 = self.create_task(worker2) task2.event('received', time(), time(), {}) mt = self.cam.handle_task((task2.uuid, task2)) assert mt.worker is None task1.event('succeeded', time(), time(), {'result': 42}) assert task1.state == states.SUCCESS assert task1.result == 42 mt = self.cam.handle_task((task1.uuid, task1)) assert mt.name == task1.name assert mt.result == 42 task3 = self.create_task(worker1, name=None) task3.event('revoked', time(), time(), {}) mt = self.cam.handle_task((task3.uuid, task3)) assert mt is None
def test_updates_heartbeat(self): worker = Worker(hostname='foo') worker.event(None, time(), time()) self.assertEqual(len(worker.heartbeats), 1) h1 = worker.heartbeats[0] worker.event(None, time(), time() - 10) self.assertEqual(len(worker.heartbeats), 2) self.assertEqual(worker.heartbeats[-1], h1)
def test_updates_heartbeat(self): worker = Worker(hostname='foo') worker.event(None, time(), time()) assert len(worker.heartbeats) == 1 h1 = worker.heartbeats[0] worker.event(None, time(), time() - 10) assert len(worker.heartbeats) == 2 assert worker.heartbeats[-1] == h1
def assertExpires(self, dec, expired, tasks=10): worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) for total in range(tasks): task = create_task(worker) task.event('received', time() - dec, time() - dec, {}) task.event('succeeded', time() - dec, time() - dec, {'result': 42}) self.assertTrue(task.name) self.assertTrue(self.cam.handle_task((task.uuid, task))) self.assertEqual(self.cam.on_cleanup(), expired)
def assertExpires(self, dec, expired, tasks=10): worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) for total in xrange(tasks): task = create_task(worker) task.event('received', time() - dec, time() - dec, {}) task.event('succeeded', time() - dec, time() - dec, {'result': 42}) self.assertTrue(task.name) self.assertTrue(self.cam.handle_task((task.uuid, task))) self.assertEqual(self.cam.on_cleanup(), expired)
def test_compatible_with_Decimal(self): w = Worker('*****@*****.**') timestamp, local_received = Decimal(time()), time() w.event('worker-online', timestamp, local_received, fields={ 'hostname': '*****@*****.**', 'timestamp': timestamp, 'local_received': local_received, 'freq': Decimal(5.6335431), }) assert w.alive
def test_get_heartbeat(self): worker = Worker(hostname='fuzzie') self.assertIsNone(self.cam.get_heartbeat(worker)) t1 = time() t2 = time() t3 = time() for t in t1, t2, t3: worker.event('heartbeat', t, t, {}) self.state.workers[worker.hostname] = worker self.assertEqual(self.cam.get_heartbeat(worker), make_aware(datetime.fromtimestamp(t3)))
def test_handle_worker(self): worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) self.cam._last_worker_write.clear() m = self.cam.handle_worker((worker.hostname, worker)) self.assertTrue(m) self.assertTrue(m.hostname) self.assertTrue(m.last_heartbeat) self.assertTrue(m.is_alive()) self.assertEqual(unicode(m), unicode(m.hostname)) self.assertTrue(repr(m))
def test_handle_worker(self): worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) self.cam._last_worker_write.clear() m = self.cam.handle_worker((worker.hostname, worker)) assert m assert m.hostname assert m.last_heartbeat assert m.is_alive() assert str(m) == str(m.hostname) assert repr(m)
def test_handle_task_timezone(self): worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) self.cam.handle_worker((worker.hostname, worker)) tstamp = 1464793200.0 # 2016-06-01T15:00:00Z with override_settings(USE_TZ=True, TIME_ZONE='Europe/Helsinki'): task = self.create_task( worker, eta='2016-06-01T15:16:17.654321+00:00', expires='2016-07-01T15:16:17.765432+03:00', ) task.event('received', tstamp, tstamp, {}) mt = self.cam.handle_task((task.uuid, task)) assert ( mt.tstamp == datetime(2016, 6, 1, 15, 0, 0, tzinfo=timezone.utc) ) assert ( mt.eta == datetime(2016, 6, 1, 15, 16, 17, 654321, tzinfo=timezone.utc) ) assert ( mt.expires == datetime(2016, 7, 1, 12, 16, 17, 765432, tzinfo=timezone.utc) ) task = self.create_task(worker, eta='2016-06-04T15:16:17.654321') task.event('received', tstamp, tstamp, {}) mt = self.cam.handle_task((task.uuid, task)) assert ( mt.eta == datetime(2016, 6, 4, 15, 16, 17, 654321, tzinfo=timezone.utc) ) with override_settings(USE_TZ=False, TIME_ZONE='Europe/Helsinki'): task = self.create_task( worker, eta='2016-06-01T15:16:17.654321+00:00', expires='2016-07-01T15:16:17.765432+03:00', ) task.event('received', tstamp, tstamp, {}) mt = self.cam.handle_task((task.uuid, task)) assert mt.tstamp == datetime(2016, 6, 1, 18, 0, 0) assert mt.eta == datetime(2016, 6, 1, 18, 16, 17, 654321) assert mt.expires == datetime(2016, 7, 1, 15, 16, 17, 765432) task = self.create_task(worker, eta='2016-06-04T15:16:17.654321') task.event('received', tstamp, tstamp, {}) mt = self.cam.handle_task((task.uuid, task)) assert mt.eta == datetime(2016, 6, 4, 15, 16, 17, 654321)
def assert_expires(self, dec, expired, tasks=10): # Cleanup leftovers from previous tests self.cam.on_cleanup() worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) for total in range(tasks): task = self.create_task(worker) task.event('received', time() - dec, time() - dec, {}) task.event('succeeded', time() - dec, time() - dec, {'result': 42}) assert task.name assert self.cam.handle_task((task.uuid, task)) assert self.cam.on_cleanup() == expired
def test_handle_worker(self): worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) old_last_update = timezone.now() - timedelta(hours=1) models.WorkerState.objects.all().update(last_update=old_last_update) m = self.cam.handle_worker((worker.hostname, worker)) assert m assert m.hostname assert m.last_heartbeat assert m.last_update != old_last_update assert m.is_alive() assert str(m) == str(m.hostname) assert repr(m)
def test_handle_task_timezone(self): worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) self.cam.handle_worker((worker.hostname, worker)) tstamp = 1464793200.0 # 2016-06-01T15:00:00Z with override_settings(USE_TZ=True, TIME_ZONE='Europe/Helsinki'): task = create_task(worker, eta='2016-06-01T15:16:17.654321+00:00', expires='2016-07-01T15:16:17.765432+03:00') task.event('received', tstamp, tstamp, {}) mt = self.cam.handle_task((task.uuid, task)) self.assertEqual( mt.tstamp, datetime(2016, 6, 1, 15, 0, 0, tzinfo=timezone.utc), ) self.assertEqual( mt.eta, datetime(2016, 6, 1, 15, 16, 17, 654321, tzinfo=timezone.utc), ) self.assertEqual( mt.expires, datetime(2016, 7, 1, 12, 16, 17, 765432, tzinfo=timezone.utc), ) task = create_task(worker, eta='2016-06-04T15:16:17.654321') task.event('received', tstamp, tstamp, {}) mt = self.cam.handle_task((task.uuid, task)) self.assertEqual( mt.eta, datetime(2016, 6, 4, 15, 16, 17, 654321, tzinfo=timezone.utc), ) with override_settings(USE_TZ=False, TIME_ZONE='Europe/Helsinki'): task = create_task(worker, eta='2016-06-01T15:16:17.654321+00:00', expires='2016-07-01T15:16:17.765432+03:00') task.event('received', tstamp, tstamp, {}) mt = self.cam.handle_task((task.uuid, task)) self.assertEqual(mt.tstamp, datetime(2016, 6, 1, 18, 0, 0)) self.assertEqual(mt.eta, datetime(2016, 6, 1, 18, 16, 17, 654321)) self.assertEqual(mt.expires, datetime(2016, 7, 1, 15, 16, 17, 765432)) task = create_task(worker, eta='2016-06-04T15:16:17.654321') task.event('received', tstamp, tstamp, {}) mt = self.cam.handle_task((task.uuid, task)) self.assertEqual(mt.eta, datetime(2016, 6, 4, 15, 16, 17, 654321))
def test_handle_task_received(self): worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) self.cam.handle_worker((worker.hostname, worker)) task = self.create_task(worker) task.event('received', time(), time(), {}) assert task.state == states.RECEIVED mt = self.cam.handle_task((task.uuid, task)) assert mt.name == task.name assert str(mt) assert repr(mt) mt.eta = timezone.now() assert 'eta' in str(mt) assert mt in models.TaskState.objects.active()
def test_handle_task_received(self): worker = Worker(hostname='fuzzie') worker.event('oneline', time(), time(), {}) self.cam.handle_worker((worker.hostname, worker)) task = create_task(worker) task.event('received', time(), time(), {}) self.assertEqual(task.state, 'RECEIVED') mt = self.cam.handle_task((task.uuid, task)) self.assertEqual(mt.name, task.name) self.assertTrue(unicode(mt)) self.assertTrue(repr(mt)) mt.eta = celery.now() self.assertIn('eta', unicode(mt)) self.assertIn(mt, models.TaskState.objects.active())
def test_handle_task_received(self): worker = Worker(hostname='fuzzie') worker.event('online', time(), time(), {}) self.cam.handle_worker((worker.hostname, worker)) task = create_task(worker) task.event('received', time(), time(), {}) self.assertEqual(task.state, 'RECEIVED') mt = self.cam.handle_task((task.uuid, task)) self.assertEqual(mt.name, task.name) self.assertTrue(unicode(mt)) self.assertTrue(repr(mt)) mt.eta = celery.now() self.assertIn('eta', unicode(mt)) self.assertIn(mt, models.TaskState.objects.active())
def test_reduce_direct(self): w = Worker('*****@*****.**') w.event('worker-online', 10.0, 13.0, fields={ 'hostname': '*****@*****.**', 'timestamp': 10.0, 'local_received': 13.0, 'freq': 60, }) fun, args = w.__reduce__() w2 = fun(*args) assert w2.hostname == w.hostname assert w2.pid == w.pid assert w2.freq == w.freq assert w2.heartbeats == w.heartbeats assert w2.clock == w.clock assert w2.active == w.active assert w2.processed == w.processed assert w2.loadavg == w.loadavg assert w2.sw_ident == w.sw_ident
def test_reduce_direct(self): w = Worker('*****@*****.**') w.event('worker-online', 10.0, 13.0, fields={ 'hostname': '*****@*****.**', 'timestamp': 10.0, 'local_received': 13.0, 'freq': 60, }) fun, args = w.__reduce__() w2 = fun(*args) self.assertEqual(w2.hostname, w.hostname) self.assertEqual(w2.pid, w.pid) self.assertEqual(w2.freq, w.freq) self.assertEqual(w2.heartbeats, w.heartbeats) self.assertEqual(w2.clock, w.clock) self.assertEqual(w2.active, w.active) self.assertEqual(w2.processed, w.processed) self.assertEqual(w2.loadavg, w.loadavg) self.assertEqual(w2.sw_ident, w.sw_ident)
def test_drift_warning(self): worker = Worker(hostname='foo') with patch('celery.events.state.warn') as warn: worker.event(None, time() + (HEARTBEAT_DRIFT_MAX * 2), time()) warn.assert_called() assert 'Substantial drift' in warn.call_args[0][0]
def test_survives_missing_timestamp(self): worker = Worker(hostname='foo') worker.event('heartbeat') assert worker.heartbeats == []
def test_updates_heartbeat(self): worker = Worker(hostname="foo") worker.event(None, time(), time()) self.assertEqual(len(worker.heartbeats), 1) worker.event(None, time(), time() - 10) self.assertEqual(len(worker.heartbeats), 1)
def test_survives_missing_timestamp(self): worker = Worker(hostname='foo') worker.event('heartbeat') self.assertEqual(worker.heartbeats, [])
def test_drift_warning(self): worker = Worker(hostname="foo") with patch("celery.events.state.warn") as warn: worker.event(None, time() + (HEARTBEAT_DRIFT_MAX * 2), time()) self.assertTrue(warn.called) self.assertIn("Substantial drift", warn.call_args[0][0])