
Adjust LOG levels throughout the code. Story: 2005051 Task: 48516 Change-Id: Ie54a0d6a50c373ebc8b1d272aa5b574d5821b399 Signed-off-by: Daniel Caires <daniel.caires@encora.com>
157 lines
6.0 KiB
Python
157 lines
6.0 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("install_vbox.V_BOX_OPTIONS")
|
|
@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('utils.install_log.LOG.warning')
|
|
def test_rewrite_rule_yes_to_all(self, mock_warning, mock_info, mock_deleteport, mock_addport, mock_getrule, mock_v_box_options):
|
|
"""
|
|
Test create_port_forward method that fails to create rule and the installer was called with --y (yes to all) as an argument
|
|
"""
|
|
|
|
# Setup
|
|
mock_addport.side_effect = [False, True]
|
|
mock_getrule.return_value = "Rule1"
|
|
mock_v_box_options.y = True
|
|
|
|
# Run
|
|
result = create_port_forward(self.hostname, self.network, self.local_port, self.guest_port, self.guest_ip)
|
|
|
|
# Assert
|
|
mock_warning.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_info.assert_any_call("Rewriting portforwarding rule...")
|
|
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("install_vbox.yes_no_prompt")
|
|
@patch("helper.vboxmanage.vboxmanage_getrulename")
|
|
@patch("helper.vboxmanage.vboxmanage_addportforward")
|
|
@patch("helper.vboxmanage.vboxmanage_deleteportforward", return_value=None)
|
|
@patch('utils.install_log.LOG.warning')
|
|
def test_rewrite_rule(self, mock_log, mock_deleteport, mock_addport, mock_getrule, mock_y_n_prompt):
|
|
"""
|
|
Test create_port_forward method that fails to create rule and the user input 'y' to rewrite the existing rule
|
|
"""
|
|
|
|
# Setup
|
|
mock_addport.side_effect = [False, True]
|
|
mock_getrule.return_value = "Rule1"
|
|
mock_y_n_prompt.return_value = True
|
|
|
|
# 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_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("install_vbox.yes_no_prompt")
|
|
@patch("helper.vboxmanage.vboxmanage_getrulename")
|
|
@patch("helper.vboxmanage.vboxmanage_addportforward")
|
|
@patch('utils.install_log.LOG.info')
|
|
@patch('utils.install_log.LOG.warning')
|
|
def test_dont_rewrite_rule(self, mock_warning, mock_info, mock_addport, mock_getrule,mock_y_n_prompt):
|
|
"""
|
|
Test create_port_forward method that fails to create rule and the user input 'n' to rewrite the existing rule
|
|
"""
|
|
|
|
# Setup
|
|
mock_addport.return_value = False
|
|
mock_getrule.return_value = "Rule1"
|
|
mock_y_n_prompt.return_value = False
|
|
|
|
# Run
|
|
result = create_port_forward(self.hostname, self.network, self.local_port, self.guest_port, self.guest_ip)
|
|
|
|
# Assert
|
|
mock_warning.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_info.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.error')
|
|
@patch('utils.install_log.LOG.critical')
|
|
@patch("sys.exit")
|
|
def test_norule(self, mock_exit, mock_critical, mock_error, 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_critical.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_error.assert_any_call("Aborting!")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|