#2084: testing webbrowser requesting database service user data via web server

This commit is contained in:
Czar Echavez
2023-11-30 16:32:31 +00:00
parent d9de57757f
commit 423436c3ad
3 changed files with 33 additions and 30 deletions

View File

@@ -73,7 +73,8 @@ class DatabaseClient(Application):
if not self.connected: if not self.connected:
return self._connect(self.server_ip_address, self.server_password) return self._connect(self.server_ip_address, self.server_password)
return False # already connected
return True
def _connect( def _connect(
self, server_ip_address: IPv4Address, password: Optional[str] = None, is_reattempt: bool = False self, server_ip_address: IPv4Address, password: Optional[str] = None, is_reattempt: bool = False

View File

@@ -164,13 +164,13 @@ def example_network() -> Network:
Should only contain the nodes and links. 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, This would act as the base network and services and applications are installed in the relevant test file,
-------------- -------------- -------------- --------------
| client_1 |----- ----| server_1 | | client_1 |----- ----| server_1 |
-------------- | -------------- ------------ -------------- | -------------- -------------- | -------------- -------------- -------------- | --------------
------| switch_1 |------| router |------| switch_2 |------ ------| switch_1 |------| router_1 |------| switch_2 |------
-------------- | -------------- ------------ -------------- | -------------- -------------- | -------------- -------------- -------------- | --------------
| client_2 |---- ----| server_2 | | client_2 |---- ----| server_2 |
-------------- -------------- -------------- --------------
""" """
network = Network() network = Network()

View File

@@ -6,7 +6,9 @@ import pytest
from primaite.simulator.network.hardware.base import Link from primaite.simulator.network.hardware.base import Link
from primaite.simulator.network.hardware.node_operating_state import NodeOperatingState 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.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.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.database_client import DatabaseClient
from primaite.simulator.system.applications.web_browser import WebBrowser from primaite.simulator.system.applications.web_browser import WebBrowser
from primaite.simulator.system.services.database.database_service import DatabaseService 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") @pytest.fixture(scope="function")
def web_client_web_server_database() -> Tuple[Computer, Server, Server]: def web_client_web_server_database(example_network) -> Tuple[Computer, Server, Server]:
# Create Computer # add rules to network router
computer: Computer = Computer( router_1: Router = example_network.get_node_by_hostname("router_1")
hostname="test_computer", router_1.acl.add_rule(
ip_address="192.168.0.1", action=ACLAction.PERMIT, src_port=Port.POSTGRES_SERVER, dst_port=Port.POSTGRES_SERVER, position=0
subnet_mask="255.255.255.0",
default_gateway="192.168.1.1",
operating_state=NodeOperatingState.ON,
) )
# 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 # Create Web Server
web_server = Server( web_server: Server = example_network.get_node_by_hostname("server_1")
hostname="web_server",
ip_address="192.168.0.2",
subnet_mask="255.255.255.0",
operating_state=NodeOperatingState.ON,
)
# Create Database Server # Create Database Server
db_server = Server( db_server = example_network.get_node_by_hostname("server_2")
hostname="db_server",
ip_address="192.168.0.3",
subnet_mask="255.255.255.0",
operating_state=NodeOperatingState.ON,
)
# Get the NICs # Get the NICs
computer_nic = computer.nics[next(iter(computer.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 # Install Web Browser on computer
computer.software_manager.install(WebBrowser) computer.software_manager.install(WebBrowser)
web_browser: WebBrowser = computer.software_manager.software.get("WebBrowser") web_browser: WebBrowser = computer.software_manager.software.get("WebBrowser")
web_browser.target_url = "http://arcd.com/users/"
web_browser.run() web_browser.run()
# Install DNS Client service on computer # 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: 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.server_ip_address = IPv4Address(db_server_nic.ip_address) # set IP address of Database Server
db_client.run() db_client.run()
assert dns_client.check_domain_exists("arcd.com")
assert db_client.connect() assert db_client.connect()
return computer, web_server, db_server 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): def test_web_client_requests_users(web_client_web_server_database):
computer, web_server, db_server = 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: WebBrowser = computer.software_manager.software.get("WebBrowser")
web_browser.get_webpage() assert web_browser.get_webpage()