mirror of
https://github.com/deepseek-ai/3FS
synced 2025-06-26 18:16:45 +00:00
Initial commit
This commit is contained in:
65
tests/fuse/usrbio.py
Normal file
65
tests/fuse/usrbio.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import hf3fs_fuse.io as h3io
|
||||
|
||||
import numpy as np
|
||||
import os
|
||||
import sys
|
||||
import multiprocessing as mp
|
||||
import multiprocessing.shared_memory
|
||||
import time
|
||||
|
||||
fn = sys.argv[1] + '/file'
|
||||
fd = os.open(fn, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o644)
|
||||
|
||||
data = np.random.randn(200 << 20).tobytes()
|
||||
os.write(fd, data)
|
||||
os.close(fd)
|
||||
|
||||
h3mp = h3io.extract_mount_point(sys.argv[1])
|
||||
|
||||
bs = h3io.read_file(fn, hf3fs_mount_point=h3mp, priority=h3io.IorPriority.HIGH)
|
||||
assert data == bs, f'{fn} read out data not equal to those written in'
|
||||
|
||||
shm = mp.shared_memory.SharedMemory(size=10<<20, create=True)
|
||||
iov = h3io.make_iovec(shm, h3mp, 0, -1)
|
||||
shm.unlink()
|
||||
ior = h3io.make_ioring(h3mp, 100, False, 0)
|
||||
|
||||
fn = sys.argv[1] + '/file2'
|
||||
fd = os.open(fn, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o644)
|
||||
h3io.register_fd(fd)
|
||||
|
||||
shm.buf[:] = bytes(len(shm.buf))
|
||||
ior.prepare(iov[:], False, fd, 0)
|
||||
write_len = ior.submit().wait(min_results=1)[0].result
|
||||
assert write_len == len(shm.buf)
|
||||
|
||||
time.sleep(6) # After linux inode cache invalidated
|
||||
assert os.path.getsize(fn) == len(shm.buf)
|
||||
|
||||
ior.prepare(iov[:], False, fd, len(shm.buf))
|
||||
write_len = ior.submit().wait(min_results=1)[0].result
|
||||
assert write_len == len(shm.buf)
|
||||
|
||||
h3io.force_fsync(fd) # Force update length
|
||||
assert os.path.getsize(fn) == 2 * len(shm.buf)
|
||||
|
||||
h3io.deregister_fd(fd)
|
||||
os.close(fd)
|
||||
|
||||
print('usrbio read test succeeded', len(shm.buf))
|
||||
|
||||
fn = sys.argv[1] + '/file3'
|
||||
fd = os.open(fn, os.O_RDONLY | os.O_CREAT | os.O_EXCL, 0o666)
|
||||
os.close(fd)
|
||||
fd = os.open(fn, os.O_RDONLY) # No write permission
|
||||
h3io.register_fd(fd)
|
||||
erred = False
|
||||
try:
|
||||
ior.prepare(iov[:], False, fd, 0)
|
||||
except OSError as e:
|
||||
erred = True
|
||||
assert e.errno == 13, "Errno not correct" # Should raise EPERM
|
||||
assert erred, "Didn't raise EPERM"
|
||||
h3io.deregister_fd(fd)
|
||||
os.close(fd)
|
||||
print('usrbio permission test succeeded')
|
||||
Reference in New Issue
Block a user