1# -*- coding: utf-8 -*- 2 3# 4# Dell EMC OpenManage Ansible Modules 5# Version 3.0.0 6# Copyright (C) 2018-2020 Dell Inc. or its subsidiaries. All Rights Reserved. 7 8# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) 9# 10 11from __future__ import (absolute_import, division, print_function) 12 13__metaclass__ = type 14 15import pytest 16import json 17from ansible_collections.dellemc.openmanage.plugins.modules import idrac_bios 18from ansible_collections.dellemc.openmanage.tests.unit.plugins.modules.common import FakeAnsibleModule, Constants 19from ansible_collections.dellemc.openmanage.tests.unit.compat.mock import MagicMock, patch, Mock 20from ansible_collections.dellemc.openmanage.tests.unit.compat.mock import PropertyMock 21from io import StringIO 22from ansible.module_utils._text import to_text 23from ansible.module_utils.six.moves.urllib.error import HTTPError, URLError 24from ansible.module_utils.urls import ConnectionError, SSLValidationError 25from pytest import importorskip 26 27importorskip("omsdk.sdkfile") 28importorskip("omsdk.sdkcreds") 29 30MODULE_PATH = 'ansible_collections.dellemc.openmanage.plugins.modules.' 31 32 33class TestConfigBios(FakeAnsibleModule): 34 module = idrac_bios 35 36 @pytest.fixture 37 def idrac_configure_bios_mock(self): 38 omsdk_mock = MagicMock() 39 idrac_obj = MagicMock() 40 omsdk_mock.file_share_manager = idrac_obj 41 omsdk_mock.config_mgr = idrac_obj 42 return idrac_obj 43 44 @pytest.fixture 45 def idrac_file_manager_config_bios_mock(self, mocker): 46 try: 47 file_manager_obj = mocker.patch( 48 MODULE_PATH + 'idrac_bios.file_share_manager') 49 except AttributeError: 50 file_manager_obj = MagicMock() 51 obj = MagicMock() 52 file_manager_obj.create_share_obj.return_value = obj 53 return file_manager_obj 54 55 @pytest.fixture 56 def idrac_connection_configure_bios_mock(self, mocker, idrac_configure_bios_mock): 57 idrac_conn_class_mock = mocker.patch(MODULE_PATH + 58 'idrac_bios.iDRACConnection', 59 return_value=idrac_configure_bios_mock) 60 idrac_conn_class_mock.return_value.__enter__.return_value = idrac_configure_bios_mock 61 return idrac_configure_bios_mock 62 63 def test_main_idrac_config_bios_success_Case(self, idrac_connection_configure_bios_mock, idrac_default_args, 64 mocker, idrac_file_manager_config_bios_mock): 65 idrac_default_args.update({"share_name": "sharename"}) 66 message = {'changed': False, 'msg': {'Status': "Success", "message": "No changes found to commit!"}} 67 mocker.patch(MODULE_PATH + 68 'idrac_bios.run_server_bios_config', return_value=message) 69 result = self._run_module(idrac_default_args) 70 assert result == { 71 'msg': {'changed': False, 'msg': {'Status': 'Success', 'message': 'No changes found to commit!'}}, 72 'changed': False, 'failed': False} 73 74 @pytest.mark.parametrize("exc_type", [RuntimeError, SSLValidationError, ConnectionError, KeyError, 75 ImportError, ValueError, TypeError, HTTPError, URLError]) 76 def test_main_idrac_config_bios_exception_handling_case(self, exc_type, mocker, 77 idrac_connection_configure_bios_mock, 78 idrac_default_args, idrac_file_manager_config_bios_mock): 79 idrac_default_args.update({"share_name": "sharename"}) 80 json_str = to_text(json.dumps({"data": "out"})) 81 if exc_type not in [HTTPError, SSLValidationError]: 82 mocker.patch( 83 MODULE_PATH + 'idrac_bios.run_server_bios_config', 84 side_effect=exc_type('test')) 85 else: 86 mocker.patch( 87 MODULE_PATH + 'idrac_bios.run_server_bios_config', 88 side_effect=exc_type('http://testhost.com', 400, 'http error message', 89 {"accept-type": "application/json"}, StringIO(json_str))) 90 if not exc_type == URLError: 91 result = self._run_module_with_fail_json(idrac_default_args) 92 assert result['failed'] is True 93 else: 94 result = self._run_module(idrac_default_args) 95 assert 'msg' in result 96 97 def test_run_idrac_bios_config_success_case01(self, idrac_connection_configure_bios_mock, 98 idrac_default_args, mocker, idrac_file_manager_config_bios_mock): 99 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 100 "share_password": "sharepassword", "boot_sources": "bootsources"}) 101 message = {"changes_applicable": True, "message": "changes are applicable"} 102 mocker.patch(MODULE_PATH + 103 'idrac_bios._validate_params', return_value=(False, "message of validate params")) 104 idrac_connection_configure_bios_mock.config_mgr.is_change_applicabl.return_value = message 105 idrac_connection_configure_bios_mock.config_mgr.configure_boot_sources.return_value = message 106 f_module = self.get_module_mock(params=idrac_default_args) 107 f_module.check_mode = True 108 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 109 assert msg == {'changes_applicable': True, 'message': 'changes are applicable'} 110 111 def test_run_idrac_bios_config_success_case02(self, idrac_connection_configure_bios_mock, idrac_default_args, 112 mocker, idrac_file_manager_config_bios_mock): 113 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 114 "share_password": "sharepassword", "boot_sources": "bootsources"}) 115 message = {"changes_applicable": True, "Status": "Success", "message": "changes found to commit!"} 116 mocker.patch(MODULE_PATH + 117 'idrac_bios._validate_params', return_value=(False, "message of validate params")) 118 idrac_connection_configure_bios_mock.config_mgr.is_change_applicabl.return_value = message 119 idrac_connection_configure_bios_mock.config_mgr.configure_boot_sources.return_value = message 120 f_module = self.get_module_mock(params=idrac_default_args) 121 f_module.check_mode = False 122 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 123 assert msg == {'Status': 'Success', 124 'changes_applicable': True, 125 'message': 'changes found to commit!'} 126 127 def test_run_idrac_bios_config_success_case03(self, idrac_connection_configure_bios_mock, idrac_default_args, 128 mocker, idrac_file_manager_config_bios_mock): 129 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 130 "share_password": "sharepassword", "boot_sources": "bootsources"}) 131 message = {"changes_applicable": False, "Status": "Success", "Message": "No changes found to commit!"} 132 mocker.patch(MODULE_PATH + 133 'idrac_bios._validate_params', return_value=(False, "message of validate params")) 134 idrac_connection_configure_bios_mock.config_mgr.is_change_applicabl.return_value = message 135 idrac_connection_configure_bios_mock.config_mgr.configure_boot_sources.return_value = message 136 f_module = self.get_module_mock(params=idrac_default_args) 137 f_module.check_mode = False 138 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 139 assert msg == {'Message': 'No changes found to commit!', 140 'Status': 'Success', 141 'changes_applicable': False} 142 143 def test_run_idrac_bios_config_success_case04(self, idrac_connection_configure_bios_mock, idrac_default_args, 144 mocker, idrac_file_manager_config_bios_mock): 145 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 146 "share_password": "sharepassword", "boot_sources": "bootsources"}) 147 message = {"changes_applicable": False, "Status": "Success", "Message": "No changes found to apply."} 148 mocker.patch(MODULE_PATH + 149 'idrac_bios._validate_params', return_value=(False, "message of validate params")) 150 idrac_connection_configure_bios_mock.config_mgr.is_change_applicabl.return_value = message 151 idrac_connection_configure_bios_mock.config_mgr.configure_boot_sources.return_value = message 152 f_module = self.get_module_mock(params=idrac_default_args) 153 f_module.check_mode = False 154 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 155 assert msg == {'Message': 'No changes found to apply.', 156 'Status': 'Success', 157 'changes_applicable': False} 158 159 def test_run_idrac_bios_config_bootmode_failed_case0(self, idrac_connection_configure_bios_mock, 160 idrac_default_args, 161 mocker, idrac_file_manager_config_bios_mock): 162 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 163 "share_password": "sharepassword", "boot_sources": "bootsources"}) 164 message = {"changes_applicable": False, "Status": "failed", "Message": "No changes found to apply."} 165 mocker.patch(MODULE_PATH + 166 'idrac_bios._validate_params', return_value=(False, "message of validate params")) 167 idrac_connection_configure_bios_mock.config_mgr.is_change_applicabl.return_value = message 168 idrac_connection_configure_bios_mock.config_mgr.configure_boot_sources.return_value = message 169 f_module = self.get_module_mock(params=idrac_default_args) 170 f_module.check_mode = False 171 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 172 assert msg == {'Message': 'No changes found to apply.', 173 'Status': 'failed', 174 'changes_applicable': False} 175 176 def test_run_idrac_bios_config_errorhandle_failed_case0(self, idrac_connection_configure_bios_mock, 177 idrac_default_args, 178 mocker, idrac_file_manager_config_bios_mock): 179 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 180 "share_password": "sharepassword", "boot_sources": "bootsources"}) 181 mocker.patch(MODULE_PATH + 182 'idrac_bios._validate_params', return_value=(True, "Error occurs")) 183 f_module = self.get_module_mock(params=idrac_default_args) 184 f_module.check_mode = False 185 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 186 assert msg == idrac_connection_configure_bios_mock.config_mgr.configure_boot_sources() 187 188 def test_run_idrac_bios_config_status_failed_case01(self, idrac_connection_configure_bios_mock, idrac_default_args, 189 mocker, idrac_file_manager_config_bios_mock): 190 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 191 "share_password": "sharepassword", "boot_sources": "bootsources"}) 192 message = {'Status': 'Failed', 'Message': 'message of validate params'} 193 mocker.patch(MODULE_PATH + 194 'idrac_bios._validate_params', return_value=(True, "Error occurs")) 195 idrac_connection_configure_bios_mock.config_mgr.set_liason_share.return_value = message 196 f_module = self.get_module_mock(params=idrac_default_args) 197 f_module.check_mode = False 198 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 199 assert msg == idrac_connection_configure_bios_mock.config_mgr.configure_boot_sources() 200 201 def test_run_idrac_bios_config_status_success_case01(self, idrac_connection_configure_bios_mock, idrac_default_args, 202 mocker, idrac_file_manager_config_bios_mock): 203 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 204 "share_password": "sharepassword", "boot_sources": "bootsources", 205 "attributes": {"boot_mode": "BootMode", "nvme_mode": "NvmeMode"}}) 206 message = {'Status': 'Successs', 'Message': 'message of validate params'} 207 mocker.patch(MODULE_PATH + 208 'idrac_bios._validate_params', return_value=(False, "Error did not occurs")) 209 idrac_connection_configure_bios_mock.config_mgr.configure_bios.return_value = message 210 idrac_connection_configure_bios_mock.config_mgr.configure_boot_sources.return_value = message 211 f_module = self.get_module_mock(params=idrac_default_args) 212 f_module.check_mode = False 213 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 214 assert msg == {'Message': 'message of validate params', 'Status': 'Successs'} 215 216 def test_run_bios_config_status_boot_sources_failed_case(self, idrac_connection_configure_bios_mock, mocker, 217 idrac_default_args, idrac_file_manager_config_bios_mock): 218 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 219 "share_password": "sharepassword", "boot_sources": "bootsources", 220 "boot_mode": "Bios", 221 "nvme_mode": "Raid", 'secure_boot_mode': "AuditMode", 222 'onetime_boot_mode': "OneTimeBootSeq", 223 "attributes": {"boot_mode": "BootMode", "nvme_mode": "NvmeMode"}}) 224 message = {'Status': 'Failed', "Data": {'Message': 'message of validate params'}} 225 idrac_connection_configure_bios_mock.config_mgr.set_liason_share.return_value = message 226 f_module = self.get_module_mock(params=idrac_default_args) 227 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 228 assert msg == idrac_connection_configure_bios_mock.config_mgr.configure_boot_sources() 229 230 def test_run_bios_config_status_boot_success_case(self, idrac_connection_configure_bios_mock, mocker, 231 idrac_default_args, idrac_file_manager_config_bios_mock): 232 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 233 "share_password": "sharepassword", "boot_sources": None, "boot_mode": "Bios", 234 "nvme_mode": "NonRaid", "secure_boot_mode": "AuditMode", 235 "onetime_boot_mode": "OneTimeBootSeq", "attributes": [""], "boot_sequence": None}) 236 message = {"Status": "Success", "changes_applicable": True} 237 f_module = self.get_module_mock(params=idrac_default_args) 238 f_module.deprecate.return_value = "boot_mode, nvme_mode, secure_boot_mode, onetime_boot_mode and " \ 239 "boot_sequence options have been deprecated, and will be removed. ' \ 240 'Please use the attributes option for Bios attributes configuration instead." 241 f_module.check_mode = True 242 obj = MagicMock() 243 obj1 = MagicMock() 244 obj2 = MagicMock() 245 obj3 = MagicMock() 246 idrac_connection_configure_bios_mock.config_mgr.configure_boot_mode = obj 247 type(obj).BootModeTypes = PropertyMock(return_value="Bios") 248 idrac_connection_configure_bios_mock.config_mgr.configure_nvme_mode = obj1 249 type(obj).NvmeModeTypes = PropertyMock(return_value="NonRaid") 250 idrac_connection_configure_bios_mock.config_mgr.configure_secure_boot_mode = obj2 251 type(obj).SecureBootModeTypes = PropertyMock(return_value="AuditMode") 252 idrac_connection_configure_bios_mock.config_mgr.configure_onetime_boot_mode = obj3 253 type(obj).OneTimeBootModeTypes = PropertyMock(return_value="OneTimeBootSeq") 254 idrac_connection_configure_bios_mock.config_mgr.configure_bios.return_value = message 255 idrac_connection_configure_bios_mock.config_mgr.is_change_applicable.return_value = message 256 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 257 assert msg == {'Status': 'Success', 'changes_applicable': True} 258 259 def test_run_bios_config_status_success_changed_true_case(self, idrac_connection_configure_bios_mock, mocker, 260 idrac_default_args, idrac_file_manager_config_bios_mock): 261 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 262 "share_password": "sharepassword", "boot_sources": None, "boot_mode": "Bios", 263 "nvme_mode": "NonRaid", "secure_boot_mode": "AuditMode", 264 "onetime_boot_mode": "OneTimeBootSeq", "attributes": [""], "boot_sequence": None}) 265 message = {"Status": "Success"} 266 f_module = self.get_module_mock(params=idrac_default_args) 267 f_module.deprecate.return_value = "boot_mode, nvme_mode, secure_boot_mode, onetime_boot_mode and " \ 268 "boot_sequence options have been deprecated, and will be removed. ' \ 269 'Please use the attributes option for Bios attributes configuration instead." 270 f_module.check_mode = False 271 obj = MagicMock() 272 obj1 = MagicMock() 273 obj2 = MagicMock() 274 obj3 = MagicMock() 275 idrac_connection_configure_bios_mock.config_mgr.configure_boot_mode = obj 276 type(obj).BootModeTypes = PropertyMock(return_value="Bios") 277 idrac_connection_configure_bios_mock.config_mgr.configure_nvme_mode = obj1 278 type(obj).NvmeModeTypes = PropertyMock(return_value="NonRaid") 279 idrac_connection_configure_bios_mock.config_mgr.configure_secure_boot_mode = obj2 280 type(obj).SecureBootModeTypes = PropertyMock(return_value="AuditMode") 281 idrac_connection_configure_bios_mock.config_mgr.configure_onetime_boot_mode = obj3 282 type(obj).OneTimeBootModeTypes = PropertyMock(return_value="OneTimeBootSeq") 283 idrac_connection_configure_bios_mock.config_mgr.configure_bios.return_value = message 284 idrac_connection_configure_bios_mock.config_mgr.apply_changes.return_value = message 285 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 286 assert msg == {'Status': 'Success'} 287 288 def test_run_bios_config_status_success_changed_false_case01(self, idrac_connection_configure_bios_mock, mocker, 289 idrac_default_args, 290 idrac_file_manager_config_bios_mock): 291 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 292 "share_password": "sharepassword", "boot_sources": None, "boot_mode": "Bios", 293 "nvme_mode": "NonRaid", "secure_boot_mode": "AuditMode", 294 "onetime_boot_mode": "OneTimeBootSeq", "attributes": [""], "boot_sequence": None}) 295 message = {"Status": "Success", "Message": "No changes found to commit!"} 296 f_module = self.get_module_mock(params=idrac_default_args) 297 f_module.deprecate.return_value = "boot_mode, nvme_mode, secure_boot_mode, onetime_boot_mode and " \ 298 "boot_sequence options have been deprecated, and will be removed. ' \ 299 'Please use the attributes option for Bios attributes configuration instead." 300 f_module.check_mode = False 301 obj = MagicMock() 302 obj1 = MagicMock() 303 obj2 = MagicMock() 304 obj3 = MagicMock() 305 idrac_connection_configure_bios_mock.config_mgr.configure_boot_mode = obj 306 type(obj).BootModeTypes = PropertyMock(return_value="Bios") 307 idrac_connection_configure_bios_mock.config_mgr.configure_nvme_mode = obj1 308 type(obj).NvmeModeTypes = PropertyMock(return_value="NonRaid") 309 idrac_connection_configure_bios_mock.config_mgr.configure_secure_boot_mode = obj2 310 type(obj).SecureBootModeTypes = PropertyMock(return_value="AuditMode") 311 idrac_connection_configure_bios_mock.config_mgr.configure_onetime_boot_mode = obj3 312 type(obj).OneTimeBootModeTypes = PropertyMock(return_value="OneTimeBootSeq") 313 idrac_connection_configure_bios_mock.config_mgr.configure_bios.return_value = message 314 idrac_connection_configure_bios_mock.config_mgr.apply_changes.return_value = message 315 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 316 assert msg == {'Message': 'No changes found to commit!', 'Status': 'Success'} 317 318 def test_run_bios_config_status_success_changed_false_case02(self, idrac_connection_configure_bios_mock, mocker, 319 idrac_default_args, 320 idrac_file_manager_config_bios_mock): 321 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 322 "share_password": "sharepassword", "boot_sources": None, "boot_mode": "Bios", 323 "nvme_mode": "NonRaid", "secure_boot_mode": "AuditMode", 324 "onetime_boot_mode": "OneTimeBootSeq", "attributes": [""], "boot_sequence": None}) 325 message = {"Status": "Success", "Message": "No changes found to apply."} 326 f_module = self.get_module_mock(params=idrac_default_args) 327 f_module.deprecate.return_value = "boot_mode, nvme_mode, secure_boot_mode, onetime_boot_mode and " \ 328 "boot_sequence options have been deprecated, and will be removed. ' \ 329 'Please use the attributes option for Bios attributes configuration instead." 330 f_module.check_mode = False 331 obj = MagicMock() 332 obj1 = MagicMock() 333 obj2 = MagicMock() 334 obj3 = MagicMock() 335 idrac_connection_configure_bios_mock.config_mgr.configure_boot_mode = obj 336 type(obj).BootModeTypes = PropertyMock(return_value="Bios") 337 idrac_connection_configure_bios_mock.config_mgr.configure_nvme_mode = obj1 338 type(obj).NvmeModeTypes = PropertyMock(return_value="NonRaid") 339 idrac_connection_configure_bios_mock.config_mgr.configure_secure_boot_mode = obj2 340 type(obj).SecureBootModeTypes = PropertyMock(return_value="AuditMode") 341 idrac_connection_configure_bios_mock.config_mgr.configure_onetime_boot_mode = obj3 342 type(obj).OneTimeBootModeTypes = PropertyMock(return_value="OneTimeBootSeq") 343 idrac_connection_configure_bios_mock.config_mgr.configure_bios.return_value = message 344 idrac_connection_configure_bios_mock.config_mgr.apply_changes.return_value = message 345 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 346 assert msg == {'Message': 'No changes found to apply.', 'Status': 'Success'} 347 348 def test_run_bios_config_status_attribute_failed_error_case(self, idrac_connection_configure_bios_mock, mocker, 349 idrac_default_args, 350 idrac_file_manager_config_bios_mock): 351 idrac_default_args.update({"share_name": "sharename", "share_mnt": "mountname", "share_user": "shareuser", 352 "share_password": "sharepassword", "boot_sources": None, "boot_mode": "Bios", 353 "nvme_mode": "NonRaid", "secure_boot_mode": "AuditMode", 354 "onetime_boot_mode": "OneTimeBootSeq", "attributes": [""], "boot_sequence": None}) 355 message = {"Status": "Failed"} 356 f_module = self.get_module_mock(params=idrac_default_args, check_mode=True) 357 f_module.deprecate.return_value = "boot_mode, nvme_mode, secure_boot_mode, onetime_boot_mode and " \ 358 "boot_sequence options have been deprecated, and will be removed. ' \ 359 'Please use the attributes option for Bios attributes configuration instead." 360 obj = MagicMock() 361 obj1 = MagicMock() 362 obj2 = MagicMock() 363 obj3 = MagicMock() 364 idrac_connection_configure_bios_mock.config_mgr.configure_boot_mode = obj 365 type(obj).BootModeTypes = PropertyMock(return_value="Bios") 366 idrac_connection_configure_bios_mock.config_mgr.configure_nvme_mode = obj1 367 type(obj).NvmeModeTypes = PropertyMock(return_value="NonRaid") 368 idrac_connection_configure_bios_mock.config_mgr.configure_secure_boot_mode = obj2 369 type(obj).SecureBootModeTypes = PropertyMock(return_value="AuditMode") 370 idrac_connection_configure_bios_mock.config_mgr.configure_onetime_boot_mode = obj3 371 type(obj).OneTimeBootModeTypes = PropertyMock(return_value="OneTimeBootSeq") 372 idrac_connection_configure_bios_mock.config_mgr.configure_bios.return_value = message 373 msg = self.module.run_server_bios_config(idrac_connection_configure_bios_mock, f_module) 374 assert msg == idrac_connection_configure_bios_mock.config_mgr.is_change_applicable() 375 376 def test__validate_params_error_case(self, idrac_connection_configure_bios_mock, idrac_default_args, 377 idrac_file_manager_config_bios_mock): 378 idrac_default_args.update({}) 379 attr = {"name": "Name"} 380 msg = self.module._validate_params(attr) 381 assert msg == "attribute values must be of type: {0}. name ({1}) provided.".format(dict, str) 382 383 def test__validate_params_error_keys_case(self, idrac_connection_configure_bios_mock, idrac_default_args, 384 idrac_file_manager_config_bios_mock, mocker): 385 idrac_default_args.update({}) 386 attr = [{"name": "Name"}, {"index": "Index"}, {"enabled": "Enabled"}] 387 msg = self.module._validate_params(attr) 388 assert msg == "attribute keys must be one of the ['Name', 'Index', 'Enabled']." 389 390 def test__validate_params_check_params_case(self, idrac_connection_configure_bios_mock, mocker, 391 idrac_file_manager_config_bios_mock, idrac_default_args): 392 mocker.patch(MODULE_PATH + 393 'idrac_bios.check_params', return_value=(True, "Error occurs in check params")) 394 attr = [{"name": "name1"}, {"Index": "index1"}] 395 msg = self.module._validate_params(attr) 396 assert msg == "attribute keys must be one of the ['Name', 'Index', 'Enabled']." 397 398 def test__validate_params_empty_params_case(self, idrac_connection_configure_bios_mock, mocker, 399 idrac_file_manager_config_bios_mock, idrac_default_args): 400 mocker.patch(MODULE_PATH + 401 'idrac_bios._validate_name_index_duplication', return_value=(True, "Error occurs in " 402 "validate name")) 403 msg = self.module._validate_params([]) 404 assert msg == (True, 'Error occurs in validate name') 405 406 def test__validate_name_index_duplication_error_true_case(self, idrac_connection_configure_bios_mock, 407 idrac_default_args): 408 result = self.module._validate_name_index_duplication([{"Name": "Name1"}, {"Name": "Name1"}]) 409 assert result == 'duplicate name Name1' 410 411 def test__validate_name_index_duplication_error_false_case(self, idrac_connection_configure_bios_mock, 412 idrac_default_args): 413 result = self.module._validate_name_index_duplication([{"Name": "Name1"}, {"Name": "Name2"}]) 414 assert result == '' 415 416 def test_check_params_false_case(self, idrac_connection_configure_bios_mock, idrac_default_args): 417 result = self.module.check_params({"required": False}, [{"name": "Name1", "required": False}, 418 {"name": "Name2", "required": False}]) 419 assert result == '' 420 421 def test_check_params_required_true_case(self, idrac_connection_configure_bios_mock, idrac_default_args): 422 result = self.module.check_params({"required": True}, 423 [{"name": "Name0", "type": {}, "required": True}, 424 {"name": "Name2", "required": False}]) 425 assert result == 'Name0 is required and must be of type: {}' 426