Files
bun.sh/test/cli/run/fuse-fs.py

70 lines
1.9 KiB
Python

# Basic filesystem with FUSE
# Used to ensure bun can run files mounted on FUSE
# The filesystem will appear to have `main.js` containing:
# console.log("hello world");
# and `main-symlink.js` as a symlink to `main.js`.
import fuse
import errno, stat, os
fuse.fuse_python_api = (0, 2)
script = b'console.log("hello world");\n'
class TestingFs(fuse.Fuse):
def getattr(self, path):
st = fuse.Stat()
if path == "/":
st.st_mode = stat.S_IFDIR | 0o755
st.st_nlink = 2
elif path == "/main.js":
st.st_mode = stat.S_IFREG | 0o644
st.st_nlink = 1
st.st_size = len(script)
elif path == "/main-symlink.js":
st.st_mode = stat.S_IFLNK | 0o644
st.st_nlink = 1
st.st_size = len("main.js")
else:
return -errno.ENOENT
return st
def readdir(self, path, offset):
for r in ".", "..", "main.js", "main-symlink.js":
yield fuse.Direntry(r)
def open(self, path, flags):
if path != "/main.js" and path != "/main-symlink.js":
return -errno.ENOENT
mask = os.O_RDONLY | os.O_WRONLY | os.O_RDWR
if (flags & mask) != os.O_RDONLY:
return -errno.EACCES
def read(self, path, size, offset):
if path != "/main.js":
return -errno.ENOENT
if offset < len(script):
if offset + size > len(script):
size = len(script) - offset
return script[offset : offset + size]
return b""
def readlink(self, path):
if path != "/main-symlink.js":
return -errno.ENOENT
return "main.js"
def main():
server = TestingFs(
version=fuse.__version__,
usage="\nSmall filesystem made for testing Bun's ability to run files off of FUSE",
dash_s_do="setsingle",
)
server.parse(errex=1)
server.main()
if __name__ == "__main__":
main()