mirror of
https://github.com/maxDcb/C2TeamServer
synced 2026-06-06 16:14:27 +00:00
64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
import importlib
|
|
import os
|
|
import sys
|
|
|
|
|
|
def test_protocol_bindings_loads_importable_package_without_build_tree(monkeypatch, tmp_path):
|
|
package_dir = tmp_path / "c2client_protocol"
|
|
package_dir.mkdir(parents=True)
|
|
|
|
(package_dir / "__init__.py").write_text("", encoding="utf-8")
|
|
(package_dir / "TeamServerApi_pb2.py").write_text("VALUE = 1\n", encoding="utf-8")
|
|
(package_dir / "TeamServerApi_pb2_grpc.py").write_text(
|
|
"from . import TeamServerApi_pb2\n"
|
|
"VALUE = TeamServerApi_pb2.VALUE\n",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
monkeypatch.syspath_prepend(str(tmp_path))
|
|
monkeypatch.delenv("C2_PROTOCOL_PYTHON_ROOT", raising=False)
|
|
|
|
for module_name in (
|
|
"C2Client.protocol_bindings",
|
|
"c2client_protocol",
|
|
"c2client_protocol.TeamServerApi_pb2",
|
|
"c2client_protocol.TeamServerApi_pb2_grpc",
|
|
):
|
|
sys.modules.pop(module_name, None)
|
|
|
|
protocol_bindings = importlib.import_module("C2Client.protocol_bindings")
|
|
|
|
assert protocol_bindings.TeamServerApi_pb2.VALUE == 1
|
|
assert protocol_bindings.TeamServerApi_pb2_grpc.VALUE == 1
|
|
|
|
|
|
def test_protocol_bindings_skips_stale_generated_build(monkeypatch, tmp_path):
|
|
protocol_bindings = importlib.import_module("C2Client.protocol_bindings")
|
|
|
|
repo_root = tmp_path
|
|
proto_file = repo_root / "protocol" / "TeamServerApi.proto"
|
|
stale_root = repo_root / "build" / "generated" / "python_protocol"
|
|
fresh_root = repo_root / "buildNew" / "generated" / "python_protocol"
|
|
stale_package = stale_root / "c2client_protocol" / "TeamServerApi_pb2.py"
|
|
fresh_package = fresh_root / "c2client_protocol" / "TeamServerApi_pb2.py"
|
|
|
|
proto_file.parent.mkdir(parents=True)
|
|
stale_package.parent.mkdir(parents=True)
|
|
fresh_package.parent.mkdir(parents=True)
|
|
proto_file.write_text("proto", encoding="utf-8")
|
|
stale_package.write_text("stale", encoding="utf-8")
|
|
fresh_package.write_text("fresh", encoding="utf-8")
|
|
|
|
os.utime(proto_file, (200, 200))
|
|
os.utime(stale_package, (100, 100))
|
|
os.utime(fresh_package, (300, 300))
|
|
|
|
search_path = []
|
|
monkeypatch.setattr(protocol_bindings, "_repo_root", lambda: repo_root)
|
|
monkeypatch.setattr(protocol_bindings, "env_path", lambda _name: None)
|
|
monkeypatch.setattr(protocol_bindings.sys, "path", search_path)
|
|
|
|
protocol_bindings._ensure_protocol_package_on_path()
|
|
|
|
assert search_path == [str(fresh_root)]
|