selfprivacy-rest-api/tests/test_graphql/test_api_storage.py

343 lines
8.6 KiB
Python
Raw Normal View History

2022-08-26 06:07:55 +03:00
import pytest
2022-08-25 18:37:32 +03:00
2022-08-30 03:45:50 +03:00
class BlockDeviceMockReturnNone:
2022-08-25 18:37:32 +03:00
"""Mock BlockDevices"""
2022-10-12 17:07:39 +03:00
def __init__(self, *args, **kwargs):
2022-08-25 18:37:32 +03:00
self.args = args
self.kwargs = kwargs
2022-09-08 13:55:34 +03:00
def mount(self):
return None
def unmount(self):
return None
2022-08-26 06:07:55 +03:00
def resize(self):
2022-09-08 13:55:34 +03:00
return None
2022-08-26 06:07:55 +03:00
returncode = 0
2022-08-30 03:45:50 +03:00
class BlockDeviceMockReturnTrue:
2022-08-26 06:07:55 +03:00
"""Mock BlockDevices"""
2022-10-12 17:07:39 +03:00
def __init__(self, *args, **kwargs):
2022-08-26 06:07:55 +03:00
self.args = args
self.kwargs = kwargs
2022-08-27 18:10:36 +03:00
def mount(self):
return True
def unmount(self):
return True
def resize(self):
2022-09-08 13:55:34 +03:00
return True
2022-08-27 18:10:36 +03:00
returncode = 0
2022-08-30 03:45:50 +03:00
class BlockDeviceMockReturnFalse:
2022-08-27 18:10:36 +03:00
"""Mock BlockDevices"""
2022-10-12 17:07:39 +03:00
def __init__(self, *args, **kwargs):
2022-08-27 18:10:36 +03:00
self.args = args
self.kwargs = kwargs
def mount(self):
return False
def unmount(self):
return False
2022-08-26 06:07:55 +03:00
def resize(self):
2022-09-08 13:55:34 +03:00
return False
2022-08-26 06:07:55 +03:00
2022-08-25 18:37:32 +03:00
returncode = 0
2022-09-08 13:55:34 +03:00
class BlockDevicesMockReturnTrue:
2022-10-12 17:07:39 +03:00
def get_block_device(name: str): # type: ignore
return BlockDeviceMockReturnTrue()
2022-09-08 13:55:34 +03:00
def __new__(cls, *args, **kwargs):
pass
def __init__(self):
pass
class BlockDevicesMockReturnNone:
2022-10-12 17:07:39 +03:00
def get_block_device(name: str): # type: ignore
2022-09-08 13:55:34 +03:00
return None
def __new__(cls, *args, **kwargs):
pass
def __init__(self):
pass
@pytest.fixture
def mock_block_devices_return_true(mocker):
mock = mocker.patch(
2022-10-12 17:07:39 +03:00
"selfprivacy_api.graphql.mutations.storage_mutations.BlockDevices",
# "selfprivacy_api.utils.block_devices.BlockDevices",
2022-09-08 13:55:34 +03:00
autospec=True,
return_value=BlockDevicesMockReturnTrue,
)
return mock
@pytest.fixture
def mock_block_devices_return_none(mocker):
mock = mocker.patch(
"selfprivacy_api.utils.block_devices.BlockDevices",
autospec=True,
return_value=BlockDevicesMockReturnNone,
)
return mock
2022-08-26 06:07:55 +03:00
@pytest.fixture
def mock_block_device_return_none(mocker):
mock = mocker.patch(
2022-08-30 03:45:50 +03:00
"selfprivacy_api.utils.block_devices.BlockDevice",
autospec=True,
return_value=BlockDeviceMockReturnNone,
2022-08-26 06:07:55 +03:00
)
return mock
@pytest.fixture
2022-08-27 18:10:36 +03:00
def mock_block_device_return_true(mocker):
mock = mocker.patch(
2022-08-30 03:45:50 +03:00
"selfprivacy_api.utils.block_devices.BlockDevice",
autospec=True,
return_value=BlockDeviceMockReturnTrue,
2022-08-27 18:10:36 +03:00
)
return mock
@pytest.fixture
def mock_block_device_return_false(mocker):
2022-08-26 06:07:55 +03:00
mock = mocker.patch(
2022-08-30 03:45:50 +03:00
"selfprivacy_api.utils.block_devices.BlockDevice",
autospec=True,
return_value=BlockDeviceMockReturnFalse,
2022-08-26 06:07:55 +03:00
)
2022-08-25 18:37:32 +03:00
return mock
API_RESIZE_VOLUME_MUTATION = """
2022-08-26 06:07:55 +03:00
mutation resizeVolume($name: String!) {
2022-08-25 18:37:32 +03:00
resizeVolume(name: $name) {
success
message
code
}
}
"""
2022-08-26 06:07:55 +03:00
2022-08-30 03:45:50 +03:00
def test_graphql_resize_volumea_unathorized_client(
2022-09-08 13:55:34 +03:00
client, mock_block_devices_return_true
2022-08-30 03:45:50 +03:00
):
2022-08-26 06:07:55 +03:00
response = client.post(
"/graphql",
json={
"query": API_RESIZE_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is None
def test_graphql_resize_volume_nonexistent_block_device(
2022-09-08 13:55:34 +03:00
authorized_client, mock_block_devices_return_none
2022-08-26 06:07:55 +03:00
):
2022-08-25 18:37:32 +03:00
response = authorized_client.post(
"/graphql",
json={
"query": API_RESIZE_VOLUME_MUTATION,
2022-08-26 06:07:55 +03:00
"variables": {"name": "sdx"},
2022-08-25 18:37:32 +03:00
},
)
assert response.status_code == 200
assert response.json().get("data") is not None
2022-08-25 18:41:31 +03:00
assert response.json()["data"]["resizeVolume"]["code"] == 404
assert response.json()["data"]["resizeVolume"]["message"] is not None
assert response.json()["data"]["resizeVolume"]["success"] is False
2022-08-26 06:07:55 +03:00
2022-09-08 13:55:34 +03:00
def test_graphql_resize_volume(authorized_client, mock_block_devices_return_true):
2022-08-26 06:07:55 +03:00
response = authorized_client.post(
"/graphql",
json={
"query": API_RESIZE_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is not None
assert response.json()["data"]["resizeVolume"]["code"] == 200
assert response.json()["data"]["resizeVolume"]["message"] is not None
assert response.json()["data"]["resizeVolume"]["success"] is True
2022-08-27 18:10:36 +03:00
API_MOUNT_VOLUME_MUTATION = """
mutation mountVolume($name: String!) {
mountVolume(name: $name) {
success
message
code
}
}
"""
def test_graphql_mount_volume_unathorized_client(client, mock_block_device_return_true):
response = client.post(
"/graphql",
json={
"query": API_MOUNT_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is None
def test_graphql_mount_already_mounted_volume(
2022-09-08 13:55:34 +03:00
authorized_client, mock_block_devices_return_none
2022-08-27 18:10:36 +03:00
):
response = authorized_client.post(
"/graphql",
json={
"query": API_MOUNT_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is not None
2022-09-08 13:55:34 +03:00
assert response.json()["data"]["mountVolume"]["code"] == 404
2022-08-27 18:10:36 +03:00
assert response.json()["data"]["mountVolume"]["message"] is not None
assert response.json()["data"]["mountVolume"]["success"] is False
def test_graphql_mount_not_found_volume(
2022-09-08 13:55:34 +03:00
authorized_client, mock_block_devices_return_none
2022-08-27 18:10:36 +03:00
):
response = authorized_client.post(
"/graphql",
json={
"query": API_MOUNT_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is not None
2022-09-08 13:55:34 +03:00
assert response.json()["data"]["mountVolume"]["code"] == 404
2022-08-27 18:10:36 +03:00
assert response.json()["data"]["mountVolume"]["message"] is not None
assert response.json()["data"]["mountVolume"]["success"] is False
2022-09-08 13:55:34 +03:00
def test_graphql_mount_volume(authorized_client, mock_block_devices_return_true):
2022-08-27 18:10:36 +03:00
response = authorized_client.post(
"/graphql",
json={
"query": API_MOUNT_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is not None
assert response.json()["data"]["mountVolume"]["code"] == 200
assert response.json()["data"]["mountVolume"]["message"] is not None
assert response.json()["data"]["mountVolume"]["success"] is True
API_UNMOUNT_VOLUME_MUTATION = """
mutation unmountVolume($name: String!) {
unmountVolume(name: $name) {
success
message
code
}
}
"""
2022-08-30 03:45:50 +03:00
def test_graphql_unmount_volume_unathorized_client(
2022-09-08 13:55:34 +03:00
client, mock_block_devices_return_true
2022-08-30 03:45:50 +03:00
):
2022-08-27 18:10:36 +03:00
response = client.post(
"/graphql",
json={
"query": API_UNMOUNT_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is None
def test_graphql_unmount_not_fount_volume(
2022-09-08 13:55:34 +03:00
authorized_client, mock_block_devices_return_none
2022-08-27 18:10:36 +03:00
):
response = authorized_client.post(
"/graphql",
json={
"query": API_UNMOUNT_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is not None
assert response.json()["data"]["unmountVolume"]["code"] == 404
assert response.json()["data"]["unmountVolume"]["message"] is not None
assert response.json()["data"]["unmountVolume"]["success"] is False
def test_graphql_unmount_volume_false(
2022-09-08 13:55:34 +03:00
authorized_client, mock_block_devices_return_none
2022-08-27 18:10:36 +03:00
):
response = authorized_client.post(
"/graphql",
json={
"query": API_UNMOUNT_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is not None
2022-09-08 13:55:34 +03:00
assert response.json()["data"]["unmountVolume"]["code"] == 404
2022-08-27 18:10:36 +03:00
assert response.json()["data"]["unmountVolume"]["message"] is not None
assert response.json()["data"]["unmountVolume"]["success"] is False
2022-10-12 17:07:39 +03:00
def test_graphql_unmount_volume(authorized_client, mock_block_devices_return_true):
2022-08-27 18:10:36 +03:00
response = authorized_client.post(
"/graphql",
json={
"query": API_UNMOUNT_VOLUME_MUTATION,
"variables": {"name": "sdx"},
},
)
assert response.status_code == 200
assert response.json().get("data") is not None
assert response.json()["data"]["unmountVolume"]["code"] == 200
assert response.json()["data"]["unmountVolume"]["message"] is not None
assert response.json()["data"]["unmountVolume"]["success"] is True