#2606: altered so that the request is done in file system + also completing access request

This commit is contained in:
Czar Echavez
2024-05-17 16:59:24 +01:00
parent 13fcda7a26
commit e98ae0bd09
3 changed files with 81 additions and 6 deletions

View File

@@ -63,6 +63,37 @@ class FileSystem(SimComponent):
request_type=RequestType(func=self._delete_manager),
)
self._create_manager = RequestManager()
self._create_manager.add_request(
name="file",
request_type=RequestType(
func=lambda request, context: RequestResponse.from_bool(
bool(self.create_file(folder_name=request[0], file_name=request[1]))
)
),
)
self._create_manager.add_request(
name="folder",
request_type=RequestType(
func=lambda request, context: RequestResponse.from_bool(
bool(self.create_folder(folder_name=request[0]))
)
),
)
rm.add_request(
name="create",
request_type=RequestType(func=self._create_manager),
)
rm.add_request(
name="access",
request_type=RequestType(
func=lambda request, context: RequestResponse.from_bool(
self.access_file(folder_name=request[0], file_name=request[1])
)
),
)
self._restore_manager = RequestManager()
self._restore_manager.add_request(
name="file",
@@ -494,3 +525,28 @@ class FileSystem(SimComponent):
return False
return folder.restore_file(file_name=file_name)
def access_file(self, folder_name: str, file_name: str) -> bool:
"""
Access a file.
Used by agents to simulate a file being accessed.
:param: folder_name: name of the folder where the file is stored
:type: folder_name: str
:param: file_name: name of the file to access
:type: file_name: str
"""
folder = self.get_folder(folder_name=folder_name)
if folder:
file = folder.get_file(file_name=file_name)
if file:
file.num_access += 1
return True
else:
self.sys_log.error(f"Unable to access file that does not exist. (file name: {file_name})")
return False

View File

@@ -61,12 +61,6 @@ class Folder(FileSystemItemABC):
func=lambda request, context: RequestResponse.from_bool(self.remove_file_by_name(file_name=request[0]))
),
)
rm.add_request(
name="create",
request_type=RequestType(
func=lambda request, context: RequestResponse.from_bool(self.create_file(file_name=request[0]))
),
)
self._file_request_manager = RequestManager()
rm.add_request(
name="file",

View File

@@ -15,6 +15,31 @@ from primaite.simulator.network.transmission.transport_layer import Port
from tests.conftest import TestApplication, TestService
def test_successful_node_file_system_creation_request(example_network):
"""Tests that the file system requests."""
client_1 = example_network.get_node_by_hostname("client_1")
assert client_1.file_system.get_file(folder_name="root", file_name="test.txt") is None
response = example_network.apply_request(["node", "client_1", "file_system", "create", "file", "", "test.txt"])
assert response
assert client_1.file_system.get_file(folder_name="root", file_name="test.txt")
assert client_1.file_system.get_folder(folder_name="test_folder") is None
response = example_network.apply_request(["node", "client_1", "file_system", "create", "folder", "test_folder"])
assert response
assert client_1.file_system.get_folder(folder_name="test_folder")
assert client_1.file_system.get_file(folder_name="root", file_name="test.txt").num_access == 0
response = example_network.apply_request(["node", "client_1", "file_system", "access", "root", "test.txt"])
assert response
assert client_1.file_system.get_file(folder_name="root", file_name="test.txt").num_access == 1
def test_successful_application_requests(example_network):
net = example_network