Files
wehub-resource-sync bcbd1bdb22
Integ / changes (push) Has been skipped
Pre-commit / pre-commit (push) Failing after 1s
CLI exit codes / changes (push) Has been skipped
Test (Install) / changes (push) Has been skipped
Test (Python) / changes (push) Has been skipped
Test (TypeScript) / changes (push) Has been skipped
CLI exit codes / cli-gate (push) Has been cancelled
Test (Install) / test-install-gate (push) Has been cancelled
Integ / integ-gate (push) Has been cancelled
Test (Python) / test-python-gate (push) Has been cancelled
Test (TypeScript) / test-typescript-gate (push) Has been cancelled
Test (Install) / python-minimal (3.12) (push) Has been cancelled
Test (Install) / python-minimal (3.11) (push) Has been cancelled
Test (Install) / python-extra (agno, mirage.agents.agno) (push) Has been cancelled
Test (Install) / python-extra (chroma, mirage.resource.chroma) (push) Has been cancelled
Test (Install) / python-extra (pdf, mirage.core.filetype.pdf) (push) Has been cancelled
Integ / integ (push) Has been cancelled
Integ / integ-database (push) Has been cancelled
Integ / integ-database-ts (push) Has been cancelled
Integ / integ-data (push) Has been cancelled
Integ / integ-ssh (push) Has been cancelled
Integ / integ-ssh-ts (push) Has been cancelled
Test (Python) / audit (push) Has been cancelled
Test (TypeScript) / test (push) Has been cancelled
Test (TypeScript) / python-fs-shim (push) Has been cancelled
CLI exit codes / Python CLI (push) Has been cancelled
CLI exit codes / TypeScript CLI (push) Has been cancelled
CLI exit codes / Cross-language snapshot interop (push) Has been cancelled
Test (Python) / test (push) Has been cancelled
Test (Python) / import-isolation (deepagents, openai, mirage.agents.openai_agents) (push) Has been cancelled
Test (Python) / import-isolation (deepagents, pydantic-ai, mirage.agents.pydantic_ai) (push) Has been cancelled
Integ / integ-ts (push) Has been cancelled
Integ / integ-fuse (push) Has been cancelled
Test (Install) / python-extra (databricks, mirage.resource.databricks_volume) (push) Has been cancelled
Test (Install) / python-extra (deepagents, mirage.agents.langchain) (push) Has been cancelled
Test (Install) / python-extra (email, mirage.resource.email) (push) Has been cancelled
Test (Install) / python-extra (fuse, mirage.fuse.mount) (push) Has been cancelled
Test (Install) / python-extra (hdf5, mirage.core.filetype.hdf5) (push) Has been cancelled
Test (Install) / python-extra (hf, mirage.resource.hf_buckets) (push) Has been cancelled
Test (Install) / python-extra (lancedb, mirage.resource.lancedb) (push) Has been cancelled
Test (Install) / python-extra (langfuse, mirage.resource.langfuse) (push) Has been cancelled
Test (Install) / python-extra (mongodb, mirage.resource.mongodb) (push) Has been cancelled
Test (Install) / python-extra (nextcloud, mirage.resource.nextcloud) (push) Has been cancelled
Test (Install) / python-extra (openai, mirage.agents.openai_agents) (push) Has been cancelled
Test (Install) / python-extra (openhands, mirage.agents.openhands, 3.12) (push) Has been cancelled
Test (Install) / python-extra (parquet, mirage.core.filetype.parquet) (push) Has been cancelled
Test (Install) / python-extra (postgres, mirage.resource.postgres) (push) Has been cancelled
Test (Install) / python-extra (pydantic-ai, mirage.agents.pydantic_ai) (push) Has been cancelled
Test (Install) / python-extra (qdrant, mirage.resource.qdrant) (push) Has been cancelled
Test (Install) / python-extra (redis, mirage.resource.redis) (push) Has been cancelled
Test (Install) / python-extra (s3, mirage.resource.s3) (push) Has been cancelled
Test (Install) / python-extra (ssh, mirage.resource.ssh) (push) Has been cancelled
Test (Install) / ts-minimal (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:44 +08:00

153 lines
5.3 KiB
Python

# ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
import asyncio
import os
import sys
import tempfile
from mirage import MountMode, Workspace
from mirage.config import load_config
from mirage.resource.disk import DiskResource
from mirage.resource.ram import RAMResource
_fail = 0
def check(label: str, cond: bool) -> None:
global _fail
if cond:
print(f"OK {label}")
else:
_fail += 1
print(f"FAIL {label}")
async def _out(ws: Workspace, cmd: str, stdin: bytes | None = None) -> str:
res = await ws.execute(cmd, stdin=stdin)
return await res.stdout_str()
async def default_root_is_ram() -> None:
ws = Workspace({"/data/": RAMResource()}, mode=MountMode.WRITE)
root = ws._registry.root_mount
check("default: root mounted at /", root is not None
and root.prefix == "/")
check("default: root backed by ram",
type(root.resource).__name__ == "RAMResource")
check("default: root is a normal mount entry", root
in ws._registry.mounts())
ls = await _out(ws, "ls /")
check("default: ls / lists child mounts", "data" in ls and "dev" in ls)
check("default: ls / hides dotfile mounts", ".bash_history" not in ls)
await ws.execute("echo scratch > /note.txt")
check("default: write to unmounted / lands on root scratch",
(await _out(ws, "cat /note.txt")).strip() == "scratch")
wc = await _out(ws, "wc -c", stdin=b"abcd")
check("default: arg-less command resolves at root", wc.strip() == "4")
await ws.close()
async def ram_root_override() -> None:
ws = Workspace({
"/": RAMResource(),
"/sub/": RAMResource()
},
mode=MountMode.WRITE)
root = ws._registry.root_mount
check(
"ram-root: / is the user mount (not duplicated)", root is not None
and root.prefix == "/"
and len([m for m in ws._registry.mounts() if m.prefix == "/"]) == 1)
await ws.execute("echo hi > /top.txt")
await ws.execute("echo deep > /sub/inner.txt")
check("ram-root: read file written at root",
(await _out(ws, "cat /top.txt")).strip() == "hi")
ls = await _out(ws, "ls /")
check("ram-root: ls / shows root file and child mount", "top.txt" in ls
and "sub" in ls)
check("ram-root: read through child mount",
(await _out(ws, "cat /sub/inner.txt")).strip() == "deep")
await ws.close()
async def disk_root_override() -> None:
with tempfile.TemporaryDirectory() as tmp:
ws = Workspace({"/": DiskResource(root=tmp)}, mode=MountMode.WRITE)
root = ws._registry.root_mount
check("disk-root: root backed by disk",
type(root.resource).__name__ == "DiskResource")
await ws.execute("echo persisted > /file.txt")
check("disk-root: read file back through root",
(await _out(ws, "cat /file.txt")).strip() == "persisted")
on_disk = os.path.join(tmp, "file.txt")
check("disk-root: write at / persisted to the real disk path",
os.path.exists(on_disk))
if os.path.exists(on_disk):
with open(on_disk) as f:
check("disk-root: on-disk content matches",
f.read().strip() == "persisted")
await ws.close()
async def yaml_controls_root() -> None:
with tempfile.TemporaryDirectory() as tmp:
cfg = load_config(
{"mounts": {
"/": {
"resource": "disk",
"config": {
"root": tmp
}
}
}})
kwargs = cfg.to_workspace_kwargs()
check("yaml: '/' mount present in resources", "/"
in kwargs["resources"])
ws = Workspace(**kwargs)
root = ws._registry.root_mount
check("yaml: root overridden to disk via config",
type(root.resource).__name__ == "DiskResource")
await ws.execute("echo fromyaml > /y.txt")
check("yaml: write at / persisted to disk",
os.path.exists(os.path.join(tmp, "y.txt")))
await ws.close()
ws = Workspace(**load_config({
"mounts": {
"/data": {
"resource": "ram"
}
}
}).to_workspace_kwargs())
root = ws._registry.root_mount
check("yaml: no '/' mount falls back to ram root",
type(root.resource).__name__ == "RAMResource")
await ws.close()
async def main() -> None:
await default_root_is_ram()
await ram_root_override()
await disk_root_override()
await yaml_controls_root()
if _fail:
print(f"\n{_fail} check(s) failed")
sys.exit(1)
print("\nroot mount OK")
if __name__ == "__main__":
asyncio.run(main())