old_console/core/tests/test_amc_services.py
2024-11-02 14:12:45 +03:00

80 lines
3.6 KiB
Python

from unittest.mock import patch
import pytest
from rest_framework.reverse import reverse
from core.services.amc_services import AMCServiceException, AMCService
def mock_subprocess(code=0, stdout=b'', stderr=b''):
class MockSubprocessRun:
def __init__(self, *args, **kwargs):
self.returncode = code
self.stdout = stdout
self.stderr = stderr
return MockSubprocessRun
class TestManageService:
@pytest.fixture(autouse=True)
def setup_tests(self, django_user_model):
self.user = django_user_model.objects.get()
def test_receive_invalid_service(self):
service_name = 'test'
with pytest.raises(AMCServiceException) as exc:
AMCService(service_name)
assert exc.value.detail['status'] == 'error'
assert exc.value.detail['detail'] == f'Unable to work with "{service_name}" service'
@patch('core.services.amc_services.subprocess.run', mock_subprocess(stdout=b'active'))
def test_get_status_service(self):
service = AMCService('nginx')
assert service.get_status() == 'active'
@patch('core.services.amc_services.subprocess.run', mock_subprocess(code=5, stderr=b'error'))
def test_unable_to_get_status_service(self):
service_name = 'nginx'
service = AMCService(service_name)
with pytest.raises(AMCServiceException) as exc:
service.get_status()
assert exc.value.detail['status'] == 'error'
assert exc.value.detail['detail'] == f"Can't get status '{service_name}': error"
@patch('core.services.amc_services.subprocess.run', mock_subprocess())
def test_reboot_service(self):
service_name = 'nginx'
service = AMCService(service_name)
assert service.reboot() == '' # it is correct stdout response
@patch('core.services.amc_services.subprocess.run', mock_subprocess(stdout=b'active'))
def test_api_get_status_service(self, api_client):
api_client.force_authenticate(self.user)
response = api_client.get(reverse('amc-status', kwargs={'service_name': 'nginx'}))
assert response.json() == {'status': 'active'}
@patch('core.services.amc_services.subprocess.run', mock_subprocess(code=1))
def test_api_get_status_service_with_error(self, api_client):
api_client.force_authenticate(self.user)
response = api_client.get(reverse('amc-status', params={'service_name': 'nginx'}))
assert response.json() == {'status': 'error', 'detail': f"Can't get status 'nginx': "}
@patch('core.services.amc_services.subprocess.run', mock_subprocess())
def test_api_reboot_service(self, api_client):
api_client.force_authenticate(self.user)
response = api_client.get(reverse('amc-reboot', kwargs={'service_name': 'nginx'}))
assert response.json() == {'status': 'ok'}
@patch('core.services.amc_services.subprocess.run', mock_subprocess(code=1))
def test_api_reboot_service_with_error(self, api_client):
api_client.force_authenticate(self.user)
response = api_client.get(reverse('amc-reboot', kwargs={'service_name': 'nginx'}))
assert response.json() == {'status': 'error', 'detail': f"Can't reboot 'nginx': "}
@patch('core.services.amc_services.subprocess.run', mock_subprocess(code=1))
def test_api_get_status_with_invalid_service(self, api_client):
api_client.force_authenticate(self.user)
response = api_client.get(reverse('amc-status', kwargs={'service_name': 'invalid'}))
assert response.json() == {'status': 'error', 'detail': f'Unable to work with "invalid" service'}