Files
MineNasAI/tests/test_webtui.py

157 lines
4.5 KiB
Python
Raw Permalink Normal View History

"""Web TUI 模块测试"""
from __future__ import annotations
import time
from minenasai.webtui.auth import AuthManager, AuthToken
class TestAuthToken:
"""AuthToken 测试"""
def test_token_not_expired(self):
"""测试未过期令牌"""
token = AuthToken(
token="test",
user_id="user1",
created_at=time.time(),
expires_at=time.time() + 3600,
)
assert not token.is_expired
assert token.remaining_time > 0
def test_token_expired(self):
"""测试已过期令牌"""
token = AuthToken(
token="test",
user_id="user1",
created_at=time.time() - 7200,
expires_at=time.time() - 3600,
)
assert token.is_expired
assert token.remaining_time == 0
class TestAuthManager:
"""AuthManager 测试"""
def setup_method(self):
"""初始化"""
self.manager = AuthManager(secret_key="test-secret-key")
def test_generate_token(self):
"""测试生成令牌"""
token = self.manager.generate_token("user1")
assert token is not None
assert len(token) > 20
def test_verify_token(self):
"""测试验证令牌"""
token = self.manager.generate_token("user1")
auth_token = self.manager.verify_token(token)
assert auth_token is not None
assert auth_token.user_id == "user1"
def test_verify_invalid_token(self):
"""测试验证无效令牌"""
auth_token = self.manager.verify_token("invalid-token")
assert auth_token is None
def test_verify_expired_token(self):
"""测试验证过期令牌"""
token = self.manager.generate_token("user1", expires_in=0)
# 等待过期
time.sleep(0.1)
auth_token = self.manager.verify_token(token)
assert auth_token is None
def test_revoke_token(self):
"""测试撤销令牌"""
token = self.manager.generate_token("user1")
assert self.manager.revoke_token(token) is True
assert self.manager.verify_token(token) is None
def test_revoke_nonexistent_token(self):
"""测试撤销不存在的令牌"""
assert self.manager.revoke_token("nonexistent") is False
def test_revoke_user_tokens(self):
"""测试撤销用户所有令牌"""
self.manager.generate_token("user1")
self.manager.generate_token("user1")
self.manager.generate_token("user2")
count = self.manager.revoke_user_tokens("user1")
assert count == 2
assert self.manager.get_stats()["total_tokens"] == 1
def test_refresh_token(self):
"""测试刷新令牌"""
old_token = self.manager.generate_token("user1")
new_token = self.manager.refresh_token(old_token)
assert new_token is not None
assert new_token != old_token
assert self.manager.verify_token(old_token) is None
assert self.manager.verify_token(new_token) is not None
def test_token_metadata(self):
"""测试令牌元数据"""
metadata = {"channel": "wework", "task_id": "123"}
token = self.manager.generate_token("user1", metadata=metadata)
auth_token = self.manager.verify_token(token)
assert auth_token is not None
assert auth_token.metadata == metadata
def test_cleanup_expired(self):
"""测试清理过期令牌"""
self.manager.generate_token("user1", expires_in=0)
self.manager.generate_token("user2", expires_in=3600)
time.sleep(0.1)
count = self.manager.cleanup_expired()
assert count == 1
assert self.manager.get_stats()["total_tokens"] == 1
class TestSSHManager:
"""SSHManager 测试(不实际连接)"""
def test_import_ssh_manager(self):
"""测试导入 SSH 管理器"""
from minenasai.webtui import SSHManager, get_ssh_manager
manager = get_ssh_manager()
assert isinstance(manager, SSHManager)
def test_ssh_manager_stats(self):
"""测试 SSH 管理器统计"""
from minenasai.webtui import SSHManager
manager = SSHManager()
stats = manager.get_stats()
assert "active_sessions" in stats
assert stats["active_sessions"] == 0
class TestWebTUIServer:
"""Web TUI 服务器测试"""
def test_import_server(self):
"""测试导入服务器"""
from minenasai.webtui.server import app
assert app is not None
assert app.title == "MineNASAI Web TUI"