virtual-deployment/virtualbox/pybox/helper/tests/test_install_vbox.py

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()