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