jtftp/jtftp/filesystem/test.py
2022-07-07 12:37:41 -05:00

52 lines
1.6 KiB
Python

# 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 <https://www.gnu.org/licenses/>.
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