mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-18 05:28:16 -06:00
Clean up tests
This commit is contained in:
parent
1f4e98970b
commit
09aaa5bbae
@ -1,25 +1,16 @@
|
|||||||
|
import logging
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from django.contrib.auth.models import User
|
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django_rq import get_queue
|
from django_rq import get_queue
|
||||||
from django.test import override_settings
|
from django_rq.settings import QUEUES_MAP
|
||||||
from django.test.client import Client
|
|
||||||
from django_rq.settings import QUEUES_MAP, QUEUES_LIST
|
|
||||||
from django_rq.workers import get_worker
|
from django_rq.workers import get_worker
|
||||||
from django.urls import reverse
|
|
||||||
from rq import get_current_job
|
|
||||||
from rq.job import Job as RQ_Job, JobStatus
|
from rq.job import Job as RQ_Job, JobStatus
|
||||||
from rq.registry import (
|
from rq.registry import DeferredJobRegistry, FailedJobRegistry, FinishedJobRegistry, StartedJobRegistry
|
||||||
DeferredJobRegistry,
|
|
||||||
FailedJobRegistry,
|
|
||||||
FinishedJobRegistry,
|
|
||||||
ScheduledJobRegistry,
|
|
||||||
StartedJobRegistry,
|
|
||||||
)
|
|
||||||
|
|
||||||
from utilities.testing import TestCase, ViewTestCases, create_tags
|
from utilities.testing import TestCase, ViewTestCases, create_tags
|
||||||
|
|
||||||
from ..models import *
|
from ..models import *
|
||||||
|
|
||||||
|
|
||||||
@ -108,21 +99,22 @@ class DataFileTestCase(
|
|||||||
DataFile.objects.bulk_create(data_files)
|
DataFile.objects.bulk_create(data_files)
|
||||||
|
|
||||||
|
|
||||||
def test_job_default():
|
|
||||||
return 'TestNBJob'
|
|
||||||
|
|
||||||
|
|
||||||
def test_job_high():
|
|
||||||
return 'TestNBJob'
|
|
||||||
|
|
||||||
|
|
||||||
def test_failing_job():
|
|
||||||
raise ValueError
|
|
||||||
|
|
||||||
|
|
||||||
class BackgroundTaskTestCase(TestCase):
|
class BackgroundTaskTestCase(TestCase):
|
||||||
user_permissions = ()
|
user_permissions = ()
|
||||||
|
|
||||||
|
# Dummy worker functions
|
||||||
|
@staticmethod
|
||||||
|
def dummy_job_default():
|
||||||
|
return "Job finished"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def dummy_job_high():
|
||||||
|
return "Job finished"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def dummy_job_failing():
|
||||||
|
raise Exception("Job failed")
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
self.user.is_staff = True
|
self.user.is_staff = True
|
||||||
@ -154,64 +146,67 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
|
|
||||||
def test_background_tasks_list_default(self):
|
def test_background_tasks_list_default(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
job = queue.enqueue(test_job_default)
|
queue.enqueue(self.dummy_job_default)
|
||||||
queue_index = QUEUES_MAP['default']
|
queue_index = QUEUES_MAP['default']
|
||||||
|
|
||||||
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'queued']))
|
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'queued']))
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertIn('core.tests.test_views.test_job_default', str(response.content))
|
self.assertIn('BackgroundTaskTestCase.dummy_job_default', str(response.content))
|
||||||
|
|
||||||
def test_background_tasks_list_high(self):
|
def test_background_tasks_list_high(self):
|
||||||
queue = get_queue('high')
|
queue = get_queue('high')
|
||||||
job = queue.enqueue(test_job_high)
|
queue.enqueue(self.dummy_job_high)
|
||||||
queue_index = QUEUES_MAP['high']
|
queue_index = QUEUES_MAP['high']
|
||||||
|
|
||||||
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'queued']))
|
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'queued']))
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertIn('core.tests.test_views.test_job_high', str(response.content))
|
self.assertIn('BackgroundTaskTestCase.dummy_job_high', str(response.content))
|
||||||
|
|
||||||
def test_background_tasks_list_finished(self):
|
def test_background_tasks_list_finished(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
job = queue.enqueue(test_job_default)
|
job = queue.enqueue(self.dummy_job_default)
|
||||||
queue_index = QUEUES_MAP['default']
|
queue_index = QUEUES_MAP['default']
|
||||||
|
|
||||||
registry = FinishedJobRegistry(queue.name, queue.connection)
|
registry = FinishedJobRegistry(queue.name, queue.connection)
|
||||||
registry.add(job, 2)
|
registry.add(job, 2)
|
||||||
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'finished']))
|
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'finished']))
|
||||||
self.assertIn('core.tests.test_views.test_job_default', str(response.content))
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertIn('BackgroundTaskTestCase.dummy_job_default', str(response.content))
|
||||||
|
|
||||||
def test_background_tasks_list_failed(self):
|
def test_background_tasks_list_failed(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
job = queue.enqueue(test_job_default)
|
job = queue.enqueue(self.dummy_job_default)
|
||||||
queue_index = QUEUES_MAP['default']
|
queue_index = QUEUES_MAP['default']
|
||||||
|
|
||||||
registry = FailedJobRegistry(queue.name, queue.connection)
|
registry = FailedJobRegistry(queue.name, queue.connection)
|
||||||
registry.add(job, 2)
|
registry.add(job, 2)
|
||||||
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'failed']))
|
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'failed']))
|
||||||
self.assertIn('core.tests.test_views.test_job_default', str(response.content))
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertIn('BackgroundTaskTestCase.dummy_job_default', str(response.content))
|
||||||
|
|
||||||
def test_background_tasks_scheduled(self):
|
def test_background_tasks_scheduled(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
job = queue.enqueue_at(datetime.now(), test_job_default)
|
queue.enqueue_at(datetime.now(), self.dummy_job_default)
|
||||||
queue_index = QUEUES_MAP['default']
|
queue_index = QUEUES_MAP['default']
|
||||||
|
|
||||||
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'scheduled']))
|
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'scheduled']))
|
||||||
self.assertIn('core.tests.test_views.test_job_default', str(response.content))
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertIn('BackgroundTaskTestCase.dummy_job_default', str(response.content))
|
||||||
|
|
||||||
def test_background_tasks_list_deferred(self):
|
def test_background_tasks_list_deferred(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
job = queue.enqueue(test_job_default)
|
job = queue.enqueue(self.dummy_job_default)
|
||||||
queue_index = QUEUES_MAP['default']
|
queue_index = QUEUES_MAP['default']
|
||||||
|
|
||||||
registry = DeferredJobRegistry(queue.name, queue.connection)
|
registry = DeferredJobRegistry(queue.name, queue.connection)
|
||||||
registry.add(job, 2)
|
registry.add(job, 2)
|
||||||
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'deferred']))
|
response = self.client.get(reverse('core:background_task_list', args=[queue_index, 'deferred']))
|
||||||
self.assertIn('core.tests.test_views.test_job_default', str(response.content))
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertIn('BackgroundTaskTestCase.dummy_job_default', str(response.content))
|
||||||
|
|
||||||
def test_background_task(self):
|
def test_background_task(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
job = queue.enqueue(test_job_default)
|
job = queue.enqueue(self.dummy_job_default)
|
||||||
queue_index = QUEUES_MAP['default']
|
|
||||||
|
|
||||||
response = self.client.get(reverse('core:background_task', args=[job.id]))
|
response = self.client.get(reverse('core:background_task', args=[job.id]))
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
@ -223,58 +218,55 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
|
|
||||||
def test_background_task_delete(self):
|
def test_background_task_delete(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
job = queue.enqueue(test_job_default)
|
job = queue.enqueue(self.dummy_job_default)
|
||||||
queue_index = QUEUES_MAP['default']
|
|
||||||
|
|
||||||
response = self.client.post(reverse('core:background_task_delete', args=[job.id]), {'confirm': True})
|
response = self.client.post(reverse('core:background_task_delete', args=[job.id]), {'confirm': True})
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
self.assertFalse(RQ_Job.exists(job.id, connection=queue.connection))
|
self.assertFalse(RQ_Job.exists(job.id, connection=queue.connection))
|
||||||
self.assertNotIn(job.id, queue.job_ids)
|
self.assertNotIn(job.id, queue.job_ids)
|
||||||
|
|
||||||
def test_background_task_requeue(self):
|
def test_background_task_requeue(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
queue_index = QUEUES_MAP['default']
|
|
||||||
|
|
||||||
job = queue.enqueue(test_failing_job)
|
# Enqueue & run a job that will fail
|
||||||
|
job = queue.enqueue(self.dummy_job_failing)
|
||||||
# do those jobs = fail them
|
|
||||||
worker = get_worker('default')
|
worker = get_worker('default')
|
||||||
worker.work(burst=True)
|
worker.work(burst=True)
|
||||||
|
|
||||||
self.assertTrue(job.is_failed)
|
self.assertTrue(job.is_failed)
|
||||||
|
|
||||||
# renqueue failed jobs from failed queue
|
# Re-enqueue the failed job and check that its status has been reset
|
||||||
self.client.get(reverse('core:background_task_requeue', args=[job.id]))
|
response = self.client.get(reverse('core:background_task_requeue', args=[job.id]))
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
self.assertFalse(job.is_failed)
|
self.assertFalse(job.is_failed)
|
||||||
|
|
||||||
def test_background_task_enqueue(self):
|
def test_background_task_enqueue(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
queue_index = QUEUES_MAP['default']
|
|
||||||
|
|
||||||
# enqueue some jobs that depends on other
|
# Enqueue some jobs that each depends on its predecessor
|
||||||
previous_job = None
|
job = previous_job = None
|
||||||
for _ in range(0, 3):
|
for _ in range(0, 3):
|
||||||
job = queue.enqueue(test_job_default, depends_on=previous_job)
|
job = queue.enqueue(self.dummy_job_default, depends_on=previous_job)
|
||||||
previous_job = job
|
previous_job = job
|
||||||
|
|
||||||
# This job is deferred
|
# Check that the last job to be enqueued has a status of deferred
|
||||||
last_job = job
|
self.assertIsNotNone(job)
|
||||||
self.assertEqual(last_job.get_status(), JobStatus.DEFERRED)
|
self.assertEqual(job.get_status(), JobStatus.DEFERRED)
|
||||||
self.assertIsNone(last_job.enqueued_at)
|
self.assertIsNone(job.enqueued_at)
|
||||||
|
|
||||||
# We want to force-enqueue this job
|
# Force-enqueue the deferred job
|
||||||
self.client.get(reverse('core:background_task_enqueue', args=[last_job.id]))
|
response = self.client.get(reverse('core:background_task_enqueue', args=[job.id]))
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
|
|
||||||
# Check that job is updated correctly
|
# Check that job's status is updated correctly
|
||||||
last_job = queue.fetch_job(last_job.id)
|
job = queue.fetch_job(job.id)
|
||||||
self.assertEqual(last_job.get_status(), JobStatus.QUEUED)
|
self.assertEqual(job.get_status(), JobStatus.QUEUED)
|
||||||
self.assertIsNotNone(last_job.enqueued_at)
|
self.assertIsNotNone(job.enqueued_at)
|
||||||
|
|
||||||
def test_background_task_stop(self):
|
def test_background_task_stop(self):
|
||||||
queue = get_queue('default')
|
queue = get_queue('default')
|
||||||
queue_index = QUEUES_MAP['default']
|
|
||||||
|
|
||||||
worker = get_worker('default')
|
worker = get_worker('default')
|
||||||
job = queue.enqueue(test_job_default)
|
job = queue.enqueue(self.dummy_job_default)
|
||||||
worker.prepare_job_execution(job)
|
worker.prepare_job_execution(job)
|
||||||
|
|
||||||
self.assertEqual(job.get_status(), JobStatus.STARTED)
|
self.assertEqual(job.get_status(), JobStatus.STARTED)
|
||||||
@ -282,7 +274,8 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
# Stop those jobs using the view
|
# Stop those jobs using the view
|
||||||
started_job_registry = StartedJobRegistry(queue.name, connection=queue.connection)
|
started_job_registry = StartedJobRegistry(queue.name, connection=queue.connection)
|
||||||
self.assertEqual(len(started_job_registry), 1)
|
self.assertEqual(len(started_job_registry), 1)
|
||||||
self.client.get(reverse('core:background_task_stop', args=[job.id]))
|
response = self.client.get(reverse('core:background_task_stop', args=[job.id]))
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
worker.monitor_work_horse(job, queue) # Sets the job as Failed and removes from Started
|
worker.monitor_work_horse(job, queue) # Sets the job as Failed and removes from Started
|
||||||
self.assertEqual(len(started_job_registry), 0)
|
self.assertEqual(len(started_job_registry), 0)
|
||||||
|
|
||||||
@ -299,6 +292,7 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
|
|
||||||
queue_index = QUEUES_MAP['default']
|
queue_index = QUEUES_MAP['default']
|
||||||
response = self.client.get(reverse('core:worker_list', args=[queue_index]))
|
response = self.client.get(reverse('core:worker_list', args=[queue_index]))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertIn(str(worker1.name), str(response.content))
|
self.assertIn(str(worker1.name), str(response.content))
|
||||||
self.assertNotIn(str(worker2.name), str(response.content))
|
self.assertNotIn(str(worker2.name), str(response.content))
|
||||||
|
|
||||||
@ -306,8 +300,8 @@ class BackgroundTaskTestCase(TestCase):
|
|||||||
worker1 = get_worker('default', name=uuid.uuid4().hex)
|
worker1 = get_worker('default', name=uuid.uuid4().hex)
|
||||||
worker1.register_birth()
|
worker1.register_birth()
|
||||||
|
|
||||||
queue_index = QUEUES_MAP['default']
|
|
||||||
response = self.client.get(reverse('core:worker', args=[worker1.name]))
|
response = self.client.get(reverse('core:worker', args=[worker1.name]))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertIn(str(worker1.name), str(response.content))
|
self.assertIn(str(worker1.name), str(response.content))
|
||||||
self.assertIn('Birth', str(response.content))
|
self.assertIn('Birth', str(response.content))
|
||||||
self.assertIn('Total working time', str(response.content))
|
self.assertIn('Total working time', str(response.content))
|
||||||
|
Loading…
Reference in New Issue
Block a user