aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/tests/conftest.py
blob: 3dc9cd9cdc6577268e767b219b1ab5878ffb9ead (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
"""Shared fixtures and helpers for node tests."""

import sys
from pathlib import Path

import pytest
from meshbay_node.roots import RootSet

# ffmpeg / ffprobe run via asyncio.create_subprocess_exec, which needs the
# ProactorEventLoop — but the repo-root conftest forces the SelectorEventLoop
# on win32 so aiortc's ICE stack works there (see devel/windows-devel.md §5).
# The two are mutually exclusive on one Windows asyncio loop; until the media
# path gets a thread-based subprocess runner, these tests can't run on win32.
needs_subprocess = pytest.mark.skipif(
    sys.platform == "win32",
    reason="ffmpeg subprocess needs ProactorEventLoop; win32 conftest forces "
           "SelectorEventLoop for aiortc",
)

# Windows-only gaps still to close (see devel/windows-devel.md §5/§6).
win32_todo = pytest.mark.skipif(
    sys.platform == "win32",
    reason="Windows behaviour not implemented yet (W3 / platform specifics)",
)


def one_root(path: Path, *, name: str = "", kind: str = "generic",
             writable: bool = True) -> RootSet:
    """
    A RootSet with a single writable root over `path`.

    The equivalent of the old `shared_dir`. Note what it implies for assertions:
    a file directly in `path` now has `entry.path == <basename of path>`, not
    `""` — every index path carries its root name, in a group with one root as
    much as in a group with five.

    Writable by default because most callers are testing something else and
    want a root an upload can reach. `writable=False` is the read-only group.
    """
    return RootSet.build([{"path": str(path), "name": name, "kind": kind,
                           "writable": writable}])