Daniel Caires 7b07a8a6b2 Assigned local port doesn't stop installation
Ensure that if given local port is already in use,
rather than stopping installation, the script asks
if the user would like to overwrite or no the currently
rule using the local port.

Test Plan:
PASS: User press y to override the rule
PASS: User press n or any other key to ignore the creation
of a port forwarding rule and continue installation

Story: 2005051
Task: 48091

Change-Id: Iaabf0d5b713cf6d73a9fccdcf7da6962ac5620c2
Signed-off-by: Daniel Caires <daniel.caires@encora.com>
2023-07-05 11:24:17 -03:00

129 lines
4.6 KiB
Python

"""
Unit tests related to install_vbox
"""
import unittest
from unittest.mock import patch
from install_vbox import create_port_forward
class CreateportforwardTestCase(unittest.TestCase):
"""
Class to test create_port_forward method
"""
def setUp(self):
"""
Method to set up the parameters used on the tests in this class
"""
# Set up the test parameters
self.hostname = "TestVM"
self.network = "NatNetwork"
self.local_port = "8080"
self.guest_port = "80"
self.guest_ip = "10.10.10.1"
self.rule_name = "Rule1"
@patch("helper.vboxmanage.vboxmanage_addportforward")
def test_successful_forwarding(self, mock_addport):
"""
Test create_port_forward method with successfull creation
"""
# Setup
mock_addport.return_value = True
# Run
create_port_forward(self.hostname, self.network, self.local_port, self.guest_port, self.guest_ip)
# Assert
mock_addport.assert_called_once_with('TestVM', '8080', '10.10.10.1', '80', 'NatNetwork')
@patch("helper.vboxmanage.vboxmanage_getrulename")
@patch("helper.vboxmanage.vboxmanage_addportforward")
@patch("helper.vboxmanage.vboxmanage_deleteportforward", return_value=None)
@patch('utils.install_log.LOG.info')
@patch("builtins.input")
def test_rewrite_rule(self, mock_input, mock_log, mock_deleteport, mock_addport, mock_getrule):
"""
Test create_port_forward method that fails to create rule and the user input 'y' to rewrite the existing rule
"""
# Setup
mock_input.return_value = 'y'
mock_addport.side_effect = [False, True]
mock_getrule.return_value = "Rule1"
# Run
result = create_port_forward(self.hostname, self.network, self.local_port, self.guest_port, self.guest_ip)
# Assert
mock_log.assert_any_call(
"Trying to create a port-forwarding rule with port: %s, but it is already in use with rule name: %s", "8080", "Rule1")
mock_log.assert_any_call("Rewrite rule? (y/n)")
mock_getrule.assert_called_once_with('NatNetwork', '8080')
mock_deleteport.assert_called_once_with('Rule1', 'NatNetwork')
mock_addport.assert_called_with('TestVM', '8080', '10.10.10.1', '80', 'NatNetwork')
self.assertIsNone(result)
@patch("helper.vboxmanage.vboxmanage_getrulename")
@patch("helper.vboxmanage.vboxmanage_addportforward")
@patch('utils.install_log.LOG.info')
@patch("builtins.input")
def test_dont_rewrite_rule(self, mock_input, mock_log, mock_addport, mock_getrule):
"""
Test create_port_forward method that fails to create rule and the user input 'n' to rewrite the existing rule
"""
# Setup
mock_input.return_value = 'n'
mock_addport.return_value = False
mock_getrule.return_value = "Rule1"
# Run
result = create_port_forward(self.hostname, self.network, self.local_port, self.guest_port, self.guest_ip)
# Assert
mock_log.assert_any_call(
"Trying to create a port-forwarding rule with port: %s, but it is already in use with rule name: %s", "8080", "Rule1")
mock_log.assert_any_call("Rewrite rule? (y/n)")
mock_log.assert_any_call("Ignoring the creation of the port-forward rule and continuing installation!")
mock_getrule.assert_called_once_with('NatNetwork', '8080')
mock_addport.assert_called_once_with('TestVM', '8080', '10.10.10.1', '80', 'NatNetwork')
self.assertIsNone(result)
@patch("helper.vboxmanage.vboxmanage_getrulename")
@patch("helper.vboxmanage.vboxmanage_addportforward")
@patch('utils.install_log.LOG.info')
@patch("sys.exit")
def test_norule(self, mock_exit, mock_log, mock_addport, mock_getrule):
"""
Test create_port_forward method that fails to create rule and no existing rule is found
"""
# Setup
mock_addport.return_value = False
mock_getrule.return_value = ""
mock_exit.side_effect = SystemExit(1)
# Run
with self.assertRaises(SystemExit) as cm:
create_port_forward(self.hostname, self.network, self.local_port, self.guest_port, self.guest_ip)
# Assert
self.assertEqual(cm.exception.code, 1)
mock_log.assert_any_call(
"Could not add a port-forwarding rule using port %s, and could not find any rule already using it. Check the Nat Network and/or local port.", "8080")
mock_log.assert_any_call("Aborting!")
if __name__ == '__main__':
unittest.main()