UT: Add InMemoryFileRepository

This commit is contained in:
Mike Salvatore 2022-09-28 13:29:34 -04:00
parent 20d5fb3748
commit bddee026fe
2 changed files with 34 additions and 0 deletions

View File

@ -4,3 +4,4 @@ from .open_error_file_repository import OpenErrorFileRepository
from .in_memory_agent_configuration_repository import InMemoryAgentConfigurationRepository
from .in_memory_simulation_configuration import InMemorySimulationRepository
from .in_memory_credentials_repository import InMemoryCredentialsRepository
from .in_memory_file_repository import InMemoryFileRepository

View File

@ -0,0 +1,33 @@
import io
import re
from typing import BinaryIO, Dict
from common.utils.code_utils import del_key
from monkey_island.cc.repository import IFileRepository, UnknownRecordError
class InMemoryFileRepository(IFileRepository):
def __init__(self):
self._files: Dict[str, bytes] = {}
def save_file(self, unsafe_file_name: str, file_contents: BinaryIO):
self._files[unsafe_file_name] = file_contents.read()
def open_file(self, unsafe_file_name: str) -> BinaryIO:
try:
return io.BytesIO(self._files[unsafe_file_name])
except KeyError:
raise UnknownRecordError(f"Unknown file {unsafe_file_name}")
def delete_file(self, unsafe_file_name: str):
del_key(self._files, "unsafe_file_name")
def delete_files_by_regex(self, file_name_regex: re.Pattern):
self._files = {
name: contents
for name, contents in self._files.items()
if not re.match(file_name_regex, name)
}
def delete_all_files(self):
self._files = {}