diff --git a/tests/unit_test/equipment/__init__.py b/tests/unit_test/equipment/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit_test/equipment/test_ut_equipment_equip_chassis.py b/tests/unit_test/equipment/test_ut_equipment_equip_chassis.py new file mode 100644 index 0000000..5f27798 --- /dev/null +++ b/tests/unit_test/equipment/test_ut_equipment_equip_chassis.py @@ -0,0 +1,227 @@ +import pytest +from ucsm_apis.equipment import equip_chassis +from ucsmsdk.ucshandle import UcsHandle + +handle = UcsHandle("10.10.10.10", "username", "password") + + +def test_chassis_ack_success(mocker): + mock_login = mocker.patch('ucsmsdk.ucshandle.UcsHandle.login', + autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch('ucsmsdk.ucshandle.UcsHandle.query_dn', + autospec=True) + mock_query_dn.return_value = "sys" + mock_commit = mocker.patch('ucsmsdk.ucshandle.UcsHandle.commit', + autospec=True) + mock_commit.return_value = None + mock_chassis = mocker.patch('ucsm_apis.equipment.' + 'equip_chassis.EquipmentChassis') + mock_add_mo = mocker.patch('ucsmsdk.ucshandle.UcsHandle.add_mo', + autospec=True) + mock_add_mo.return_value = None + + equip_chassis.chassis_ack(handle, id="1") + + mock_query_dn.assert_called_with(handle, "sys") + mock_chassis.assert_called_with(admin_state="acknowledged", id="1", + parent_mo_or_dn="sys") + + +def test_chassis_ack_fail_org_not_exist(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch.object(UcsHandle, 'query_dn', + autospec=True) + mock_query_dn.return_value = None + + with pytest.raises(equip_chassis.UcsOperationError): + equip_chassis.chassis_ack(handle, id="1") + + +def test_chassis_reack_success(mocker): + mock_login = mocker.patch('ucsmsdk.ucshandle.UcsHandle.login', + autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch('ucsmsdk.ucshandle.UcsHandle.query_dn', + autospec=True) + mock_query_dn.return_value = "sys" + mock_commit = mocker.patch('ucsmsdk.ucshandle.UcsHandle.commit', + autospec=True) + mock_commit.return_value = None + mock_chassis = mocker.patch('ucsm_apis.equipment.' + 'equip_chassis.EquipmentChassis') + mock_add_mo = mocker.patch('ucsmsdk.ucshandle.UcsHandle.add_mo', + autospec=True) + mock_add_mo.return_value = None + + equip_chassis.chassis_reack(handle, id="1") + + mock_query_dn.assert_called_with(handle, "sys") + mock_chassis.assert_called_with(admin_state="re-acknowledged", id="1", + parent_mo_or_dn="sys") + + +def test_chassis_reack_fail_org_not_exist(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch.object(UcsHandle, 'query_dn', + autospec=True) + mock_query_dn.return_value = None + + with pytest.raises(equip_chassis.UcsOperationError): + equip_chassis.chassis_reack(handle, id="1") + + +def test_chassis_decomm_success(mocker): + mock_login = mocker.patch('ucsmsdk.ucshandle.UcsHandle.login', + autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch('ucsmsdk.ucshandle.UcsHandle.query_dn', + autospec=True) + mock_query_dn.return_value = "sys" + mock_commit = mocker.patch('ucsmsdk.ucshandle.UcsHandle.commit', + autospec=True) + mock_commit.return_value = None + mock_chassis = mocker.patch('ucsm_apis.equipment.' + 'equip_chassis.EquipmentChassis') + mock_add_mo = mocker.patch('ucsmsdk.ucshandle.UcsHandle.add_mo', + autospec=True) + mock_add_mo.return_value = None + + equip_chassis.chassis_decomm(handle, id="1") + + mock_query_dn.assert_called_with(handle, "sys") + mock_chassis.assert_called_with(admin_state="decommission", id="1", + parent_mo_or_dn="sys") + + +def test_chassis_decomm_fail_org_not_exist(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch.object(UcsHandle, 'query_dn', + autospec=True) + mock_query_dn.return_value = None + + with pytest.raises(equip_chassis.UcsOperationError): + equip_chassis.chassis_decomm(handle, id="1") + + +def test_chassis_get_success(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch.object(UcsHandle, 'query_dn', + autospec=True) + mock_query_dn.return_value = "sys/chassis-1" + + equip_chassis.chassis_get(handle, id="1") + + mock_query_dn.assert_called_with(handle, "sys/chassis-1") + + +def test_chassis_get_fail_chassis_does_not_exist(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch.object(UcsHandle, 'query_dn', + autospec=True) + mock_query_dn.return_value = None + + with pytest.raises(equip_chassis.UcsOperationError): + equip_chassis.chassis_get(handle, id="100") + + +def test_chassis_exists_success(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch.object(UcsHandle, 'query_dn', + autospec=True) + mock_query_dn.return_value = "sys/chassis-1" + mock_check_prop = mocker.patch.object(equip_chassis.EquipmentChassis, + 'check_prop_match', autospec=True) + mock_check_prop.return_value = True + mock_get = mocker.patch.object(equip_chassis, 'chassis_get', autospec=True) + + equip_chassis.chassis_exists(handle, id="1") + + mock_get.assert_called_with(handle=handle, caller='chassis_exists', + id="1") + + +def test_chassis_exists_fail_chassis_does_not_exist(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_get = mocker.patch.object(equip_chassis, 'chassis_get', autospec=True) + mock_get.side_effect = equip_chassis.UcsOperationError("query_dn", + "chassis does" + "not exist") + + result = equip_chassis.chassis_exists(handle, id="1") + + assert result == (False, None) + + +def test_chassis_modify_success(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_get = mocker.patch.object(equip_chassis, 'chassis_get', autospec=True) + mo_mock = mocker.Mock() + mo_mock.set_prop_multiple.return_value = True + mock_get.return_value = mo_mock + mock_set_mo = mocker.patch.object(UcsHandle, 'set_mo', autospec=True) + mock_set_mo.return_value = None + mock_commit = mocker.patch.object(UcsHandle, 'commit', autospec=True) + mock_commit.return_value = None + + equip_chassis.chassis_modify(handle, id="1", + usr_lbl="test") + + mock_get.assert_called_with(handle=handle, id="1", + caller="chassis_modify") + mo_mock.set_prop_multiple.assert_called_with(usr_lbl="test") + + +def test_chassis_modify_failure_pool_nonexistent(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_get = mocker.patch.object(equip_chassis, 'chassis_get', autospec=True) + mock_get.side_effect = equip_chassis.UcsOperationError("query_dn", + "chassis does" + "not exist") + + with pytest.raises(equip_chassis.UcsOperationError): + equip_chassis.chassis_modify(handle, id="1", + usr_lbl="no aqui") + + +def test_chassis_remove_success(mocker): + mock_login = mocker.patch('ucsmsdk.ucshandle.UcsHandle.login', + autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch('ucsmsdk.ucshandle.UcsHandle.query_dn', + autospec=True) + mock_query_dn.return_value = "sys" + mock_commit = mocker.patch('ucsmsdk.ucshandle.UcsHandle.commit', + autospec=True) + mock_commit.return_value = None + mock_chassis = mocker.patch('ucsm_apis.equipment.' + 'equip_chassis.EquipmentChassis') + mock_add_mo = mocker.patch('ucsmsdk.ucshandle.UcsHandle.add_mo', + autospec=True) + mock_add_mo.return_value = None + + equip_chassis.chassis_remove(handle, id="1") + + mock_query_dn.assert_called_with(handle, "sys") + mock_chassis.assert_called_with(admin_state="remove", id="1", + parent_mo_or_dn="sys") + + +def test_chassis_remove_failure_org_nonexistent(mocker): + mock_login = mocker.patch.object(UcsHandle, 'login', autospec=True) + mock_login.return_value = True + mock_query_dn = mocker.patch.object(UcsHandle, 'query_dn', + autospec=True) + mock_query_dn.return_value = None + + with pytest.raises(equip_chassis.UcsOperationError): + equip_chassis.chassis_remove(handle, id="1") diff --git a/ucsm_apis/equipment/__init__.py b/ucsm_apis/equipment/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ucsm_apis/equipment/equip_chassis.py b/ucsm_apis/equipment/equip_chassis.py new file mode 100644 index 0000000..ff94626 --- /dev/null +++ b/ucsm_apis/equipment/equip_chassis.py @@ -0,0 +1,258 @@ +# Copyright 2017 Cisco Systems, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +This module performs operations related to chassis equipment. +""" + +from ucsmsdk.mometa.equipment.EquipmentChassis import EquipmentChassis +from ucsmsdk.ucsexception import UcsOperationError + + +def chassis_ack(handle, id=None, **kwargs): + + """ + Acknowledges chassis + + Args: + handle (UCSHandle) + id (string): Chassis ID + **kwargs: Any additional key-value pair of managed object(MO)'s + property and value, which are not part of regular args. + This should be used for future version compatibility. + + Returns: + EquipmentChassis: managed object + + Raises: + UcsOperationError: if Org_dn is not present + + Example: + chassis_ack(handle, id="1") + """ + + org_dn = "sys" + obj = handle.query_dn(org_dn) + if not obj: + raise UcsOperationError("chassis_ack", "Org {} \ + does not exist".format(org_dn)) + + mo = EquipmentChassis(parent_mo_or_dn=obj, admin_state="acknowledged", + id=id) + mo.set_prop_multiple(**kwargs) + handle.add_mo(mo, True) + handle.commit() + return mo + + +def chassis_reack(handle, id=None, **kwargs): + + """ + Re-acknowledges chassis + + Args: + handle (UCSHandle) + id (string): Chassis ID + **kwargs: Any additional key-value pair of managed object(MO)'s + property and value, which are not part of regular args. + This should be used for future version compatibility. + + Returns: + EquipmentChassis: managed object + + Raises: + UcsOperationError: if Org_dn is not present + + Example: + chassis_reack(handle, id="1") + """ + + org_dn = "sys" + obj = handle.query_dn(org_dn) + if not obj: + raise UcsOperationError("chassis_ack", "Org {} \ + does not exist".format(org_dn)) + + mo = EquipmentChassis(parent_mo_or_dn=obj, admin_state="re-acknowledged", + id=id) + mo.set_prop_multiple(**kwargs) + handle.add_mo(mo, True) + handle.commit() + return mo + + +def chassis_decomm(handle, id=None, **kwargs): + + """ + Decommission chassis so it can be removed or acknowledged. + + Args: + handle (UCSHandle) + id (string): Chassis ID + **kwargs: Any additional key-value pair of managed object(MO)'s + property and value, which are not part of regular args. + This should be used for future version compatibility. + + Returns: + EquipmentChassis: managed object + + Raises: + UcsOperationError: if Org_dn is not present + + Example: + chassis_decomm(handle, id="1") + """ + + org_dn = "sys" + obj = handle.query_dn(org_dn) + if not obj: + raise UcsOperationError("chassis_decomm", "Org {} \ + does not exist".format(org_dn)) + + mo = EquipmentChassis(parent_mo_or_dn=obj, admin_state="decommission", + id=id) + mo.set_prop_multiple(**kwargs) + handle.add_mo(mo, True) + handle.commit() + return mo + + +def chassis_get(handle, id=None, + caller="chassis_get"): + + """ + Gets chassis + + Args: + handle (UCSHandle) + id (string): Chassis ID + caller (string): caller method name + + Returns: + EquipmentChassis: managed object + + Raises: + UcsOperationError: if EquipmentChassis is not present + + Example: + fabric_svr_get(handle, + id="1") + """ + + dn = "sys/chassis-" + id + mo = handle.query_dn(dn) + if not mo: + raise UcsOperationError(caller, "Chassis {} \ + does not exist".format(dn)) + return mo + + +def chassis_exists(handle, id=None, **kwargs): + + """ + checks if chassis exists + + Args: + handle (UCSHandle) + id (string): Chassis ID + **kwargs: key-value pair of managed object(MO) property and value, Use + 'print(ucscoreutils.get_meta_info().config_props)' + to get all configurable properties of class + + Returns: + (True/False, EquipmentChassis MO/None) + + Raises: + None + + Example: + chassis_exists:(handle, + id="1") + """ + + try: + mo = chassis_get(handle=handle, id=id, + caller="chassis_exists") + except UcsOperationError: + return (False, None) + mo_exists = mo.check_prop_match(**kwargs) + return (mo_exists, mo if mo_exists else None) + + +def chassis_modify(handle, id=None, **kwargs): + + """ + modifies chassis + + Args: + handle (UCSHandle) + id (string): Chassis ID + **kwargs: key-value pair of managed object(MO) property and value, Use + 'print(ucscoreutils.get_meta_info().config_props)' + to get all configurable properties of class + + Returns: + EquipmentChassis: managed object + + Raises: + UcsOperationError: if EquipmentChassis is not present + + Example: + chassis_modify(handle, + fabric="A", + id="1", + usr_lbl="Prod") + """ + + mo = chassis_get(handle=handle, id=id, + caller="chassis_modify") + mo.set_prop_multiple(**kwargs) + handle.set_mo(mo) + handle.commit() + return mo + + +def chassis_remove(handle, id=None, **kwargs): + + """ + Removes chassis + + Args: + handle (UCSHandle) + id (string): Chassis ID + **kwargs: Any additional key-value pair of managed object(MO)'s + property and value, which are not part of regular args. + This should be used for future version compatibility. + + Returns: + EquipmentChassis: managed object + + Raises: + UcsOperationError: if Org_dn is not present + + Example: + chassis_remove(handle, id="1") + """ + + org_dn = "sys" + obj = handle.query_dn(org_dn) + if not obj: + raise UcsOperationError("chassis_remove", "Org {} \ + does not exist".format(org_dn)) + + mo = EquipmentChassis(parent_mo_or_dn=obj, admin_state="remove", + id=id) + mo.set_prop_multiple(**kwargs) + handle.add_mo(mo, True) + handle.commit() + return mo