|
5 | 5 | from swapper import load_model |
6 | 6 |
|
7 | 7 | from ..signals import health_status_changed |
8 | | -from ..tasks import trigger_device_checks |
| 8 | +from ..tasks import trigger_device_checks, trigger_device_critical_checks |
9 | 9 | from ..utils import get_device_cache_key |
10 | 10 | from . import DeviceMonitoringTestCase, DeviceMonitoringTransactionTestcase |
11 | 11 |
|
12 | 12 | DeviceMonitoring = load_model('device_monitoring', 'DeviceMonitoring') |
13 | 13 | DeviceData = load_model('device_monitoring', 'DeviceData') |
14 | 14 | Device = load_model('config', 'Device') |
| 15 | +Check = load_model('check', 'Check') |
15 | 16 |
|
16 | 17 |
|
17 | 18 | class TestRecovery(DeviceMonitoringTestCase): |
@@ -57,18 +58,24 @@ def test_status_set_ok(self): |
57 | 58 | """Tests device status is set to ok if no related checks present""" |
58 | 59 | dm = self._create_device_monitoring() |
59 | 60 | dm.update_status('critical') |
60 | | - trigger_device_checks.delay(dm.device.pk) |
| 61 | + trigger_device_critical_checks.delay(dm.device.pk) |
61 | 62 | dm.refresh_from_db() |
62 | 63 | self.assertEqual(dm.status, 'ok') |
63 | 64 |
|
64 | 65 | def test_status_set_critical(self): |
65 | 66 | """Tests device status is set to critical if no related checks present and recovery=False is passed""" |
66 | 67 | dm = self._create_device_monitoring() |
67 | 68 | dm.update_status('critical') |
68 | | - trigger_device_checks.delay(dm.device.pk, recovery=False) |
| 69 | + trigger_device_critical_checks.delay(dm.device.pk, recovery=False) |
69 | 70 | dm.refresh_from_db() |
70 | 71 | self.assertEqual(dm.status, 'critical') |
71 | 72 |
|
| 73 | + @patch('openwisp_monitoring.device.tasks.trigger_device_critical_checks') |
| 74 | + def test_trigger_device_checks(self, mocked_task): |
| 75 | + dm = self._create_device_monitoring() |
| 76 | + trigger_device_checks.delay(dm.device.pk) |
| 77 | + mocked_task.assert_called_once_with(dm.device.pk, True) |
| 78 | + |
72 | 79 |
|
73 | 80 | class TestRecoveryTransaction(DeviceMonitoringTransactionTestcase): |
74 | 81 | @patch('openwisp_monitoring.device.tasks.perform_check.delay') |
@@ -111,6 +118,15 @@ def test_metrics_received_trigger_device_recovery_checks(self, mocked_task): |
111 | 118 | content_type='application/json', |
112 | 119 | ) |
113 | 120 | self.assertEqual(response.status_code, 200) |
114 | | - self.assertEqual(mocked_task.call_count, 4) |
| 121 | + critical_checks = device_monitoring.get_critical_checks() |
| 122 | + self.assertEqual(mocked_task.call_count, len(critical_checks)) |
| 123 | + # Verify that only critical checks are triggered |
| 124 | + # Get the check types from the mocked task calls |
| 125 | + triggered_check_types = list( |
| 126 | + Check.objects.filter( |
| 127 | + id__in=[call[0][0] for call in mocked_task.call_args_list] |
| 128 | + ).values_list('check_type', flat=True) |
| 129 | + ) |
| 130 | + self.assertListEqual(sorted(triggered_check_types), sorted(critical_checks)) |
115 | 131 | device_monitoring.refresh_from_db() |
116 | 132 | self.assertEqual(device_monitoring.status, 'problem') |
0 commit comments