summaryrefslogtreecommitdiff
path: root/ironic/tests/unit/drivers/modules/irmc/test_common.py
diff options
context:
space:
mode:
Diffstat (limited to 'ironic/tests/unit/drivers/modules/irmc/test_common.py')
-rw-r--r--ironic/tests/unit/drivers/modules/irmc/test_common.py238
1 files changed, 232 insertions, 6 deletions
diff --git a/ironic/tests/unit/drivers/modules/irmc/test_common.py b/ironic/tests/unit/drivers/modules/irmc/test_common.py
index c5c70bf95..4263351ac 100644
--- a/ironic/tests/unit/drivers/modules/irmc/test_common.py
+++ b/ironic/tests/unit/drivers/modules/irmc/test_common.py
@@ -23,8 +23,10 @@ from oslo_config import cfg
from oslo_utils import uuidutils
from ironic.common import exception
+from ironic.common import utils
from ironic.conductor import task_manager
from ironic.drivers.modules.irmc import common as irmc_common
+from ironic.drivers.modules import snmp
from ironic.tests.unit.db import base as db_base
from ironic.tests.unit.db import utils as db_utils
from ironic.tests.unit.drivers import third_party_driver_mock_specs \
@@ -55,7 +57,9 @@ class BaseIRMCTest(db_base.DbTestCase):
class IRMCValidateParametersTestCase(BaseIRMCTest):
- def test_parse_driver_info(self):
+ @mock.patch.object(utils, 'is_fips_enabled',
+ return_value=False, autospec=True)
+ def test_parse_driver_info(self, mock_check_fips):
info = irmc_common.parse_driver_info(self.node)
self.assertEqual('1.2.3.4', info['irmc_address'])
@@ -65,13 +69,81 @@ class IRMCValidateParametersTestCase(BaseIRMCTest):
self.assertEqual(80, info['irmc_port'])
self.assertEqual('digest', info['irmc_auth_method'])
self.assertEqual('ipmitool', info['irmc_sensor_method'])
- self.assertEqual('v2c', info['irmc_snmp_version'])
+ self.assertEqual(snmp.SNMP_V2C, info['irmc_snmp_version'])
self.assertEqual(161, info['irmc_snmp_port'])
self.assertEqual('public', info['irmc_snmp_community'])
self.assertFalse(info['irmc_snmp_security'])
self.assertTrue(info['irmc_verify_ca'])
- def test_parse_driver_option_default(self):
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_snmpv3_support_auth(self, mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+
+ scci_version_list = ['0.10.1', '0.11.3', '0.12.2']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ info = irmc_common.parse_driver_info(self.node)
+
+ self.assertEqual('1.2.3.4', info['irmc_address'])
+ self.assertEqual('admin0', info['irmc_username'])
+ self.assertEqual('fake0', info['irmc_password'])
+ self.assertEqual(60, info['irmc_client_timeout'])
+ self.assertEqual(80, info['irmc_port'])
+ self.assertEqual('digest', info['irmc_auth_method'])
+ self.assertEqual('ipmitool', info['irmc_sensor_method'])
+ self.assertEqual(snmp.SNMP_V3, info['irmc_snmp_version'])
+ self.assertEqual(161, info['irmc_snmp_port'])
+ self.assertEqual('public', info['irmc_snmp_community'])
+ self.assertEqual('admin0', info['irmc_snmp_user'])
+ self.assertEqual(snmp.snmp_auth_protocols['sha'],
+ info['irmc_snmp_auth_proto'])
+ self.assertEqual('valid_key', info['irmc_snmp_auth_password'])
+ self.assertEqual(snmp.snmp_priv_protocols['aes'],
+ info['irmc_snmp_priv_proto'])
+ self.assertEqual('valid_key', info['irmc_snmp_priv_password'])
+
+ @mock.patch.object(irmc_common, 'LOG', autospec=True)
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_snmpv3_not_support_auth(self, mock_scci_module,
+ mock_LOG):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+
+ scci_version_list = ['0.10.0', '0.11.0', '0.11.2',
+ '0.12.0', '0.12.1', '0.13.0']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ info = irmc_common.parse_driver_info(self.node)
+
+ self.assertEqual('1.2.3.4', info['irmc_address'])
+ self.assertEqual('admin0', info['irmc_username'])
+ self.assertEqual('fake0', info['irmc_password'])
+ self.assertEqual(60, info['irmc_client_timeout'])
+ self.assertEqual(80, info['irmc_port'])
+ self.assertEqual('digest', info['irmc_auth_method'])
+ self.assertEqual('ipmitool', info['irmc_sensor_method'])
+ self.assertEqual(snmp.SNMP_V3, info['irmc_snmp_version'])
+ self.assertEqual(161, info['irmc_snmp_port'])
+ self.assertEqual('public', info['irmc_snmp_community'])
+ self.assertEqual('admin0', info['irmc_snmp_user'])
+ self.assertEqual('admin0', info['irmc_snmp_security'])
+ self.assertNotIn('irmc_snmp_auth_proto', info)
+ self.assertNotIn('irmc_snmp_auth_password', info)
+ self.assertNotIn('irmc_snmp_priv_proto', info)
+ self.assertNotIn('irmc_snmp_priv_password', info)
+ mock_LOG.warning.assert_called_once()
+ mock_LOG.warning.reset_mock()
+
+ @mock.patch.object(utils, 'is_fips_enabled',
+ return_value=False, autospec=True)
+ def test_parse_driver_option_default(self, mock_check_fips):
self.node.driver_info = {
"irmc_address": "1.2.3.4",
"irmc_username": "admin0",
@@ -133,8 +205,16 @@ class IRMCValidateParametersTestCase(BaseIRMCTest):
self.assertRaises(exception.InvalidParameterValue,
irmc_common.parse_driver_info, self.node)
+ @mock.patch.object(utils, 'is_fips_enabled',
+ return_value=True, autospec=True)
+ def test_parse_driver_info_invalid_snmp_version_fips(self,
+ mock_check_fips):
+ self.assertRaises(exception.InvalidParameterValue,
+ irmc_common.parse_driver_info, self.node)
+ self.assertEqual(1, mock_check_fips.call_count)
+
def test_parse_driver_info_invalid_snmp_port(self):
- self.node.driver_info['irmc_snmp_port'] = '161'
+ self.node.driver_info['irmc_snmp_port'] = '161p'
self.assertRaises(exception.InvalidParameterValue,
irmc_common.parse_driver_info, self.node)
@@ -144,18 +224,164 @@ class IRMCValidateParametersTestCase(BaseIRMCTest):
self.assertRaises(exception.InvalidParameterValue,
irmc_common.parse_driver_info, self.node)
+ def test_parse_driver_info_missing_snmp_user(self):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+ self.assertRaises(exception.MissingParameterValue,
+ irmc_common.parse_driver_info, self.node)
+
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_missing_snmp_auth_password(self,
+ mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+ scci_version_list = ['0.10.1', '0.11.3', '0.12.2']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ self.assertRaises(exception.MissingParameterValue,
+ irmc_common.parse_driver_info, self.node)
+
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_missing_snmp_priv_password(self,
+ mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ scci_version_list = ['0.10.1', '0.11.3', '0.12.2']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ self.assertRaises(exception.MissingParameterValue,
+ irmc_common.parse_driver_info, self.node)
+
+ @mock.patch.object(irmc_common, 'LOG', autospec=True)
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_ignoring_snmp_security(self, mock_scci_module,
+ mock_LOG):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_security'] = 'security'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+ mock_scci_module.__version__ = '0.12.2'
+ info = irmc_common.parse_driver_info(self.node)
+ self.assertEqual('admin0', info['irmc_snmp_user'])
+ mock_LOG.warning.assert_called_once()
+ mock_LOG.warning.reset_mock
+
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_using_snmp_security_(self, mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_security'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+ mock_scci_module.__version__ = '0.12.2'
+ info = irmc_common.parse_driver_info(self.node)
+ self.assertEqual('admin0', info['irmc_snmp_user'])
+
def test_parse_driver_info_invalid_snmp_security(self):
self.node.driver_info['irmc_snmp_version'] = 'v3'
self.node.driver_info['irmc_snmp_security'] = 100
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
self.assertRaises(exception.InvalidParameterValue,
irmc_common.parse_driver_info, self.node)
- def test_parse_driver_info_empty_snmp_security(self):
+ def test_parse_driver_info_invalid_snmp_user(self):
self.node.driver_info['irmc_snmp_version'] = 'v3'
- self.node.driver_info['irmc_snmp_security'] = ''
+ self.node.driver_info['irmc_snmp_user'] = 100
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
self.assertRaises(exception.InvalidParameterValue,
irmc_common.parse_driver_info, self.node)
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_invalid_snmp_auth_password(self,
+ mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 100
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+ scci_version_list = ['0.10.1', '0.11.3', '0.12.2']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ self.assertRaises(exception.InvalidParameterValue,
+ irmc_common.parse_driver_info, self.node)
+
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_short_snmp_auth_password(self,
+ mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'short'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+ scci_version_list = ['0.10.1', '0.11.3', '0.12.2']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ self.assertRaises(exception.InvalidParameterValue,
+ irmc_common.parse_driver_info, self.node)
+
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_invalid_snmp_priv_password(self,
+ mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 100
+ scci_version_list = ['0.10.1', '0.11.3', '0.12.2']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ self.assertRaises(exception.InvalidParameterValue,
+ irmc_common.parse_driver_info, self.node)
+
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_short_snmp_priv_password(self,
+ mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'short'
+ scci_version_list = ['0.10.1', '0.11.3', '0.12.2']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ self.assertRaises(exception.InvalidParameterValue,
+ irmc_common.parse_driver_info, self.node)
+
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_invalid_snmp_auth_proto(self, mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_auth_proto'] = 'invalid'
+ scci_version_list = ['0.10.1', '0.11.3', '0.12.2']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ self.assertRaises(exception.InvalidParameterValue,
+ irmc_common.parse_driver_info, self.node)
+
+ @mock.patch.object(irmc_common, 'scci_mod', spec_set=['__version__'])
+ def test_parse_driver_info_invalid_snmp_priv_proto(self, mock_scci_module):
+ self.node.driver_info['irmc_snmp_version'] = 'v3'
+ self.node.driver_info['irmc_snmp_user'] = 'admin0'
+ self.node.driver_info['irmc_snmp_auth_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_password'] = 'valid_key'
+ self.node.driver_info['irmc_snmp_priv_proto'] = 'invalid'
+ scci_version_list = ['0.10.1', '0.11.3', '0.12.2']
+ for ver in scci_version_list:
+ with self.subTest(ver=ver):
+ mock_scci_module.__version__ = ver
+ self.assertRaises(exception.InvalidParameterValue,
+ irmc_common.parse_driver_info, self.node)
+
@mock.patch.object(os.path, 'isabs', return_value=True, autospec=True)
@mock.patch.object(os.path, 'isdir', return_value=True, autospec=True)
def test_parse_driver_info_dir_path_verify_ca(self, mock_isdir,