"""Tests relating to the storage api""" import pytest import requests import redfish_cli from redfish_cli.api import storage from redfish_cli.api.exceptions import ResponseNotOK from tests.api import args from ..utils import ( MockRedfishResponse, MockResponse, get_test_content, get_test_json, ) def test_create_logical_volume(monkeypatch): """Test creating a logical volume""" monkeypatch.setattr( requests, "post", lambda args, auth=None, verify=None, data=None, headers=None, timeout=None: MockResponse( content="{}", headers={"Location": "/JOB12345"} ), ) monkeypatch.setattr(redfish_cli.api, "firmware_version", lambda args: 2) _args = args( raid_level="0", size=None, stripe_size=None, name="test", secure=None, disk_cache_policy=None, read_cache_policy=None, write_cache_policy=None, disk=["one"], system="System.Embedded.1", controller="Raid-Controller-1", ) result = storage.create_logical_volume(_args) assert result["job_id"] == "JOB12345" monkeypatch.setattr( redfish_cli.api, "firmware_version", lambda args: 445445445 ) result = storage.create_logical_volume(_args) assert result["job_id"] == "JOB12345" # Test setting size _args.size = 300000000 result = storage.create_logical_volume(_args) assert result["job_id"] == "JOB12345" # Test setting stripe_size _args.stripe_size = 3000 result = storage.create_logical_volume(_args) assert result["job_id"] == "JOB12345" # Test setting other parameters _args.secure = "Something" _args.disk_cache_policy = "Something" _args.read_cache_policy = "Something" _args.write_cache_policy = "Something" result = storage.create_logical_volume(_args) assert result["job_id"] == "JOB12345" monkeypatch.setattr( requests, "post", lambda args, auth=None, verify=None, data=None, headers=None, timeout=None: MockResponse( content="{}", headers={"NoLocation": "/JOB12345"} ), ) with pytest.raises(redfish_cli.api.exceptions.FailedToGetJobID): result = storage.create_logical_volume(_args) monkeypatch.setattr( requests, "post", lambda args, auth=None, verify=None, data=None, headers=None, timeout=None: MockResponse( ok=False, content="{}", headers={"NoLocation": "/JOB12345"} ), ) with pytest.raises( redfish_cli.api.exceptions.LogicalVolumeCreationFailure ): result = storage.create_logical_volume(_args) _args.raid_level = "77" monkeypatch.setattr( requests, "post", lambda args, auth=None, verify=None, data=None, headers=None, timeout=None: MockResponse( content="{}", headers={"NoLocation": "/JOB12345"} ), ) with pytest.raises(redfish_cli.api.exceptions.InvalidRaidLevel): result = storage.create_logical_volume(_args) def test_delete_logical_volume(monkeypatch): """Test deleting a logical volume""" monkeypatch.setattr( requests, "delete", lambda args, auth=None, verify=None, data=None, headers=None, timeout=None: MockResponse( content="{}", headers={"Location": "/JOB12345"} ), ) _args = args( disk="disk1", verify=None, ) result = storage.delete_logical_volume(_args) assert result["job_id"] == "JOB12345" monkeypatch.setattr( requests, "delete", lambda args, auth=None, verify=None, data=None, headers=None, timeout=None: MockResponse( content="{}", headers={} ), ) with pytest.raises(redfish_cli.api.exceptions.FailedToGetJobID): result = storage.delete_logical_volume(_args) monkeypatch.setattr( requests, "delete", lambda args, auth=None, verify=None, data=None, headers=None, timeout=None: MockResponse( ok=False ), ) with pytest.raises(ResponseNotOK): result = storage.delete_logical_volume(_args) def test_list_logical_volumes(monkeypatch): """Test the list logical volumes api call""" monkeypatch.setattr( requests, "get", lambda args, auth=None, verify=None, data=None, headers=None, timeout=None: MockResponse( content=get_test_content("api_list_logical_volumes.json") ), ) _args = args( system="System.Embedded.1", controller="RAID.Slot.6-1", expand=True, ) logical_volumes = redfish_cli.api.storage.list_logical_volumes(_args) assert logical_volumes["Name"] == "Volume Collection" _args.controller = "" logical_volumes = redfish_cli.api.storage.list_logical_volumes(_args) assert logical_volumes["Name"] == "Volume Collection" def test_list_storage_controllers(monkeypatch): """Test the list storage controllers api call""" def mock_get(*aargs, **kwargs): # pylint: disable=unused-argument mock_redfish = MockRedfishResponse() mock_redfish.json_dict = get_test_json( "api_list_storage_controllers.json" ) return MockResponse(content=mock_redfish.text) monkeypatch.setattr(requests, "get", mock_get) _args = args(system="System.Embedded.1") storage_controllers = redfish_cli.api.storage.list_storage_controllers( _args ) assert storage_controllers["Name"] == "Storage Collection" def test_logical_volume_details(monkeypatch): """Test the logical volume details API call""" def mock_get(*aargs, **kwargs): # pylint: disable=unused-argument mock_redfish = MockRedfishResponse() mock_redfish.json_dict = get_test_json( "api_logical_volume_details.json" ) return MockResponse(content=mock_redfish.text) monkeypatch.setattr(requests, "get", mock_get) _args = args( drive="Disk.Virtual.0:RAID.Slot.6-1", drive_index="0", system="system" ) logical_volume_details = redfish_cli.api.storage.logical_volume_details( _args ) assert logical_volume_details["Name"] == "os"