#2248 - Removed redundant code and added more documentation from PR suggestions

This commit is contained in:
Chris McCarthy
2024-02-09 10:27:22 +00:00
parent a036160515
commit 0acd9a2938
4 changed files with 34 additions and 36 deletions

View File

@@ -21,24 +21,42 @@ NetworkInterface
Node
====
The Node class stands as a central component in ``base.py``, acting as the superclass for all network nodes within a
PrimAITE simulation.
The Node class is the most crucial component defined in base.py, serving as the parent class for all nodes within a
PrimAITE network simulation.
It encapsulates the following key attributes and behaviors:
- ``hostname`` - The node's hostname on the network.
- ``network_interfaces`` - Dict of NetworkInterface objects attached to the node.
- ``operating_state`` - The hardware state (on/off) of the node.
- ``sys_log`` - System log to record node events.
- ``session_manager`` - Manages user sessions on the node.
- ``software_manager`` - Manages software and services installed on the node.
- ``connect_nic()`` - Connects a NetworkInterface to the node.
- ``disconnect_nic()`` - Disconnects a NetworkInterface from the node.
- ``receive_frame()`` - Receive and process an incoming network frame.
- ``apply_timestep()`` - Progresses node state for a simulation timestep.
- ``power_on()`` - Powers on the node and enables NICs.
- ``power_off()`` - Powers off the node and disables NICs.
Node Attributes
---------------
- **hostname**: The network hostname of the node.
- **operating_state**: Indicates the current hardware state of the node.
- **network_interfaces**: Maps interface names to NetworkInterface objects on the node.
- **network_interface**: Maps port IDs to ``NetworkInterface`` objects on the node.
- **dns_server**: Specifies DNS servers for domain name resolution.
- **start_up_duration**: The time it takes for the node to become fully operational after being powered on.
- **shut_down_duration**: The time required for the node to properly shut down.
- **sys_log**: A system log for recording events related to the node.
- **session_manager**: Manages user sessions within the node.
- **software_manager**: Controls the installation and management of software and services on the node.
Node Behaviours/Functions
-------------------------
- **connect_nic()**: Connects a ``NetworkInterface`` to the node for network communication.
- **disconnect_nic()**: Removes a ``NetworkInterface`` from the node.
- **receive_frame()**: Handles the processing of incoming network frames.
- **apply_timestep()**: Advances the state of the node according to the simulation timestep.
- **power_on()**: Initiates the node, enabling all connected Network Interfaces and starting all Services and
Applications, taking into account the `start_up_duration`.
- **power_off()**: Stops the node's operations, adhering to the `shut_down_duration`.
- **ping()**: Sends ICMP echo requests to a specified IP address to test connectivity.
- **has_enabled_network_interface()**: Checks if the node has any network interfaces enabled, facilitating network
communication.
- **show()**: Provides a summary of the node's current state, including network interfaces, operational status, and
other key attributes.
The Node class handles installation of system software, network connectivity, frame processing, system logging, and

View File

@@ -725,10 +725,6 @@ class Node(SimComponent):
self._install_system_software()
self.set_original_state()
# def model_post_init(self, __context: Any) -> None:
# self._install_system_software()
# self.set_original_state()
def set_original_state(self):
"""Sets the original state."""
for software in self.software_manager.software.values():

View File

@@ -102,7 +102,7 @@ class PacketCapture:
def capture_outbound(self, frame): # noqa - I'll have a circular import and cant use if TYPE_CHECKING ;(
"""
Capture an inbound Frame and log it.
Capture an outbound Frame and log it.
:param frame: The PCAP frame to capture.
"""

View File

@@ -52,19 +52,3 @@ def test_handling_get_request_home_page(web_server):
response: HttpResponsePacket = web_server_service._handle_get_request(payload=payload)
assert response.status_code == HttpStatusCode.OK
# def test_process_http_request_get(web_server):
# payload = HttpRequestPacket(request_method=HttpRequestMethod.GET, request_url="http://domain.com/")
#
# web_server_service: WebServer = web_server.software_manager.software.get("WebServer")
#
# assert web_server_service._process_http_request(payload=payload) is True
#
#
# def test_process_http_request_method_not_allowed(web_server):
# payload = HttpRequestPacket(request_method=HttpRequestMethod.DELETE, request_url="http://domain.com/")
#
# web_server_service: WebServer = web_server.software_manager.software.get("WebServer")
#
# assert web_server_service._process_http_request(payload=payload) is False