Skip to content

Commit 601b2cc

Browse files
committed
[fix] Handled device not existing case in update_config task #205
Related to #205
1 parent 0b911a6 commit 601b2cc

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

openwisp_controller/connection/tasks.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ def update_config(device_id):
1919
# (there may be multiple ones happening at the same time)
2020
time.sleep(2)
2121
# avoid repeating the operation multiple times
22-
device = Device.objects.select_related('config').get(pk=device_id)
2322
try:
23+
device = Device.objects.select_related('config').get(pk=device_id)
2424
if device.config.status == 'applied':
2525
return
26-
except ObjectDoesNotExist:
27-
logger.warning(f'Config with device id: {device_id} does not exist')
26+
except ObjectDoesNotExist as e:
27+
logger.warning(f'update_config("{device_id}") failed: {e}')
2828
return
2929
qs = device.deviceconnection_set.filter(device_id=device_id, enabled=True)
3030
conn = qs.first()

openwisp_controller/connection/tests/test_models.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import socket
2+
import uuid
23
from unittest import mock
34

45
import paramiko
@@ -354,12 +355,22 @@ def test_device_connection_set_connector(self):
354355

355356
@mock.patch('logging.Logger.warning')
356357
@mock.patch('time.sleep')
357-
def test_update_config_task_resilient_to_failure(
358-
self, mocked_sleep, mocked_warning
359-
):
358+
def test_update_config_missing_config(self, mocked_sleep, mocked_warning):
360359
pk = self._create_device().pk
361360
update_config.delay(pk)
362-
mocked_warning.assert_called_with(f'Config with device id: {pk} does not exist')
361+
mocked_warning.assert_called_with(
362+
f'update_config("{pk}") failed: Device has no config.'
363+
)
364+
mocked_sleep.assert_called_once()
365+
366+
@mock.patch('logging.Logger.warning')
367+
@mock.patch('time.sleep')
368+
def test_update_config_missing_device(self, mocked_sleep, mocked_warning):
369+
pk = uuid.uuid4()
370+
update_config.delay(pk)
371+
mocked_warning.assert_called_with(
372+
f'update_config("{pk}") failed: Device matching query does not exist.'
373+
)
363374
mocked_sleep.assert_called_once()
364375

365376

0 commit comments

Comments
 (0)