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
|
"""Test firmware functions."""
import logging
import aiohttp
import pytest
from aioresponses import aioresponses
from pyenphase import Envoy
from pyenphase.exceptions import EnvoyFirmwareCheckError
LOGGER = logging.getLogger(__name__)
@pytest.mark.asyncio
async def test_firmware_with_7_6_175_standard(
mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession
) -> None:
"""Test firmware is processed ok."""
info = (
"<?xml version='1.0' encoding='UTF-8'?>"
"<envoy_info>"
" <device>"
" <sn>123456789012</sn>"
" <pn>800-12345-r99</pn>"
" <software>D7.8.901</software>"
" </device>"
"</envoy_info>"
)
mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info)
envoy = Envoy("127.0.0.1", client=test_client_session)
await envoy.setup()
assert envoy.firmware == "7.8.901"
assert envoy.serial_number == "123456789012"
assert envoy.part_number == "800-12345-r99"
@pytest.mark.asyncio
async def test_firmware_no_sn_with_7_6_175_standard(
mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession
) -> None:
"""Test missing serial number in info"""
info = (
"<?xml version='1.0' encoding='UTF-8'?>"
"<envoy_info>"
" <device>"
" <pn>800-12345-r99</pn>"
" <software>D7.8.901</software>"
" </device>"
"</envoy_info>"
)
mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info)
envoy = Envoy("127.0.0.1", client=test_client_session)
await envoy.setup()
assert envoy.firmware == "7.8.901"
assert envoy.serial_number is None
assert envoy.part_number == "800-12345-r99"
@pytest.mark.asyncio
async def test_firmware_no_pn_with_7_6_175_standard(
mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession
) -> None:
"""Test missing pb in info"""
info = (
"<?xml version='1.0' encoding='UTF-8'?>"
"<envoy_info>"
" <device>"
" <sn>123456789012</sn>"
" <software>D7.8.901</software>"
" </device>"
"</envoy_info>"
)
mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info)
envoy = Envoy("127.0.0.1", client=test_client_session)
await envoy.setup()
assert envoy.firmware == "7.8.901"
assert envoy.serial_number == "123456789012"
assert envoy.part_number is None
@pytest.mark.asyncio
async def test_firmware_no_fw_with_7_6_175_standard(
mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession
) -> None:
"""Test missing fw in info"""
info = (
"<?xml version='1.0' encoding='UTF-8'?>"
"<envoy_info>"
" <device>"
" <sn>123456789012</sn>"
" <pn>800-12345-r99</pn>"
" </device>"
"</envoy_info>"
)
mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info)
envoy = Envoy("127.0.0.1", client=test_client_session)
await envoy.setup()
assert not envoy.firmware
assert envoy.serial_number == "123456789012"
assert envoy.part_number == "800-12345-r99"
@pytest.mark.asyncio
async def test_firmware_no_device_with_7_6_175_standard(
mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession
) -> None:
"""Test missing device xml segment in info"""
info = "<?xml version='1.0' encoding='UTF-8'?><envoy_info></envoy_info>"
mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info)
envoy = Envoy("127.0.0.1", client=test_client_session)
await envoy.setup()
assert not envoy.firmware
assert envoy.serial_number is None
assert envoy.part_number is None
@pytest.mark.asyncio
async def test_firmware_no_200__with_7_6_175_standard(
mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession
) -> None:
"""Test other status as 200 returned"""
info = "<?xml version='1.0' encoding='UTF-8'?><envoy_info></envoy_info>"
mock_aioresponse.get("https://127.0.0.1/info", status=500, body=info)
envoy = Envoy("127.0.0.1", client=test_client_session)
with pytest.raises(EnvoyFirmwareCheckError):
await envoy.setup()
@pytest.mark.asyncio
async def test_firmware_metered_with_7_6_175_standard(
mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession
) -> None:
"""Test firmware is processed ok."""
info = (
"<?xml version='1.0' encoding='UTF-8'?>"
"<envoy_info>"
" <device>"
" <sn>123456789012</sn>"
" <pn>800-12345-r99</pn>"
" <software>D7.8.901</software>"
" <imeter>true</imeter>"
" </device>"
"</envoy_info>"
)
mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info)
envoy = Envoy("127.0.0.1", client=test_client_session)
await envoy.setup()
assert envoy.is_metered
@pytest.mark.asyncio
async def test_firmware_not_metered_with_7_6_175_standard(
mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession
) -> None:
"""Test firmware is processed ok."""
info = (
"<?xml version='1.0' encoding='UTF-8'?>"
"<envoy_info>"
" <device>"
" <sn>123456789012</sn>"
" <pn>800-12345-r99</pn>"
" <software>D7.8.901</software>"
" <imeter>false</imeter>"
" </device>"
"</envoy_info>"
)
mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info)
envoy = Envoy("127.0.0.1", client=test_client_session)
await envoy.setup()
assert not envoy.is_metered
@pytest.mark.asyncio
async def test_firmware_missing_metered_with_7_6_175_standard(
mock_aioresponse: aioresponses, test_client_session: aiohttp.ClientSession
) -> None:
"""Test firmware is processed ok."""
info = (
"<?xml version='1.0' encoding='UTF-8'?>"
"<envoy_info>"
" <device>"
" <sn>123456789012</sn>"
" <pn>800-12345-r99</pn>"
" <software>D7.8.901</software>"
" </device>"
"</envoy_info>"
)
mock_aioresponse.get("https://127.0.0.1/info", status=200, body=info)
envoy = Envoy("127.0.0.1", client=test_client_session)
await envoy.setup()
assert not envoy.is_metered
|