1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
|
"""Synology DSM tests."""
# pylint: disable=protected-access
import pytest
from synology_dsm.const import API_AUTH
from synology_dsm.exceptions import SynologyDSMLogin2SARequiredException
from . import (
VALID_HOST,
VALID_HTTPS,
VALID_OTP,
VALID_PASSWORD,
VALID_PORT,
VALID_USER_2SA,
SynologyDSMMock,
)
from .const import DEVICE_TOKEN, SESSION_ID
class TestSynologyDSM5:
"""SynologyDSM 5test cases."""
@pytest.mark.asyncio
async def test_login(self, dsm_5):
"""Test login."""
assert await dsm_5.login()
assert dsm_5.apis.get(API_AUTH)
assert dsm_5._session_id == SESSION_ID
assert dsm_5._syno_token is None
@pytest.mark.asyncio
async def test_login_2sa(self):
"""Test login with 2SA."""
dsm_5 = SynologyDSMMock(
None,
VALID_HOST,
VALID_PORT,
VALID_USER_2SA,
VALID_PASSWORD,
VALID_HTTPS,
)
dsm_5.dsm_version = 5
with pytest.raises(SynologyDSMLogin2SARequiredException):
await dsm_5.login()
await dsm_5.login(VALID_OTP)
assert dsm_5._session_id == SESSION_ID
assert dsm_5._syno_token is None
assert dsm_5._device_token == DEVICE_TOKEN
assert dsm_5.device_token == DEVICE_TOKEN
@pytest.mark.asyncio
async def test_login_2sa_new_session(self):
"""Test login with 2SA and a new session with granted device."""
dsm_5 = SynologyDSMMock(
None,
VALID_HOST,
VALID_PORT,
VALID_USER_2SA,
VALID_PASSWORD,
VALID_HTTPS,
device_token=DEVICE_TOKEN,
)
dsm_5.dsm_version = 5
assert await dsm_5.login()
assert dsm_5._session_id == SESSION_ID
assert dsm_5._syno_token is None
assert dsm_5._device_token == DEVICE_TOKEN
assert dsm_5.device_token == DEVICE_TOKEN
@pytest.mark.asyncio
async def test_information(self, dsm_5):
"""Test information."""
assert await dsm_5.login()
assert dsm_5.information
await dsm_5.information.update()
assert dsm_5.information.model == "DS3615xs"
assert dsm_5.information.ram == 6144
assert dsm_5.information.serial == "B3J4N01003"
assert dsm_5.information.temperature == 40
assert not dsm_5.information.temperature_warn
assert dsm_5.information.uptime == 3897
assert dsm_5.information.version == "5967"
assert dsm_5.information.version_string == "DSM 5.2-5967 Update 9"
assert dsm_5.information.awesome_version == "5.2.0.9"
@pytest.mark.asyncio
async def test_network(self, dsm_5):
"""Test network."""
assert await dsm_5.login()
assert dsm_5.network
await dsm_5.network.update()
assert dsm_5.network.dns
assert dsm_5.network.gateway
assert dsm_5.network.hostname
assert dsm_5.network.interfaces
assert dsm_5.network.interface("eth0")
assert dsm_5.network.interface("eth1") is None
assert dsm_5.network.macs
assert dsm_5.network.workgroup
@pytest.mark.asyncio
async def test_storage(self, dsm_5):
"""Test storage roots."""
assert await dsm_5.login()
assert dsm_5.storage
await dsm_5.storage.update()
assert dsm_5.storage.disks
assert dsm_5.storage.env
assert dsm_5.storage.storage_pools == []
assert dsm_5.storage.volumes
@pytest.mark.asyncio
async def test_storage_volumes(self, dsm_5):
"""Test storage volumes."""
assert await dsm_5.login()
await dsm_5.storage.update()
# Basics
assert dsm_5.storage.volumes_ids
for volume_id in dsm_5.storage.volumes_ids:
if volume_id == "test_volume":
continue
assert dsm_5.storage.volume_status(volume_id)
assert dsm_5.storage.volume_device_type(volume_id)
assert dsm_5.storage.volume_size_total(volume_id)
assert dsm_5.storage.volume_size_total(volume_id, True)
assert dsm_5.storage.volume_size_used(volume_id)
assert dsm_5.storage.volume_size_used(volume_id, True)
assert dsm_5.storage.volume_percentage_used(volume_id)
assert (
dsm_5.storage.volume_disk_temp_avg(volume_id) is None
) # because of empty storagePools
assert (
dsm_5.storage.volume_disk_temp_max(volume_id) is None
) # because of empty storagePools
# Existing volume
assert dsm_5.storage.volume_status("volume_1") == "normal"
assert dsm_5.storage.volume_device_type("volume_1") == "raid_5"
assert dsm_5.storage.volume_size_total("volume_1") == 8846249701376
assert dsm_5.storage.volume_size_total("volume_1", True) == "8.0Tb"
assert dsm_5.storage.volume_size_used("volume_1") == 5719795761152
assert dsm_5.storage.volume_size_used("volume_1", True) == "5.2Tb"
assert dsm_5.storage.volume_percentage_used("volume_1") == 64.7
assert (
dsm_5.storage.volume_disk_temp_avg("volume_1") is None
) # because of empty storagePools
assert (
dsm_5.storage.volume_disk_temp_max("volume_1") is None
) # because of empty storagePools
# Non existing volume
assert not dsm_5.storage.volume_status("not_a_volume")
assert not dsm_5.storage.volume_device_type("not_a_volume")
assert not dsm_5.storage.volume_size_total("not_a_volume")
assert not dsm_5.storage.volume_size_total("not_a_volume", True)
assert not dsm_5.storage.volume_size_used("not_a_volume")
assert not dsm_5.storage.volume_size_used("not_a_volume", True)
assert not dsm_5.storage.volume_percentage_used("not_a_volume")
assert not dsm_5.storage.volume_disk_temp_avg("not_a_volume")
assert not dsm_5.storage.volume_disk_temp_max("not_a_volume")
# Test volume
assert dsm_5.storage.volume_status("test_volume") is None
assert dsm_5.storage.volume_device_type("test_volume") is None
assert dsm_5.storage.volume_size_total("test_volume") is None
assert dsm_5.storage.volume_size_total("test_volume", True) is None
assert dsm_5.storage.volume_size_used("test_volume") is None
assert dsm_5.storage.volume_size_used("test_volume", True) is None
assert dsm_5.storage.volume_percentage_used("test_volume") is None
assert dsm_5.storage.volume_disk_temp_avg("test_volume") is None
assert dsm_5.storage.volume_disk_temp_max("test_volume") is None
@pytest.mark.asyncio
async def test_storage_disks(self, dsm_5):
"""Test storage disks."""
assert await dsm_5.login()
await dsm_5.storage.update()
# Basics
assert dsm_5.storage.disks_ids
for disk_id in dsm_5.storage.disks_ids:
if disk_id == "test_disk":
continue
assert "Disk" in dsm_5.storage.disk_name(disk_id)
assert "/dev/" in dsm_5.storage.disk_device(disk_id)
if disk_id == "sda":
assert dsm_5.storage.disk_smart_status(disk_id) == "90%"
else:
assert dsm_5.storage.disk_smart_status(disk_id) == "safe"
assert dsm_5.storage.disk_status(disk_id) == "normal"
assert not dsm_5.storage.disk_exceed_bad_sector_thr(disk_id)
assert not dsm_5.storage.disk_below_remain_life_thr(disk_id)
assert dsm_5.storage.disk_temp(disk_id)
# Non existing disk
assert not dsm_5.storage.disk_name("not_a_disk")
assert not dsm_5.storage.disk_device("not_a_disk")
assert not dsm_5.storage.disk_smart_status("not_a_disk")
assert not dsm_5.storage.disk_status("not_a_disk")
assert not dsm_5.storage.disk_exceed_bad_sector_thr("not_a_disk")
assert not dsm_5.storage.disk_below_remain_life_thr("not_a_disk")
assert not dsm_5.storage.disk_temp("not_a_disk")
# Test disk
assert dsm_5.storage.disk_name("test_disk") is None
assert dsm_5.storage.disk_device("test_disk") is None
assert dsm_5.storage.disk_smart_status("test_disk") is None
assert dsm_5.storage.disk_status("test_disk") is None
assert dsm_5.storage.disk_exceed_bad_sector_thr("test_disk") is None
assert dsm_5.storage.disk_below_remain_life_thr("test_disk") is None
assert dsm_5.storage.disk_temp("test_disk") is None
|