self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data["tasks"]["redis_status"], "OK")
+ def test_system_status_redis_no_credentials(self):
+ """
+ GIVEN:
+ - Redis URL with credentials
+ WHEN:
+ - The user requests the system status
+ THEN:
+ - The response contains the redis URL but no credentials
+ """
+ with override_settings(
+ _CHANNELS_REDIS_URL="redis://username:password@localhost:6379",
+ ):
+ self.client.force_login(self.user)
+ response = self.client.get(self.ENDPOINT)
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(
+ response.data["tasks"]["redis_url"],
+ "redis://localhost:6379",
+ )
+
+ def test_system_status_redis_socket(self):
+ """
+ GIVEN:
+ - Redis URL is socket
+ WHEN:
+ - The user requests the system status
+ THEN:
+ - The response contains the redis URL
+ """
+
+ with override_settings(_CHANNELS_REDIS_URL="unix:///path/to/redis.sock"):
+ self.client.force_login(self.user)
+ response = self.client.get(self.ENDPOINT)
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(
+ response.data["tasks"]["redis_url"],
+ "unix:///path/to/redis.sock",
+ )
+
@mock.patch("celery.app.control.Inspect.ping")
def test_system_status_celery_ping(self, mock_ping):
"""
from time import mktime
from unicodedata import normalize
from urllib.parse import quote
+from urllib.parse import urlparse
import pathvalidate
from django.apps import apps
media_stats = os.statvfs(settings.MEDIA_ROOT)
redis_url = settings._CHANNELS_REDIS_URL
+ redis_url_parsed = urlparse(redis_url)
+ redis_constructed_url = f"{redis_url_parsed.scheme}://{redis_url_parsed.path or redis_url_parsed.hostname}"
+ if redis_url_parsed.hostname is not None:
+ redis_constructed_url += f":{redis_url_parsed.port}"
redis_error = None
with Redis.from_url(url=redis_url) as client:
try:
},
},
"tasks": {
- "redis_url": redis_url,
+ "redis_url": redis_constructed_url,
"redis_status": redis_status,
"redis_error": redis_error,
"celery_status": celery_active,