67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
"""Tests for Ray exceptions."""
|
|
import sys
|
|
from enum import Enum
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
from ray.exceptions import AuthenticationError, RayError
|
|
|
|
|
|
class FakeAuthMode(Enum):
|
|
DISABLED = 0
|
|
TOKEN = 1
|
|
|
|
|
|
class TestAuthenticationError:
|
|
"""Tests for AuthenticationError exception."""
|
|
|
|
auth_doc_url = "https://docs.ray.io/en/latest/ray-security/token-auth.html"
|
|
|
|
def test_basic_creation(self):
|
|
"""Test basic AuthenticationError creation and message format."""
|
|
error = AuthenticationError("Token is missing")
|
|
error_str = str(error)
|
|
|
|
# Original message preserved
|
|
assert "Token is missing" in error_str
|
|
# Doc URL included
|
|
assert self.auth_doc_url in error_str
|
|
|
|
def test_is_ray_error_subclass(self):
|
|
"""Test that AuthenticationError is a RayError subclass."""
|
|
error = AuthenticationError("Test")
|
|
assert isinstance(error, RayError)
|
|
|
|
@pytest.mark.parametrize(
|
|
"auth_mode,expected_note",
|
|
[
|
|
(FakeAuthMode.DISABLED, "RAY_AUTH_MODE is currently 'disabled'"),
|
|
(FakeAuthMode.TOKEN, None),
|
|
],
|
|
ids=["disabled", "token"],
|
|
)
|
|
def test_auth_mode_note_in_message(self, auth_mode, expected_note):
|
|
"""Test that error message includes auth mode note when not in token mode."""
|
|
with patch.dict(
|
|
"sys.modules",
|
|
{
|
|
"ray._raylet": MagicMock(
|
|
AuthenticationMode=FakeAuthMode,
|
|
get_authentication_mode=lambda: auth_mode,
|
|
)
|
|
},
|
|
):
|
|
error = AuthenticationError("Token is missing")
|
|
error_str = str(error)
|
|
|
|
assert "Token is missing" in error_str
|
|
if expected_note:
|
|
assert expected_note in error_str
|
|
else:
|
|
assert "RAY_AUTH_MODE is currently" not in error_str
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(pytest.main(["-v", __file__]))
|