- 50 命令:patrol/health/board/recall/poke/who/inbox/mind/message/team 等 - 异步并行 SSH (asyncio subprocess) - 命令注册表 + @command decorator + 插件扩展架构 - 环境检测 (Mac/VM/agent 身份) - JSON 输出契约 (stdout=成功, stderr=错误 code) - 权限模型 (agent 身份检测 + 环境限制) - pytest 23/23 通过 - deploy-joy.sh 全集群 16 VM 部署脚本 (含 PEP 668 兼容) - 旧 bash 版归档到 archive/commands.bash/ Closes: joy CLI 2.0 迁移
41 lines
1 KiB
Python
41 lines
1 KiB
Python
"""conftest.py — pytest fixtures"""
|
|
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
# 设置 PYTHONPATH
|
|
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
|
os.environ.setdefault("JOY_IDENTITY", "tux")
|
|
|
|
|
|
@pytest.fixture
|
|
def env():
|
|
from joy.core.env import Env
|
|
return Env()
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_ssh(monkeypatch):
|
|
"""Mock SSH 调用"""
|
|
from joy.core import ssh
|
|
|
|
class MockResult:
|
|
def __init__(self, vm, rc=0, stdout="", stderr=""):
|
|
self.vm = vm
|
|
self.rc = rc
|
|
self.stdout = stdout
|
|
self.stderr = stderr
|
|
self.timed_out = False
|
|
self.ok = rc == 0
|
|
|
|
def mock_ssh_sync(vm, command, timeout=10):
|
|
return MockResult(vm, rc=0, stdout="ok|0", stderr="")
|
|
|
|
def mock_ssh_parallel_sync(vms, command, timeout=10):
|
|
return {vm: MockResult(vm, rc=0, stdout="ok", stderr="") for vm in vms}
|
|
|
|
monkeypatch.setattr(ssh, "ssh_sync", mock_ssh_sync)
|
|
monkeypatch.setattr(ssh, "ssh_parallel_sync", mock_ssh_parallel_sync)
|