mirror of
https://github.com/akuker/RASCSI.git
synced 2024-12-23 06:30:04 +00:00
05b9e0eb18
* Correct German translation for Key * Web UI: Rework the Attach Device section to be universal * Web UI: Warn when working dirs are missing * Refactor tests to use global endpoint constants * Add fallback for unknown disk type devices * Rearrange the index page sections * Move Macproxy help text to admins page * Remove image list exception for SCHD * Show Settings button when auth is diabled * Tweak CSS styles for both themes * Move Eject action next to the file name, and improve UI labels
125 lines
3.7 KiB
Python
125 lines
3.7 KiB
Python
import pytest
|
|
import uuid
|
|
import warnings
|
|
import datetime
|
|
|
|
SCSI_ID = 6
|
|
FILE_SIZE_1_MIB = 1048576
|
|
STATUS_SUCCESS = "success"
|
|
STATUS_ERROR = "error"
|
|
|
|
ENV_ENDPOINT = "/env"
|
|
HEALTHCHECK_ENDPOINT = "/healthcheck"
|
|
PWA_FAVICON_ENDPOINT = "/pwa/favicon.ico"
|
|
LOGIN_ENDPOINT = "/login"
|
|
LOGOUT_ENDPOINT = "/logout"
|
|
ATTACH_ENDPOINT = "/scsi/attach"
|
|
DETACH_ENDPOINT = "/scsi/detach"
|
|
DETACH_ALL_ENDPOINT = "/scsi/detach_all"
|
|
EJECT_ENDPOINT = "/scsi/eject"
|
|
RESERVE_ENDPOINT = "/scsi/reserve"
|
|
RELEASE_ENDPOINT = "/scsi/release"
|
|
INFO_ENDPOINT = "/scsi/info"
|
|
CREATE_ENDPOINT = "/files/create"
|
|
RENAME_ENDPOINT = "/files/rename"
|
|
COPY_ENDPOINT = "/files/copy"
|
|
DELETE_ENDPOINT = "/files/delete"
|
|
DOWNLOAD_URL_ENDPOINT = "/files/download_url"
|
|
DOWNLOAD_IMAGE_ENDPOINT = "/files/download_image"
|
|
DOWNLOAD_CONFIG_ENDPOINT = "/files/download_config"
|
|
EXTRACT_IMAGE_ENDPOINT = "/files/extract_image"
|
|
UPLOAD_ENDPOINT = "/files/upload"
|
|
CREATE_ISO_ENDPOINT = "/files/create_iso"
|
|
DISKINFO_ENDPOINT = "/files/diskinfo"
|
|
DRIVE_LIST_ENDPOINT = "/drive/list"
|
|
DRIVE_CREATE_ENDPOINT = "/drive/create"
|
|
DRIVE_CDROM_ENDPOINT = "/drive/cdrom"
|
|
MANPAGE_ENDPOINT = "/sys/manpage?app=piscsi"
|
|
LANGUAGE_ENDPOINT = "/language"
|
|
LOG_LEVEL_ENDPOINT = "/logs/level"
|
|
LOG_SHOW_ENDPOINT = "/logs/show"
|
|
CONFIG_SAVE_ENDPOINT = "/config/save"
|
|
CONFIG_ACTION_ENDPOINT = "/config/action"
|
|
THEME_ENDPOINT = "/theme"
|
|
SYS_RENAME_ENDPOINT = "/sys/rename"
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def create_test_image(request, http_client):
|
|
images = []
|
|
|
|
def create(image_type="hds", size=1, auto_delete=True):
|
|
file_prefix = f"{request.function.__name__}___{uuid.uuid4()}"
|
|
file_name = f"{file_prefix}.{image_type}"
|
|
|
|
response = http_client.post(
|
|
CREATE_ENDPOINT,
|
|
data={
|
|
"file_name": file_prefix,
|
|
"type": image_type,
|
|
"size": size,
|
|
},
|
|
)
|
|
|
|
if response.json()["status"] != STATUS_SUCCESS:
|
|
raise Exception("Failed to create temporary image")
|
|
|
|
if auto_delete:
|
|
images.append(
|
|
{
|
|
"file_name": file_name,
|
|
"function": request.function,
|
|
"created": str(datetime.datetime.now()),
|
|
}
|
|
)
|
|
|
|
return file_name
|
|
|
|
def delete():
|
|
for image in images:
|
|
response = http_client.post(DELETE_ENDPOINT, data={"file_name": image["file_name"]})
|
|
if response.status_code != 200 or response.json()["status"] != STATUS_SUCCESS:
|
|
warnings.warn(
|
|
f"Failed to auto-delete file created with create_test_image fixture: {image}"
|
|
)
|
|
|
|
request.addfinalizer(delete)
|
|
return create
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def list_files(http_client):
|
|
def files():
|
|
return [f["name"] for f in http_client.get("/").json()["data"]["files"]]
|
|
|
|
return files
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def list_attached_images(http_client):
|
|
def files():
|
|
return http_client.get("/").json()["data"]["attached_images"]
|
|
|
|
return files
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def delete_file(http_client):
|
|
def delete(file_name):
|
|
response = http_client.post(DELETE_ENDPOINT, data={"file_name": file_name})
|
|
if response.status_code != 200 or response.json()["status"] != STATUS_SUCCESS:
|
|
warnings.warn(f"Failed to delete file via delete_file fixture: {file_name}")
|
|
|
|
return delete
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def detach_devices(http_client):
|
|
def detach():
|
|
response = http_client.post(DETACH_ALL_ENDPOINT)
|
|
if response.json()["status"] == STATUS_SUCCESS:
|
|
return True
|
|
raise Exception("Failed to detach SCSI devices")
|
|
|
|
return detach
|