3FS/tests/fuse/read_after_write.py
2025-02-27 21:53:53 +08:00

53 lines
1.8 KiB
Python

import os
import random
import argparse
import time
def generate_random_data(length):
# Generate random data of length 'length'
data = bytearray(os.urandom(length))
return data
def write_random_data(file_path, data):
# Write data to file
with open(file_path, 'wb') as file:
file.write(data)
def validate_data(file_path, data):
st = os.stat(file_path)
assert st.st_size == len(data), f'{file_path} {st.st_size} != {len(data)}'
# Open the file and validate if the data matches the original data
with open(file_path, 'rb') as file:
read_data = file.read()
assert read_data == data, f"validation failed for {file_path}"
print(f"validation success for {file_path}")
if __name__ == '__main__':
# Use argparse to accept parameters
parser = argparse.ArgumentParser(description='Generate specified number and size of random files and validate data correctness')
parser.add_argument('--filesize', type=int, default=32 * 1024 * 1024, help='Maximum size of each file in bytes, default is 32MB')
parser.add_argument('--filenum', type=int, default=10, help='Number of files to generate, default is 1000')
parser.add_argument('--seconds', type=int, default=0, help='Run seconds')
parser.add_argument('path', type=str, help='Path for test run')
args = parser.parse_args()
max_file_size = args.filesize
file_num = args.filenum
test_path = args.path
start = time.time()
i = 0
while time.time() - start < args.seconds or i < file_num:
file_size = random.randint(1, max_file_size)
data = generate_random_data(file_size)
file_name = f"file_{file_size}_{i}.bin"
file_path = os.path.join(test_path, file_name)
write_random_data(file_path, data)
validate_data(file_path, data)
i+= 1