def test_infinite_cleanup_loop(self, mocked_apply_async): """ There is a potential for the cleanup task to constantly call itself if every time it re-runs there is at least 1 new object to clean up (i.e. every 3 seconds for 60 days a new result is recorded). Make sure it only re-calls itself if the whole batch is used. """ with self.settings(CELERY_ALWAYS_EAGER=False): initial_results = StatusCheckResult.objects.all().count() for i in range(2): StatusCheckResult(status_check=self.graphite_check, time=timezone.now() - timedelta(days=61), time_complete=timezone.now() - timedelta(days=61), succeeded=False).save() tasks.clean_db(batch_size=2) # If full batch is cleaned it should queue itself again self.assertTrue(mocked_apply_async.called) StatusCheckResult(status_check=self.graphite_check, time=timezone.now() - timedelta(days=61), time_complete=timezone.now() - timedelta(days=61), succeeded=False).save() mocked_apply_async.reset_mock() tasks.clean_db(batch_size=2) # This time full batch isn't cleaned (only 1 out of 2) - don't call again self.assertFalse(mocked_apply_async.called)
def test_cleanup_simple(self): initial_results = StatusCheckResult.objects.all().count() initial_snapshots = ServiceStatusSnapshot.objects.all().count() ServiceStatusSnapshot( service=self.service, num_checks_active=1, num_checks_passing=1, num_checks_failing=1, overall_status=self.service.overall_status, time=timezone.now() - timedelta(days=61), ).save() StatusCheckResult(status_check=self.graphite_check, time=timezone.now() - timedelta(days=61), time_complete=timezone.now() - timedelta(days=61), succeeded=False).save() self.assertEqual(StatusCheckResult.objects.all().count(), initial_results + 1) tasks.clean_db() self.assertEqual(StatusCheckResult.objects.all().count(), initial_results) self.assertEqual(ServiceStatusSnapshot.objects.all().count(), initial_snapshots)
def test_infinite_cleanup_loop(self, mocked_apply_async): """ There is a potential for the cleanup task to constantly call itself if every time it re-runs there is at least 1 new object to clean up (i.e. every 3 seconds for 60 days a new result is recorded). Make sure it only re-calls itself if the whole batch is used. """ with self.settings(CELERY_ALWAYS_EAGER=False): initial_results = StatusCheckResult.objects.all().count() for i in range(2): StatusCheckResult( status_check=self.graphite_check, time=timezone.now() - timedelta(days=61), time_complete=timezone.now() - timedelta(days=61), succeeded=False ).save() tasks.clean_db(batch_size=2) # If full batch is cleaned it should queue itself again self.assertTrue(mocked_apply_async.called) StatusCheckResult( status_check=self.graphite_check, time=timezone.now() - timedelta(days=61), time_complete=timezone.now() - timedelta(days=61), succeeded=False ).save() mocked_apply_async.reset_mock() tasks.clean_db(batch_size=2) # This time full batch isn't cleaned (only 1 out of 2) - don't call again self.assertFalse(mocked_apply_async.called)
def test_cleanup_batch(self): initial_results = StatusCheckResult.objects.all().count() for i in range(2): StatusCheckResult( status_check=self.graphite_check, time=timezone.now() - timedelta(days=61), time_complete=timezone.now() - timedelta(days=61), succeeded=False ).save() self.assertEqual(StatusCheckResult.objects.all().count(), initial_results + 2) tasks.clean_db(batch_size=1) self.assertEqual(StatusCheckResult.objects.all().count(), initial_results)
def test_cleanup_simple(self): initial_results = StatusCheckResult.objects.all().count() initial_snapshots = ServiceStatusSnapshot.objects.all().count() ServiceStatusSnapshot( service=self.service, num_checks_active=1, num_checks_passing=1, num_checks_failing=1, overall_status=self.service.overall_status, time=timezone.now() - timedelta(days=61), ).save() StatusCheckResult( status_check=self.graphite_check, time=timezone.now() - timedelta(days=61), time_complete=timezone.now() - timedelta(days=61), succeeded=False ).save() self.assertEqual(StatusCheckResult.objects.all().count(), initial_results + 1) tasks.clean_db() self.assertEqual(StatusCheckResult.objects.all().count(), initial_results) self.assertEqual(ServiceStatusSnapshot.objects.all().count(), initial_snapshots)