mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-07-17 16:50:53 +00:00
Some checks failed
CI Pipeline / prepare (push) Has been cancelled
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Frontend Tests / test (push) Has been cancelled
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Has been cancelled
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
CI Pipeline / create-manifest (push) Has been cancelled
143 lines
5.2 KiB
Python
143 lines
5.2 KiB
Python
"""Tests for proxy settings defaults, serializer validation, and migration 0026."""
|
|
|
|
from importlib import import_module
|
|
from unittest.mock import patch
|
|
|
|
from django.apps import apps
|
|
from django.test import SimpleTestCase, TestCase
|
|
|
|
from apps.proxy.config import TSConfig
|
|
from core.models import CoreSettings
|
|
from core.serializers import ProxySettingsSerializer
|
|
|
|
MIGRATION_0026 = import_module("core.migrations.0026_add_channel_client_wait_period")
|
|
|
|
|
|
class TSConfigProxySettingsDefaultsTests(SimpleTestCase):
|
|
@patch.object(TSConfig, "get_proxy_settings", return_value={})
|
|
def test_channel_init_grace_period_default(self, _mock_settings):
|
|
self.assertEqual(TSConfig.get_channel_init_grace_period(), 60)
|
|
|
|
@patch.object(TSConfig, "get_proxy_settings", return_value={})
|
|
def test_channel_client_wait_period_default(self, _mock_settings):
|
|
self.assertEqual(TSConfig.get_channel_client_wait_period(), 5)
|
|
|
|
@patch.object(
|
|
TSConfig,
|
|
"get_proxy_settings",
|
|
return_value={
|
|
"channel_init_grace_period": 120,
|
|
"channel_client_wait_period": 15,
|
|
},
|
|
)
|
|
def test_settings_override_db_values(self, _mock_settings):
|
|
self.assertEqual(TSConfig.get_channel_init_grace_period(), 120)
|
|
self.assertEqual(TSConfig.get_channel_client_wait_period(), 15)
|
|
|
|
|
|
class ProxySettingsSerializerTests(SimpleTestCase):
|
|
def _valid_payload(self, **overrides):
|
|
payload = {
|
|
"buffering_timeout": 15,
|
|
"buffering_speed": 1.0,
|
|
"redis_chunk_ttl": 60,
|
|
"channel_shutdown_delay": 0,
|
|
"channel_init_grace_period": 60,
|
|
"channel_client_wait_period": 5,
|
|
"new_client_behind_seconds": 5,
|
|
}
|
|
payload.update(overrides)
|
|
return payload
|
|
|
|
def test_accepts_new_client_wait_period(self):
|
|
serializer = ProxySettingsSerializer(data=self._valid_payload())
|
|
self.assertTrue(serializer.is_valid(), serializer.errors)
|
|
self.assertEqual(serializer.validated_data["channel_client_wait_period"], 5)
|
|
|
|
def test_init_grace_period_allows_up_to_300(self):
|
|
serializer = ProxySettingsSerializer(
|
|
data=self._valid_payload(channel_init_grace_period=300)
|
|
)
|
|
self.assertTrue(serializer.is_valid(), serializer.errors)
|
|
|
|
def test_init_grace_period_rejects_above_300(self):
|
|
serializer = ProxySettingsSerializer(
|
|
data=self._valid_payload(channel_init_grace_period=301)
|
|
)
|
|
self.assertFalse(serializer.is_valid())
|
|
self.assertIn("channel_init_grace_period", serializer.errors)
|
|
|
|
|
|
class CoreSettingsProxyDefaultsTests(TestCase):
|
|
def test_get_proxy_settings_defaults_when_missing(self):
|
|
CoreSettings.objects.filter(key="proxy_settings").delete()
|
|
defaults = CoreSettings.get_proxy_settings()
|
|
self.assertEqual(defaults["channel_init_grace_period"], 60)
|
|
self.assertEqual(defaults["channel_client_wait_period"], 5)
|
|
|
|
|
|
class Migration0026ProxySettingsTests(TestCase):
|
|
def _run_migration_forward(self):
|
|
MIGRATION_0026.add_channel_client_wait_period(apps, None)
|
|
|
|
def _set_proxy_settings(self, value):
|
|
settings_obj, _ = CoreSettings.objects.get_or_create(
|
|
key="proxy_settings",
|
|
defaults={"name": "Proxy Settings", "value": value},
|
|
)
|
|
settings_obj.value = value
|
|
settings_obj.save(update_fields=["value"])
|
|
return settings_obj
|
|
|
|
def test_bumps_legacy_init_grace_and_adds_client_wait(self):
|
|
settings_obj = self._set_proxy_settings(
|
|
{
|
|
"buffering_timeout": 15,
|
|
"buffering_speed": 1.0,
|
|
"redis_chunk_ttl": 60,
|
|
"channel_shutdown_delay": 0,
|
|
"channel_init_grace_period": 5,
|
|
"new_client_behind_seconds": 5,
|
|
}
|
|
)
|
|
|
|
self._run_migration_forward()
|
|
settings_obj.refresh_from_db()
|
|
|
|
self.assertEqual(settings_obj.value["channel_init_grace_period"], 60)
|
|
self.assertEqual(settings_obj.value["channel_client_wait_period"], 5)
|
|
|
|
def test_bumps_init_grace_below_new_default(self):
|
|
settings_obj = self._set_proxy_settings(
|
|
{
|
|
"buffering_timeout": 15,
|
|
"buffering_speed": 1.0,
|
|
"redis_chunk_ttl": 60,
|
|
"channel_shutdown_delay": 0,
|
|
"channel_init_grace_period": 45,
|
|
"new_client_behind_seconds": 5,
|
|
}
|
|
)
|
|
|
|
self._run_migration_forward()
|
|
settings_obj.refresh_from_db()
|
|
|
|
self.assertEqual(settings_obj.value["channel_init_grace_period"], 60)
|
|
|
|
def test_preserves_init_grace_at_or_above_new_default(self):
|
|
settings_obj = self._set_proxy_settings(
|
|
{
|
|
"buffering_timeout": 15,
|
|
"buffering_speed": 1.0,
|
|
"redis_chunk_ttl": 60,
|
|
"channel_shutdown_delay": 0,
|
|
"channel_init_grace_period": 90,
|
|
"new_client_behind_seconds": 5,
|
|
}
|
|
)
|
|
|
|
self._run_migration_forward()
|
|
settings_obj.refresh_from_db()
|
|
|
|
self.assertEqual(settings_obj.value["channel_init_grace_period"], 90)
|
|
self.assertEqual(settings_obj.value["channel_client_wait_period"], 5)
|