# JTFTP - Python/AsyncIO TFTP Server # Copyright (C) 2022 Jeffrey C. Ollie # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import io import logging import os import random from jtftp.errors import AccessViolation from jtftp.filesystem import FileMode from jtftp.filesystem.inmemory import InMemoryFile logger = logging.getLogger(__name__) class TestFilesystem: async def open(self, filename: bytes, mode: FileMode) -> InMemoryFile: logger.debug(f"TestFilesystem open {filename} {mode}") match mode: case FileMode.BINARY_READ: if filename == b"random": return InMemoryFile( filename, mode, initial_bytes=os.urandom(random.randint(128, 16384)), ) raise FileNotFoundError case FileMode.BINARY_WRITE: if filename.startswith(b"config"): return InMemoryFile(filename, mode) raise AccessViolation case _: raise ValueError