#2782: added ability to create empty folders + create files with size and types + tests
This commit is contained in:
@@ -17,6 +17,7 @@ from primaite.game.agent.scripted_agents.random_agent import PeriodicAgent
|
|||||||
from primaite.game.agent.scripted_agents.tap001 import TAP001
|
from primaite.game.agent.scripted_agents.tap001 import TAP001
|
||||||
from primaite.game.science import graph_has_cycle, topological_sort
|
from primaite.game.science import graph_has_cycle, topological_sort
|
||||||
from primaite.simulator import SIM_OUTPUT
|
from primaite.simulator import SIM_OUTPUT
|
||||||
|
from primaite.simulator.file_system.file_type import FileType
|
||||||
from primaite.simulator.network.airspace import AirSpaceFrequency
|
from primaite.simulator.network.airspace import AirSpaceFrequency
|
||||||
from primaite.simulator.network.hardware.base import NetworkInterface, NodeOperatingState, UserManager
|
from primaite.simulator.network.hardware.base import NetworkInterface, NodeOperatingState, UserManager
|
||||||
from primaite.simulator.network.hardware.nodes.host.computer import Computer
|
from primaite.simulator.network.hardware.nodes.host.computer import Computer
|
||||||
@@ -331,9 +332,23 @@ class PrimaiteGame:
|
|||||||
|
|
||||||
# handle node file system
|
# handle node file system
|
||||||
if node_cfg.get("file_system") is not None and len(node_cfg.get("file_system")) > 0:
|
if node_cfg.get("file_system") is not None and len(node_cfg.get("file_system")) > 0:
|
||||||
for folder in node_cfg.get("file_system"):
|
for folder_idx, folder_obj in enumerate(node_cfg.get("file_system")):
|
||||||
for file in node_cfg["file_system"][folder]:
|
# if the folder is not a Dict, create an empty folder
|
||||||
new_node.file_system.create_file(folder_name=folder, file_name=file)
|
if not isinstance(folder_obj, Dict):
|
||||||
|
new_node.file_system.create_folder(folder_name=folder_obj)
|
||||||
|
else:
|
||||||
|
folder_name = next(iter(folder_obj))
|
||||||
|
for file_idx, file_obj in enumerate(node_cfg["file_system"][folder_idx][folder_name]):
|
||||||
|
if not isinstance(file_obj, Dict):
|
||||||
|
new_node.file_system.create_file(folder_name=folder_name, file_name=file_obj)
|
||||||
|
else:
|
||||||
|
file_name = next(iter(file_obj))
|
||||||
|
new_node.file_system.create_file(
|
||||||
|
folder_name=folder_name,
|
||||||
|
file_name=file_name,
|
||||||
|
size=file_obj[file_name].get("size", 0),
|
||||||
|
file_type=FileType[file_obj[file_name].get("type", "UNKNOWN").upper()],
|
||||||
|
)
|
||||||
|
|
||||||
if "users" in node_cfg and new_node.software_manager.software.get("UserManager"):
|
if "users" in node_cfg and new_node.software_manager.software.get("UserManager"):
|
||||||
user_manager: UserManager = new_node.software_manager.software["UserManager"] # noqa
|
user_manager: UserManager = new_node.software_manager.software["UserManager"] # noqa
|
||||||
|
|||||||
@@ -226,11 +226,14 @@ simulation:
|
|||||||
default_gateway: 192.168.10.1
|
default_gateway: 192.168.10.1
|
||||||
dns_server: 192.168.1.10
|
dns_server: 192.168.1.10
|
||||||
file_system:
|
file_system:
|
||||||
downloads:
|
- empty_folder
|
||||||
|
- downloads:
|
||||||
- "test.txt"
|
- "test.txt"
|
||||||
- "suh_con.dn"
|
- "suh_con.dn"
|
||||||
root:
|
- root:
|
||||||
- "passwords.txt"
|
- passwords:
|
||||||
|
size: 69
|
||||||
|
type: TXT
|
||||||
# pre installed services and applications
|
# pre installed services and applications
|
||||||
- hostname: client_3
|
- hostname: client_3
|
||||||
type: computer
|
type: computer
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from typing import Union
|
|||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from primaite.game.game import PrimaiteGame
|
from primaite.game.game import PrimaiteGame
|
||||||
|
from primaite.simulator.file_system.file_type import FileType
|
||||||
from tests import TEST_ASSETS_ROOT
|
from tests import TEST_ASSETS_ROOT
|
||||||
|
|
||||||
BASIC_CONFIG = TEST_ASSETS_ROOT / "configs/nodes_with_initial_files.yaml"
|
BASIC_CONFIG = TEST_ASSETS_ROOT / "configs/nodes_with_initial_files.yaml"
|
||||||
@@ -42,6 +43,22 @@ def test_node_file_system_from_config():
|
|||||||
# web files should not exist
|
# web files should not exist
|
||||||
assert client_2.file_system.get_file(folder_name="primaite", file_name="index.html") is None
|
assert client_2.file_system.get_file(folder_name="primaite", file_name="index.html") is None
|
||||||
|
|
||||||
# TODO file sizes and file types
|
empty_folder = client_2.file_system.get_folder(folder_name="empty_folder")
|
||||||
# TODO assert that files and folders created:
|
assert empty_folder
|
||||||
# TODO create empty folders
|
assert len(empty_folder.files) == 0 # should have no files
|
||||||
|
|
||||||
|
password_file = client_2.file_system.get_file(folder_name="root", file_name="passwords.txt")
|
||||||
|
assert password_file # should exist
|
||||||
|
assert password_file.file_type is FileType.TXT
|
||||||
|
assert password_file.size is 69
|
||||||
|
|
||||||
|
downloads_folder = client_2.file_system.get_folder(folder_name="downloads")
|
||||||
|
assert downloads_folder # downloads folder should exist
|
||||||
|
|
||||||
|
test_txt = downloads_folder.get_file(file_name="test.txt")
|
||||||
|
assert test_txt # test.txt should exist
|
||||||
|
assert test_txt.file_type is FileType.TXT
|
||||||
|
|
||||||
|
unknown_file_type = downloads_folder.get_file(file_name="suh_con.dn")
|
||||||
|
assert unknown_file_type # unknown_file_type should exist
|
||||||
|
assert unknown_file_type.file_type is FileType.UNKNOWN
|
||||||
|
|||||||
Reference in New Issue
Block a user