aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/tests/test_roots.py
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-10-12 00:17:32 +0200
committerChristophe Besson <cbesson@gmail.com>2026-10-12 00:17:32 +0200
commit14911aae21ec4975f7a805b91e3c4867cb41974b (patch)
tree8c00230a88053905fd77938f3a9539efeb4c3094 /packages/meshbay-node/tests/test_roots.py
parentf6f107e02c7a4aa7326c9a82310a239327d81ed6 (diff)
downloadmeshbay-14911aae21ec4975f7a805b91e3c4867cb41974b.tar.gz
feat: let the operator pause and resume a root's indexing (MNP 6.2)
A whole-root walk now checks its root before every file: removed or ejected, it stops instead of reading the drive to the end; paused, it finishes from the hash cache alone. A paused root is not watched, not swept by reconcile and survives a restart (roster), its indexed files stay served. Resume runs the reconcile sweep over the root, so entries and their enrichment are kept. Signed root_pause / root_resume over MNP, loopback routes, CLI `root pause|resume`, a pause button on the indexing dock and pause/resume in the roots table of Group settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/tests/test_roots.py')
-rw-r--r--packages/meshbay-node/tests/test_roots.py13
1 files changed, 7 insertions, 6 deletions
diff --git a/packages/meshbay-node/tests/test_roots.py b/packages/meshbay-node/tests/test_roots.py
index 0fe9f03..30bbc8a 100644
--- a/packages/meshbay-node/tests/test_roots.py
+++ b/packages/meshbay-node/tests/test_roots.py
@@ -290,9 +290,9 @@ def test_describe_reports_what_a_member_needs(tmp_path):
described = roots.describe()
assert described == [
{"name": "Media", "kind": "generic", "available": True,
- "writable": True, "removable": False, "ejected": False},
+ "writable": True, "removable": False, "ejected": False, "paused": False},
{"name": "Music", "kind": "audio", "available": True,
- "writable": False, "removable": True, "ejected": False},
+ "writable": False, "removable": True, "ejected": False, "paused": False},
]
# Deliberately no paths: a member is told what exists and whether it is
# readable, not where on the operator's disk it lives.
@@ -301,15 +301,16 @@ def test_describe_reports_what_a_member_needs(tmp_path):
def test_describe_names_a_root_and_never_a_path(tmp_path):
"""
- What a member is told about a root: that it exists, and whether it is
- readable and writable. Never where on the operator's disk it lives — that
- is the operator's own view (`with_paths`), over their own channel.
+ What a member is told about a root: that it exists, whether it is
+ readable and writable, and whether its indexing is paused. Never where on
+ the operator's disk it lives — that is the operator's own view
+ (`with_paths`), over their own channel.
"""
(tmp_path / "Media").mkdir()
roots = RootSet.build([_spec(tmp_path / "Media", writable=True)])
described = roots.describe()[0]
assert set(described) == {"name", "kind", "available", "writable",
- "removable", "ejected"}
+ "removable", "ejected", "paused"}
# ── SAFE_UPLOAD_NAME ────────────────────────────────────────────────────────