
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>
129 lines
4.6 KiB
Python
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()
|