105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
"""Helper script for Robot Framework skill search tools smoke tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import shutil
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
# Ensure src is importable when run from workspace root
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
|
|
|
|
from cleveragents.skills.builtins.search_ops import register_skill_search_tools
|
|
from cleveragents.tool.registry import ToolRegistry
|
|
from cleveragents.tool.runner import ToolRunner
|
|
|
|
|
|
def _make_runner(sandbox: str) -> ToolRunner:
|
|
registry = ToolRegistry()
|
|
register_skill_search_tools(registry)
|
|
return ToolRunner(registry)
|
|
|
|
|
|
def test_listdir() -> None:
|
|
sandbox = tempfile.mkdtemp()
|
|
try:
|
|
(Path(sandbox) / "a.txt").write_text("a")
|
|
(Path(sandbox) / "b.txt").write_text("b")
|
|
runner = _make_runner(sandbox)
|
|
result = runner.execute(
|
|
"skill/list-dir",
|
|
{"path": ".", "sandbox_root": sandbox},
|
|
)
|
|
assert result.success, f"Failed: {result.error}"
|
|
assert result.output["total"] >= 2
|
|
print("skill-listdir-ok")
|
|
finally:
|
|
shutil.rmtree(sandbox, ignore_errors=True)
|
|
|
|
|
|
def test_glob() -> None:
|
|
sandbox = tempfile.mkdtemp()
|
|
try:
|
|
(Path(sandbox) / "main.py").write_text("code")
|
|
(Path(sandbox) / "test.py").write_text("test")
|
|
(Path(sandbox) / "readme.md").write_text("docs")
|
|
runner = _make_runner(sandbox)
|
|
result = runner.execute(
|
|
"skill/glob",
|
|
{"path": ".", "pattern": "*.py", "sandbox_root": sandbox},
|
|
)
|
|
assert result.success, f"Failed: {result.error}"
|
|
assert result.output["total"] == 2
|
|
print("skill-glob-ok")
|
|
finally:
|
|
shutil.rmtree(sandbox, ignore_errors=True)
|
|
|
|
|
|
def test_grep() -> None:
|
|
sandbox = tempfile.mkdtemp()
|
|
try:
|
|
(Path(sandbox) / "data.txt").write_text("needle in haystack\n")
|
|
runner = _make_runner(sandbox)
|
|
result = runner.execute(
|
|
"skill/grep",
|
|
{"path": ".", "pattern": "needle", "sandbox_root": sandbox},
|
|
)
|
|
assert result.success, f"Failed: {result.error}"
|
|
assert result.output["total"] >= 1
|
|
print("skill-grep-ok")
|
|
finally:
|
|
shutil.rmtree(sandbox, ignore_errors=True)
|
|
|
|
|
|
def test_traversal() -> None:
|
|
sandbox = tempfile.mkdtemp()
|
|
try:
|
|
runner = _make_runner(sandbox)
|
|
result = runner.execute(
|
|
"skill/list-dir",
|
|
{"path": "../../etc", "sandbox_root": sandbox},
|
|
)
|
|
assert not result.success
|
|
assert "traversal" in (result.error or "").lower()
|
|
print("skill-search-traversal-ok")
|
|
finally:
|
|
shutil.rmtree(sandbox, ignore_errors=True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
cmd = sys.argv[1] if len(sys.argv) > 1 else "listdir"
|
|
dispatch: dict[str, Any] = {
|
|
"listdir": test_listdir,
|
|
"glob": test_glob,
|
|
"grep": test_grep,
|
|
"traversal": test_traversal,
|
|
}
|
|
fn = dispatch.get(cmd)
|
|
if fn:
|
|
fn()
|
|
else:
|
|
print(f"Unknown command: {cmd}", file=sys.stderr)
|
|
sys.exit(1)
|