Merge remote-tracking branch 'devops/bugfix/episode-length-and-rewards' into feature/2085-dump_describe_state

This commit is contained in:
Chris McCarthy
2023-12-01 15:55:22 +00:00
7 changed files with 10 additions and 79 deletions

View File

@@ -1,72 +0,0 @@
from primaite.config.load import example_config_path, load
from primaite.session.session import PrimaiteSession
from primaite.simulator.system.applications.database_client import DatabaseClient
from primaite.simulator.system.applications.web_browser import WebBrowser
from primaite.simulator.system.services.dns.dns_client import DNSClient
cfg = load(example_config_path())
session = PrimaiteSession.from_config(cfg)
network = session.game.simulation.network
dc = network.get_node_by_hostname("domain_controller")
router = network.get_node_by_hostname("router_1")
client_1 = network.get_node_by_hostname("client_1")
client_2 = network.get_node_by_hostname("client_2")
switch_1 = network.get_node_by_hostname("switch_1")
switch_2 = network.get_node_by_hostname("switch_2")
web_server = network.get_node_by_hostname("web_server")
dns_server = dc.software_manager.software["DNSServer"]
dns_client: DNSClient = client_2.software_manager.software["DNSClient"]
web_db_client: DatabaseClient = web_server.software_manager.software["DatabaseClient"]
web_browser: WebBrowser = client_2.software_manager.software["WebBrowser"]
# print("before calling get webpage")
# router.acl.show()
# dns_server.show()
# client_2.arp.show()
# router.arp.show()
# print()
# print("can get webpage", client_2.software_manager.software["WebBrowser"].get_webpage())
# print("after calling get webpage")
# router.acl.show()
# dns_server.show()
# client_2.arp.show()
# router.arp.show()
# print()
# print("reset")
# print()
# print("im gonna reset")
# print()
# web_db_client.connect()
# web_db_client.run()
# web_browser.run()
# print("client_2", client_2.operating_state)
# print("web_browser", web_browser.operating_state)
# print("can get webpage", client_2.software_manager.software["WebBrowser"].get_webpage())
session.game.reset()
print("can get webpage", client_2.software_manager.software["WebBrowser"].get_webpage())
session.game.reset()
print("can get webpage", client_2.software_manager.software["WebBrowser"].get_webpage())
session.game.reset()
print("can get webpage", client_2.software_manager.software["WebBrowser"].get_webpage())
session.game.reset()
print("can get webpage", client_2.software_manager.software["WebBrowser"].get_webpage())
# print()
#
# print("before calling get webpage")
# router.acl.show()
# dns_server.show()
# client_2.arp.show()
# router.arp.show()
# print()
#
# print("can get webpage", client_2.software_manager.software["WebBrowser"].get_webpage())
# print("after calling get webpage")
# router.acl.show()
# dns_server.show()
# client_2.arp.show()
# router.arp.show()
# print()

View File

@@ -51,14 +51,13 @@ class SB3Policy(PolicyABC, identifier="SB3"):
def eval(self, n_episodes: int, deterministic: bool) -> None:
"""Evaluate the agent."""
reward_data = evaluate_policy(
_ = evaluate_policy(
self._agent,
self.session.env,
n_eval_episodes=n_episodes,
deterministic=deterministic,
return_episode_rewards=True,
)
print(reward_data)
def save(self, save_path: Path) -> None:
"""

View File

@@ -76,7 +76,7 @@ class WebBrowser(Application):
def reset_component_for_episode(self, episode: int):
"""Reset the original state of the SimComponent."""
def get_webpage(self) -> bool:
def get_webpage(self, url: Optional[str] = None) -> bool:
"""
Retrieve the webpage.
@@ -85,7 +85,7 @@ class WebBrowser(Application):
:param: url: The address of the web page the browser requests
:type: url: str
"""
url = self.target_url
url = url or self.target_url
if not self._can_perform_action():
return False

View File

@@ -56,7 +56,7 @@ class DatabaseService(Service):
def reset_component_for_episode(self, episode: int):
"""Reset the original state of the SimComponent."""
print("Resetting DatabaseService original state on node {self.software_manager.node.hostname}")
_LOGGER.debug("Resetting DatabaseService original state on node {self.software_manager.node.hostname}")
self.connections.clear()
super().reset_component_for_episode(episode)

View File

@@ -47,7 +47,6 @@ class WebServer(Service):
state["last_response_status_code"] = (
self.last_response_status_code.value if isinstance(self.last_response_status_code, HttpStatusCode) else None
)
print(state)
return state
def __init__(self, **kwargs):

View File

@@ -76,6 +76,10 @@ class TestPrimaiteSession:
with pytest.raises(pydantic.ValidationError):
session = TempPrimaiteSession.from_config(MISCONFIGURED_PATH)
@pytest.mark.skip(
reason="Currently software cannot be dynamically created/destroyed during simulation. Therefore, "
"reset doesn't implement software restore."
)
@pytest.mark.parametrize("temp_primaite_session", [[CFG_PATH]], indirect=True)
def test_session_sim_reset(self, temp_primaite_session):
with temp_primaite_session as session:

View File

@@ -27,10 +27,11 @@ def test_web_page_get_users_page_request_with_domain_name(uc2_network):
web_client: WebBrowser = client_1.software_manager.software["WebBrowser"]
web_client.run()
assert web_client.operating_state == ApplicationOperatingState.RUNNING
web_client.target_url = "http://arcd.com/users/"
assert web_client.get_webpage() is True
# latest reponse should have status code 200
# latest response should have status code 200
assert web_client.latest_response is not None
assert web_client.latest_response.status_code == HttpStatusCode.OK