87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Authentication module tests
|
|
"""
|
|
|
|
import pytest
|
|
from datetime import datetime
|
|
|
|
from doris_mcp_server.utils.security import (
|
|
AuthenticationProvider,
|
|
AuthContext,
|
|
SecurityLevel
|
|
)
|
|
|
|
|
|
class TestAuthenticationProvider:
|
|
"""Authentication provider tests"""
|
|
|
|
@pytest.fixture
|
|
def auth_provider(self, test_config):
|
|
"""Create authentication provider instance"""
|
|
return AuthenticationProvider(test_config)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_token_authentication_success(self, auth_provider):
|
|
"""Test successful token authentication"""
|
|
auth_info = {
|
|
"type": "token",
|
|
"token": "valid_token_123"
|
|
}
|
|
|
|
result = await auth_provider.authenticate(auth_info)
|
|
|
|
assert isinstance(result, AuthContext)
|
|
assert result.user_id == "test_user"
|
|
assert "data_analyst" in result.roles
|
|
assert result.security_level == SecurityLevel.INTERNAL
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_token_authentication_failure(self, auth_provider):
|
|
"""Test failed token authentication"""
|
|
auth_info = {
|
|
"type": "token",
|
|
"token": "invalid_token"
|
|
}
|
|
|
|
with pytest.raises(Exception):
|
|
await auth_provider.authenticate(auth_info)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_basic_authentication_success(self, auth_provider):
|
|
"""Test successful basic authentication"""
|
|
auth_info = {
|
|
"type": "basic",
|
|
"username": "admin",
|
|
"password": "admin123"
|
|
}
|
|
|
|
result = await auth_provider.authenticate(auth_info)
|
|
|
|
assert isinstance(result, AuthContext)
|
|
assert result.user_id == "admin_user"
|
|
assert "data_admin" in result.roles
|
|
assert result.security_level == SecurityLevel.SECRET
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_basic_authentication_failure(self, auth_provider):
|
|
"""Test failed basic authentication"""
|
|
auth_info = {
|
|
"type": "basic",
|
|
"username": "admin",
|
|
"password": "wrong_password"
|
|
}
|
|
|
|
with pytest.raises(Exception):
|
|
await auth_provider.authenticate(auth_info)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_unsupported_auth_type(self, auth_provider):
|
|
"""Test unsupported authentication type"""
|
|
auth_info = {
|
|
"type": "oauth",
|
|
"token": "oauth_token"
|
|
}
|
|
|
|
with pytest.raises(Exception):
|
|
await auth_provider.authenticate(auth_info) |