mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
70 lines
1.9 KiB
Python
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()
|