FreedomBox/plinth/modules/ejabberd/tests/test_turn_config.py
Sunil Mohan Adapa a579c648fd
ejabberd: Use privileged decorator for actions
Tests:

- Functional tests work (backup test intermittent failure)
- Initial setup works
  - Domain name is configured properly
- FAIL: Changing hostname works (See #2276)
- Adding a domain to the system works
- Current list of domains shown properly in app page
- Setting list of domains works
- Showing TURN configuration works
- Updating TURN configuration in coturn page works
- Enabling/disabling MAM status works
  - Configure file is updated
  - App page shows correct status

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2022-10-08 18:51:54 -04:00

95 lines
3.0 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Test module for ejabberd STUN/TURN configuration.
"""
import pathlib
import shutil
from unittest.mock import Mock, patch
import pytest
from plinth.modules import ejabberd
from plinth.modules.coturn.components import TurnConfiguration
from plinth.modules.ejabberd import privileged
managed_configuration = TurnConfiguration(
'freedombox.local', [],
'aiP02OAGyOlj6WGuCyqj7iaOsbkC7BUeKvKzhAsTZ8MEwMd3yTwpr2uvbOxgWe51')
overridden_configuration = TurnConfiguration(
'public.coturn.site', [],
'BUeKvKzhAsTZ8MEwMd3yTwpr2uvbOxgWe51aiP02OAGyOlj6WGuCyqj7iaOsbkC7')
pytestmark = pytest.mark.usefixtures('mock_privileged')
current_directory = pathlib.Path(__file__).parent
privileged_modules_to_mock = ['plinth.modules.ejabberd.privileged']
@pytest.fixture(name='conf_file')
def fixture_conf_file(tmp_path):
"""Uses a dummy configuration file."""
settings_file_name = 'ejabberd.yml'
conf_file = tmp_path / settings_file_name
conf_file.touch()
shutil.copyfile(str(current_directory / 'data' / 'ejabberd.yml.example'),
str(conf_file))
return str(conf_file)
@pytest.fixture(name='managed_file')
def fixture_managed_file(tmp_path):
"""Uses a dummy managed file."""
file_name = 'freedombox_managed_coturn'
fil = tmp_path / file_name
return str(fil)
@pytest.fixture(autouse=True)
def fixture_set_configuration_paths(conf_file, managed_file):
"""Setup configuration file paths in action module."""
privileged.EJABBERD_CONFIG = conf_file
privileged.EJABBERD_MANAGED_COTURN = managed_file
@pytest.fixture(name='test_configuration', autouse=True)
def fixture_test_configuration(conf_file):
"""Use a separate ejabberd configuration for tests.
The module state is patched to be 'up-to-date'.
"""
with patch('plinth.app.App.get') as app_get:
app = Mock()
app_get.return_value = app
app.needs_setup.return_value = False
yield
def _set_turn_configuration(config=managed_configuration, managed=True):
with patch('plinth.privileged.service.is_running', return_value=False):
ejabberd.update_turn_configuration(config, managed=managed)
def _assert_conf(expected_configuration, expected_managed):
"""Assert that ejabberd TURN configuration is as expected."""
config, managed = ejabberd.get_turn_configuration()
assert config.uris == expected_configuration.uris
assert config.shared_secret == expected_configuration.shared_secret
assert managed == expected_managed
def test_managed_turn_server_configuration():
_set_turn_configuration()
_assert_conf(managed_configuration, True)
def test_overridden_turn_server_configuration():
_set_turn_configuration(overridden_configuration, False)
_assert_conf(overridden_configuration, False)
def test_remove_turn_configuration():
_set_turn_configuration()
_set_turn_configuration(TurnConfiguration(), False)
_assert_conf(TurnConfiguration(), False)