diff --git a/src/primaite/simulator/system/applications/database_client.py b/src/primaite/simulator/system/applications/database_client.py index 8c43c0b7..f57246fc 100644 --- a/src/primaite/simulator/system/applications/database_client.py +++ b/src/primaite/simulator/system/applications/database_client.py @@ -73,7 +73,8 @@ class DatabaseClient(Application): if not self.connected: return self._connect(self.server_ip_address, self.server_password) - return False + # already connected + return True def _connect( self, server_ip_address: IPv4Address, password: Optional[str] = None, is_reattempt: bool = False diff --git a/tests/conftest.py b/tests/conftest.py index c81e4b98..1ab07dd8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -164,13 +164,13 @@ def example_network() -> Network: Should only contain the nodes and links. This would act as the base network and services and applications are installed in the relevant test file, - -------------- -------------- - | client_1 |----- ----| server_1 | - -------------- | -------------- ------------ -------------- | -------------- - ------| switch_1 |------| router |------| switch_2 |------ - -------------- | -------------- ------------ -------------- | -------------- - | client_2 |---- ----| server_2 | - -------------- -------------- + -------------- -------------- + | client_1 |----- ----| server_1 | + -------------- | -------------- -------------- -------------- | -------------- + ------| switch_1 |------| router_1 |------| switch_2 |------ + -------------- | -------------- -------------- -------------- | -------------- + | client_2 |---- ----| server_2 | + -------------- -------------- """ network = Network() diff --git a/tests/integration_tests/system/test_web_client_server_and_database.py b/tests/integration_tests/system/test_web_client_server_and_database.py index 17458968..a4ef3d52 100644 --- a/tests/integration_tests/system/test_web_client_server_and_database.py +++ b/tests/integration_tests/system/test_web_client_server_and_database.py @@ -6,7 +6,9 @@ import pytest from primaite.simulator.network.hardware.base import Link from primaite.simulator.network.hardware.node_operating_state import NodeOperatingState from primaite.simulator.network.hardware.nodes.computer import Computer +from primaite.simulator.network.hardware.nodes.router import ACLAction, Router from primaite.simulator.network.hardware.nodes.server import Server +from primaite.simulator.network.transmission.transport_layer import Port from primaite.simulator.system.applications.database_client import DatabaseClient from primaite.simulator.system.applications.web_browser import WebBrowser from primaite.simulator.system.services.database.database_service import DatabaseService @@ -16,31 +18,30 @@ from primaite.simulator.system.services.web_server.web_server import WebServer @pytest.fixture(scope="function") -def web_client_web_server_database() -> Tuple[Computer, Server, Server]: - # Create Computer - computer: Computer = Computer( - hostname="test_computer", - ip_address="192.168.0.1", - subnet_mask="255.255.255.0", - default_gateway="192.168.1.1", - operating_state=NodeOperatingState.ON, +def web_client_web_server_database(example_network) -> Tuple[Computer, Server, Server]: + # add rules to network router + router_1: Router = example_network.get_node_by_hostname("router_1") + router_1.acl.add_rule( + action=ACLAction.PERMIT, src_port=Port.POSTGRES_SERVER, dst_port=Port.POSTGRES_SERVER, position=0 ) + # Allow DNS requests + router_1.acl.add_rule(action=ACLAction.PERMIT, src_port=Port.DNS, dst_port=Port.DNS, position=1) + + # Allow FTP requests + router_1.acl.add_rule(action=ACLAction.PERMIT, src_port=Port.FTP, dst_port=Port.FTP, position=2) + + # Open port 80 for web server + router_1.acl.add_rule(action=ACLAction.PERMIT, src_port=Port.HTTP, dst_port=Port.HTTP, position=3) + + # Create Computer + computer: Computer = example_network.get_node_by_hostname("client_1") + # Create Web Server - web_server = Server( - hostname="web_server", - ip_address="192.168.0.2", - subnet_mask="255.255.255.0", - operating_state=NodeOperatingState.ON, - ) + web_server: Server = example_network.get_node_by_hostname("server_1") # Create Database Server - db_server = Server( - hostname="db_server", - ip_address="192.168.0.3", - subnet_mask="255.255.255.0", - operating_state=NodeOperatingState.ON, - ) + db_server = example_network.get_node_by_hostname("server_2") # Get the NICs computer_nic = computer.nics[next(iter(computer.nics))] @@ -66,6 +67,7 @@ def web_client_web_server_database() -> Tuple[Computer, Server, Server]: # Install Web Browser on computer computer.software_manager.install(WebBrowser) web_browser: WebBrowser = computer.software_manager.software.get("WebBrowser") + web_browser.target_url = "http://arcd.com/users/" web_browser.run() # Install DNS Client service on computer @@ -92,15 +94,15 @@ def web_client_web_server_database() -> Tuple[Computer, Server, Server]: db_client: DatabaseClient = web_server.software_manager.software.get("DatabaseClient") db_client.server_ip_address = IPv4Address(db_server_nic.ip_address) # set IP address of Database Server db_client.run() + assert dns_client.check_domain_exists("arcd.com") assert db_client.connect() return computer, web_server, db_server -@pytest.mark.skip(reason="waiting for a way to set this up correctly") def test_web_client_requests_users(web_client_web_server_database): computer, web_server, db_server = web_client_web_server_database web_browser: WebBrowser = computer.software_manager.software.get("WebBrowser") - web_browser.get_webpage() + assert web_browser.get_webpage()