* GEN3: Invalid Contact Info Msg Fixes #191 * introduce ifc with FIFOs * add object factory * use AsyncIfc class with FIFO * declare more methods as classmethods * - refactoring - remove _forward_buffer - make async_write private * remove _forward_buffer * refactoring * avoid mqtt handling for invalid serial numbers * add two more callbacks * FIX update_header_cb handling * split AsyncStream in two classes * split ConnectionG3(P) in server and client class * update class diagramm * refactor server creation * remove duplicated imports * reduce code duplication * move StremPtr instances into Inverter class * resolution of connection classes - remove ConnectionG3Client - remove ConnectionG3Server - remove ConnectionG3PClient - remove ConnectionG3PServer * fix server connections * fix client loop closing * don't overwrite self.remote in constructor * update class diagramm * fixes - fixes null pointer accesses - initalize AsyncStreamClient with proper StreamPtr instance * add close callback * refactor close handling * remove connection classes * move more code into InverterBase class * remove test_inverter_base.py * add abstract inverter interface class * initial commit * fix sonar qube warnings * rename class Inverter into Proxy * fix typo * move class InverterIfc into a separate file * add more testcases * use ProtocolIfc class * add unit tests for AsyncStream class * icrease test coverage * reduce cognitive complexity * increase test coverage * increase tes coverage * simplify heartbeat handler * remove obsolete tx_get method * add more unittests * update changelog * remove __del__ method for proper gc runs * check releasing of ModbusConn instances * call garbage collector to release unreachable objs * decrease ref counter after the with block
92 lines
2.6 KiB
Python
92 lines
2.6 KiB
Python
# test_with_pytest.py
|
|
import pytest
|
|
import asyncio
|
|
import aiomqtt
|
|
import logging
|
|
|
|
from mock import patch, Mock
|
|
from app.src.singleton import Singleton
|
|
from app.src.proxy import Proxy
|
|
from app.src.mqtt import Mqtt
|
|
from app.src.gen3plus.solarman_v5 import SolarmanV5
|
|
from app.src.config import Config
|
|
|
|
|
|
pytest_plugins = ('pytest_asyncio',)
|
|
|
|
|
|
@pytest.fixture(scope="module", autouse=True)
|
|
def module_init():
|
|
def new_init(cls, cb_mqtt_is_up):
|
|
pass # empty test methos
|
|
|
|
Singleton._instances.clear()
|
|
with patch.object(Mqtt, '__init__', new_init):
|
|
yield
|
|
|
|
@pytest.fixture(scope="module")
|
|
def test_port():
|
|
return 1883
|
|
|
|
@pytest.fixture(scope="module")
|
|
def test_hostname():
|
|
# if getenv("GITHUB_ACTIONS") == "true":
|
|
# return 'mqtt'
|
|
# else:
|
|
return 'test.mosquitto.org'
|
|
|
|
@pytest.fixture
|
|
def config_conn(test_hostname, test_port):
|
|
Config.act_config = {
|
|
'mqtt':{
|
|
'host': test_hostname,
|
|
'port': test_port,
|
|
'user': '',
|
|
'passwd': ''
|
|
},
|
|
'ha':{
|
|
'auto_conf_prefix': 'homeassistant',
|
|
'discovery_prefix': 'homeassistant',
|
|
'entity_prefix': 'tsun',
|
|
'proxy_node_id': 'test_1',
|
|
'proxy_unique_id': ''
|
|
},
|
|
'inverters': {
|
|
'allow_all': True,
|
|
"R170000000000001":{
|
|
'node_id': 'inv_1'
|
|
}
|
|
}
|
|
}
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_inverter_cb(config_conn):
|
|
_ = config_conn
|
|
|
|
with patch.object(Proxy, '_cb_mqtt_is_up', wraps=Proxy._cb_mqtt_is_up) as spy:
|
|
print('call Proxy.class_init')
|
|
Proxy.class_init()
|
|
assert 'homeassistant/' == Proxy.discovery_prfx
|
|
assert 'tsun/' == Proxy.entity_prfx
|
|
assert 'test_1/' == Proxy.proxy_node_id
|
|
await Proxy._cb_mqtt_is_up()
|
|
spy.assert_called_once()
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_mqtt_is_up(config_conn):
|
|
_ = config_conn
|
|
|
|
with patch.object(Mqtt, 'publish') as spy:
|
|
Proxy.class_init()
|
|
await Proxy._cb_mqtt_is_up()
|
|
spy.assert_called()
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_mqtt_proxy_statt_invalid(config_conn):
|
|
_ = config_conn
|
|
|
|
with patch.object(Mqtt, 'publish') as spy:
|
|
Proxy.class_init()
|
|
await Proxy._async_publ_mqtt_proxy_stat('InValId_kEy')
|
|
spy.assert_not_called()
|