From 0b810f5d56b4ecbec614c09eef1f443ed8d6edd6 Mon Sep 17 00:00:00 2001
From: Mike Salvatore <mike.s.salvatore@gmail.com>
Date: Fri, 17 Jun 2022 08:14:35 -0400
Subject: [PATCH] Common: Add TCPScanConfigurationSchema

---
 monkey/common/configuration/__init__.py              |  2 ++
 monkey/common/configuration/agent_configuration.py   |  9 +++++++++
 .../unit_tests/common/test_agent_configuration.py    | 12 ++++++++++++
 vulture_allowlist.py                                 |  1 +
 4 files changed, 24 insertions(+)

diff --git a/monkey/common/configuration/__init__.py b/monkey/common/configuration/__init__.py
index c22370603..9b5cdfb64 100644
--- a/monkey/common/configuration/__init__.py
+++ b/monkey/common/configuration/__init__.py
@@ -9,4 +9,6 @@ from .agent_configuration import (
     ExploiterConfigurationSchema,
     ExploitationConfiguration,
     ExploitationConfigurationSchema,
+    TCPScanConfiguration,
+    TCPScanConfigurationSchema,
 )
diff --git a/monkey/common/configuration/agent_configuration.py b/monkey/common/configuration/agent_configuration.py
index 7d1f64b4c..42f7dfcac 100644
--- a/monkey/common/configuration/agent_configuration.py
+++ b/monkey/common/configuration/agent_configuration.py
@@ -105,3 +105,12 @@ class ICMPScanConfiguration:
 class TCPScanConfiguration:
     timeout_ms: int
     ports: List[int]
+
+
+class TCPScanConfigurationSchema(Schema):
+    timeout_ms = fields.Int()
+    ports = fields.List(fields.Int())
+
+    @post_load
+    def make_tcp_scan_configuration(self, data, **kwargs):
+        return TCPScanConfiguration(**data)
diff --git a/monkey/tests/unit_tests/common/test_agent_configuration.py b/monkey/tests/unit_tests/common/test_agent_configuration.py
index cee26fe5b..ad4e52790 100644
--- a/monkey/tests/unit_tests/common/test_agent_configuration.py
+++ b/monkey/tests/unit_tests/common/test_agent_configuration.py
@@ -6,6 +6,7 @@ from common.configuration import (
     ExploitationOptionsConfigurationSchema,
     ExploiterConfigurationSchema,
     PluginConfigurationSchema,
+    TCPScanConfigurationSchema,
 )
 
 
@@ -95,3 +96,14 @@ def test_exploitation_configuration():
 
     assert isinstance(config, ExploitationConfiguration)
     assert config_dict == exploitation_config
+
+
+def test_tcp_scan_configuration_schema():
+    timeout_ms = 2525
+    ports = [8080, 443]
+    schema = TCPScanConfigurationSchema()
+
+    config = schema.load({"timeout_ms": timeout_ms, "ports": ports})
+
+    assert config.timeout_ms == timeout_ms
+    assert config.ports == ports
diff --git a/vulture_allowlist.py b/vulture_allowlist.py
index bff9d7991..c38586f72 100644
--- a/vulture_allowlist.py
+++ b/vulture_allowlist.py
@@ -190,6 +190,7 @@ make_plugin_configuration  # unused method (monkey/common/configuration/agent_co
 make_custom_pba_configuration  # unused method (monkey/common/configuration/agent_configuration.py:34)
 make_exploitation_options_configuration  # unused method (monkey/common/configuration/agent_configuration.py:58)
 make_exploiter_configuration  # unused method (monkey/common/configuration/agent_configuration.py:62)
+make_tcp_scan_configuration  # unused method (monkey/common/configuration/agent_configuration.py:114)
 LINUX  # unused variable (monkey/common/operating_systems.py:5)
 WINDOWS  # unused variable (monkey/common/operating_systems.py:6)