210 lines
6.1 KiB
Python
210 lines
6.1 KiB
Python
"""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"
|