diff --git a/app/requirements-test.txt b/app/requirements-test.txt index 1b61ac6..ac62012 100644 --- a/app/requirements-test.txt +++ b/app/requirements-test.txt @@ -1,6 +1,6 @@ flake8==7.3.0 pytest==8.4.2 - pytest-asyncio==1.1.0 + pytest-asyncio==1.2.0 pytest-cov==6.3.0 python-dotenv==1.1.1 mock==5.2.0 diff --git a/app/tests/test_async_stream.py b/app/tests/test_async_stream.py index 1823aca..2bc1136 100644 --- a/app/tests/test_async_stream.py +++ b/app/tests/test_async_stream.py @@ -82,7 +82,7 @@ def spy_inc_cnt(): yield infos -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_close_cb(): assert asyncio.get_running_loop() reader = FakeReader() @@ -122,7 +122,7 @@ async def test_close_cb(): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read(): assert asyncio.get_running_loop() reader = FakeReader() @@ -161,7 +161,7 @@ async def test_read(): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_write(): assert asyncio.get_running_loop() reader = FakeReader() @@ -204,7 +204,7 @@ async def test_write(): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_publ_mqtt_cb(): assert asyncio.get_running_loop() reader = FakeReader() @@ -235,7 +235,7 @@ async def test_publ_mqtt_cb(): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_create_remote_cb(): assert asyncio.get_running_loop() reader = FakeReader() @@ -268,7 +268,7 @@ async def test_create_remote_cb(): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_sw_exception(): assert asyncio.get_running_loop() reader = FakeReader() @@ -300,7 +300,7 @@ async def test_sw_exception(): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_os_error(): assert asyncio.get_running_loop() reader = FakeReader() @@ -371,7 +371,7 @@ def create_remote(remote, test_type, with_close_hdr:bool = False): remote.ifc.prot_set_init_new_client_conn_cb(callback) remote.stream = FakeProto(remote.ifc, False) -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward(): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -393,7 +393,7 @@ async def test_forward(): assert cnt == 1 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_with_conn(): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -411,7 +411,7 @@ async def test_forward_with_conn(): assert cnt == 0 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_no_conn(): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -428,7 +428,7 @@ async def test_forward_no_conn(): assert cnt == 1 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_sw_except(): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -446,7 +446,7 @@ async def test_forward_sw_except(): assert cnt == 1 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_os_error(): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -464,7 +464,7 @@ async def test_forward_os_error(): assert cnt == 1 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_os_error2(): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -482,7 +482,7 @@ async def test_forward_os_error2(): assert cnt == 1 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_os_error3(): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -500,7 +500,7 @@ async def test_forward_os_error3(): assert cnt == 1 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_runtime_error(): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -518,7 +518,7 @@ async def test_forward_runtime_error(): assert cnt == 1 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_runtime_error2(): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -536,7 +536,7 @@ async def test_forward_runtime_error2(): assert cnt == 1 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_runtime_error3(spy_inc_cnt): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -558,7 +558,7 @@ async def test_forward_runtime_error3(spy_inc_cnt): assert cnt == 1 del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_resp(spy_inc_cnt): assert asyncio.get_running_loop() remote = StreamPtr(None) @@ -581,7 +581,7 @@ async def test_forward_resp(spy_inc_cnt): del ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_forward_resp2(spy_inc_cnt): assert asyncio.get_running_loop() remote = StreamPtr(None) diff --git a/app/tests/test_inverter_base.py b/app/tests/test_inverter_base.py index ee95209..d66de84 100644 --- a/app/tests/test_inverter_base.py +++ b/app/tests/test_inverter_base.py @@ -113,7 +113,7 @@ def patch_unhealthy_remote(): with patch.object(AsyncStreamClient, 'healthy', new_healthy) as conn: yield conn -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_inverter_iter(my_loop): _ = my_loop InverterBase._registry.clear() @@ -217,7 +217,7 @@ def test_unhealthy_remote(patch_unhealthy_remote): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_remote_conn(my_loop, config_conn, patch_open_connection): _ = my_loop _ = config_conn @@ -244,7 +244,7 @@ async def test_remote_conn(my_loop, config_conn, patch_open_connection): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_remote_conn_to_private(my_loop, config_conn, patch_open_connection): '''check DNS resolving of the TSUN FQDN to a local address''' _ = my_loop @@ -283,7 +283,7 @@ async def test_remote_conn_to_private(my_loop, config_conn, patch_open_connectio assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_remote_conn_to_loopback(my_loop, config_conn, patch_open_connection): '''check DNS resolving of the TSUN FQDN to the loopback address''' _ = my_loop @@ -321,7 +321,7 @@ async def test_remote_conn_to_loopback(my_loop, config_conn, patch_open_connecti cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_remote_conn_to_none(my_loop, config_conn, patch_open_connection): '''check if get_extra_info() return None in case of an error''' _ = my_loop @@ -359,7 +359,7 @@ async def test_remote_conn_to_none(my_loop, config_conn, patch_open_connection): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_unhealthy_remote(my_loop, config_conn, patch_open_connection, patch_unhealthy_remote): _ = my_loop _ = config_conn @@ -397,7 +397,7 @@ async def test_unhealthy_remote(my_loop, config_conn, patch_open_connection, pat cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_remote_disc(my_loop, config_conn, patch_open_connection): _ = my_loop _ = config_conn diff --git a/app/tests/test_inverter_g3.py b/app/tests/test_inverter_g3.py index 0addd32..6de2aaa 100644 --- a/app/tests/test_inverter_g3.py +++ b/app/tests/test_inverter_g3.py @@ -99,7 +99,7 @@ def patch_healthy(): with patch.object(AsyncStream, 'healthy') as conn: yield conn -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_method_calls(my_loop, patch_healthy): spy = patch_healthy reader = FakeReader() @@ -119,7 +119,7 @@ async def test_method_calls(my_loop, patch_healthy): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_remote_conn(my_loop, config_conn, patch_open_connection): _ = config_conn _ = patch_open_connection @@ -137,7 +137,7 @@ async def test_remote_conn(my_loop, config_conn, patch_open_connection): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_remote_except(my_loop, config_conn, patch_open_connection): _ = config_conn _ = patch_open_connection @@ -164,7 +164,7 @@ async def test_remote_except(my_loop, config_conn, patch_open_connection): cnt += 1 assert cnt == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_publish(my_loop, config_conn, patch_open_connection): _ = config_conn _ = patch_open_connection @@ -191,7 +191,7 @@ async def test_mqtt_publish(my_loop, config_conn, patch_open_connection): await inverter.async_publ_mqtt() assert Infos.new_stat_data['proxy'] == False -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_err(my_loop, config_conn, patch_open_connection, patch_mqtt_err): _ = config_conn _ = patch_open_connection @@ -208,7 +208,7 @@ async def test_mqtt_err(my_loop, config_conn, patch_open_connection, patch_mqtt_ await inverter.async_publ_mqtt() assert stream.new_data['inverter'] == True -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_except(my_loop, config_conn, patch_open_connection, patch_mqtt_except): _ = config_conn _ = patch_open_connection diff --git a/app/tests/test_inverter_g3p.py b/app/tests/test_inverter_g3p.py index b9b7078..8362f87 100644 --- a/app/tests/test_inverter_g3p.py +++ b/app/tests/test_inverter_g3p.py @@ -94,7 +94,7 @@ def patch_open_connection(): with patch.object(asyncio, 'open_connection', new_open) as conn: yield conn -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_method_calls(my_loop, config_conn): _ = config_conn reader = FakeReader() @@ -105,7 +105,7 @@ async def test_method_calls(my_loop, config_conn): assert inverter.local.stream assert inverter.local.ifc -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_remote_conn(my_loop, config_conn, patch_open_connection): _ = config_conn _ = patch_open_connection @@ -116,7 +116,7 @@ async def test_remote_conn(my_loop, config_conn, patch_open_connection): await asyncio.sleep(0) assert inverter.remote.stream -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_remote_except(my_loop, config_conn, patch_open_connection): _ = config_conn _ = patch_open_connection @@ -138,7 +138,7 @@ async def test_remote_except(my_loop, config_conn, patch_open_connection): test = MockType.RD_TEST_0_BYTES -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_publish(my_loop, config_conn, patch_open_connection): _ = config_conn _ = patch_open_connection @@ -165,7 +165,7 @@ async def test_mqtt_publish(my_loop, config_conn, patch_open_connection): await inverter.async_publ_mqtt() assert Infos.new_stat_data['proxy'] == False -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_err(my_loop, config_conn, patch_open_connection, patch_mqtt_err): _ = config_conn _ = patch_open_connection @@ -182,7 +182,7 @@ async def test_mqtt_err(my_loop, config_conn, patch_open_connection, patch_mqtt_ await inverter.async_publ_mqtt() assert stream.new_data['inverter'] == True -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_except(my_loop, config_conn, patch_open_connection, patch_mqtt_except): _ = config_conn _ = patch_open_connection diff --git a/app/tests/test_modbus.py b/app/tests/test_modbus.py index 4e0c716..62162f8 100644 --- a/app/tests/test_modbus.py +++ b/app/tests/test_modbus.py @@ -19,7 +19,7 @@ class ModbusTestHelper(Modbus): def resp_handler(self): self.recv_responses += 1 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_crc(): '''Check CRC-16 calculation''' mb = Modbus(None) @@ -38,7 +38,7 @@ async def test_modbus_crc(): msg += b'\x00\x00\x00\x00\x00\x00\x00\xe6\xef' assert 0 == mb._Modbus__calc_crc(msg) -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_build_modbus_pdu(): '''Check building and sending a MODBUS RTU''' mb = ModbusTestHelper() @@ -51,7 +51,7 @@ async def test_build_modbus_pdu(): assert mb.last_len == 18 assert mb.err == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_recv_req(): '''Receive a valid request, which must transmitted''' mb = ModbusTestHelper() @@ -61,7 +61,7 @@ async def test_recv_req(): assert mb.last_len == 0x12 assert mb.err == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_recv_req_crc_err(): '''Receive a request with invalid CRC, which must be dropped''' mb = ModbusTestHelper() @@ -72,7 +72,7 @@ async def test_recv_req_crc_err(): assert mb.last_len == 0 assert mb.err == 1 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_recv_resp_crc_err(): '''Receive a response with invalid CRC, which must be dropped''' mb = ModbusTestHelper() @@ -94,7 +94,7 @@ async def test_recv_resp_crc_err(): mb._Modbus__stop_timer() assert not mb.req_pend -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_recv_resp_invalid_addr(): '''Receive a response with wrong server addr, which must be dropped''' mb = ModbusTestHelper() @@ -119,7 +119,7 @@ async def test_recv_resp_invalid_addr(): mb._Modbus__stop_timer() assert not mb.req_pend -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_recv_recv_fcode(): '''Receive a response with wrong function code, which must be dropped''' mb = ModbusTestHelper() @@ -142,7 +142,7 @@ async def test_recv_recv_fcode(): mb._Modbus__stop_timer() assert not mb.req_pend -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_recv_resp_len(): '''Receive a response with wrong data length, which must be dropped''' mb = ModbusTestHelper() @@ -166,7 +166,7 @@ async def test_recv_resp_len(): mb._Modbus__stop_timer() assert not mb.req_pend -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_recv_unexpect_resp(): '''Receive a response when we havb't sent a request''' mb = ModbusTestHelper() @@ -183,7 +183,7 @@ async def test_recv_unexpect_resp(): assert mb.req_pend == False assert mb.que.qsize() == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_parse_resp(): '''Receive matching response and parse the values''' mb = ModbusTestHelper() @@ -210,7 +210,7 @@ async def test_parse_resp(): assert mb.que.qsize() == 0 assert not mb.req_pend -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_queue(): mb = ModbusTestHelper() mb.build_msg(1,3,0x3022,4) @@ -229,7 +229,7 @@ async def test_queue(): mb._Modbus__stop_timer() assert not mb.req_pend -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_queue2(): '''Check queue handling for build_msg() calls''' mb = ModbusTestHelper() @@ -279,7 +279,7 @@ async def test_queue2(): assert mb.que.qsize() == 0 assert not mb.req_pend -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_queue3(): '''Check queue handling for recv_req() calls''' mb = ModbusTestHelper() @@ -336,7 +336,7 @@ async def test_queue3(): assert mb.que.qsize() == 0 assert not mb.req_pend -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_timeout(my_loop): '''Test MODBUS response timeout and RTU retransmitting''' assert asyncio.get_running_loop() @@ -384,7 +384,7 @@ async def test_timeout(my_loop): assert mb.retry_cnt == 0 assert mb.send_calls == 4 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_recv_unknown_data(): '''Receive a response with an unknwon register''' mb = ModbusTestHelper() @@ -404,7 +404,7 @@ async def test_recv_unknown_data(): del mb.mb_reg_mapping[0x9000] -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_close(): '''Check queue handling for build_msg() calls''' mb = ModbusTestHelper() diff --git a/app/tests/test_modbus_tcp.py b/app/tests/test_modbus_tcp.py index dcb7e3e..cbf3819 100644 --- a/app/tests/test_modbus_tcp.py +++ b/app/tests/test_modbus_tcp.py @@ -189,7 +189,7 @@ def patch_mqtt_except(): with patch.object(Mqtt, 'publish', new_publish) as conn: yield conn -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_conn(config_conn, patch_open): _ = config_conn _ = patch_open @@ -209,7 +209,7 @@ async def test_modbus_conn(config_conn, patch_open): assert Infos.stat['proxy']['Inverter_Cnt'] == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_no_cnf(): _ = config_conn assert Infos.stat['proxy']['Inverter_Cnt'] == 0 @@ -217,7 +217,7 @@ async def test_modbus_no_cnf(): ModbusTcp(loop) assert Infos.stat['proxy']['Inverter_Cnt'] == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_timeout(config_conn, patch_open_timeout): _ = config_conn _ = patch_open_timeout @@ -235,7 +235,7 @@ async def test_modbus_timeout(config_conn, patch_open_timeout): await asyncio.sleep(0.01) assert Infos.stat['proxy']['Inverter_Cnt'] == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_value_err(config_conn, patch_open_value_error): _ = config_conn _ = patch_open_value_error @@ -253,7 +253,7 @@ async def test_modbus_value_err(config_conn, patch_open_value_error): await asyncio.sleep(0.01) assert Infos.stat['proxy']['Inverter_Cnt'] == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_conn_abort(config_conn, patch_open_conn_abort): _ = config_conn _ = patch_open_conn_abort @@ -271,7 +271,7 @@ async def test_modbus_conn_abort(config_conn, patch_open_conn_abort): await asyncio.sleep(0.01) assert Infos.stat['proxy']['Inverter_Cnt'] == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_cnf2(config_conn, patch_no_mqtt, patch_open): _ = config_conn _ = patch_open @@ -295,7 +295,7 @@ async def test_modbus_cnf2(config_conn, patch_no_mqtt, patch_open): await asyncio.sleep(0.01) assert Infos.stat['proxy']['Inverter_Cnt'] == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_cnf3(config_conn, patch_no_mqtt, patch_open): _ = config_conn _ = patch_open @@ -326,7 +326,7 @@ async def test_modbus_cnf3(config_conn, patch_no_mqtt, patch_open): await asyncio.sleep(0.01) assert Infos.stat['proxy']['Inverter_Cnt'] == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_err(config_conn, patch_mqtt_err, patch_open): _ = config_conn _ = patch_open @@ -357,7 +357,7 @@ async def test_mqtt_err(config_conn, patch_mqtt_err, patch_open): await asyncio.sleep(0.01) assert Infos.stat['proxy']['Inverter_Cnt'] == 0 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_except(config_conn, patch_mqtt_except, patch_open): _ = config_conn _ = patch_open diff --git a/app/tests/test_mqtt.py b/app/tests/test_mqtt.py index 623fb01..a93d250 100755 --- a/app/tests/test_mqtt.py +++ b/app/tests/test_mqtt.py @@ -132,7 +132,7 @@ def test_native_client(test_hostname, test_port): finally: c.loop_stop() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_connection(config_mqtt_conn): if NO_MOSQUITTO_TEST: pytest.skip('skipping, since Mosquitto is not reliable at the moment') @@ -157,7 +157,7 @@ async def test_mqtt_connection(config_mqtt_conn): await m.close() await m.publish('homeassistant/status', 'online') -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_ha_reconnect(config_mqtt_conn): if NO_MOSQUITTO_TEST: pytest.skip('skipping, since Mosquitto is not reliable at the moment') @@ -181,7 +181,7 @@ async def test_ha_reconnect(config_mqtt_conn): assert m.received == 2 await m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_no_config(config_no_conn, monkeypatch): _ = config_no_conn assert asyncio.get_running_loop() @@ -209,7 +209,7 @@ async def test_mqtt_no_config(config_no_conn, monkeypatch): finally: await m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_except_no_config(config_no_conn, monkeypatch, caplog): _ = config_no_conn @@ -239,7 +239,7 @@ async def test_mqtt_except_no_config(config_no_conn, monkeypatch, caplog): await m.close() assert 'Connection lost; Reconnecting in 5 seconds' in caplog.text -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_except_def_config(config_def_conn, monkeypatch, caplog): _ = config_def_conn @@ -274,7 +274,7 @@ async def test_mqtt_except_def_config(config_def_conn, monkeypatch, caplog): await m.close() assert 'MQTT is unconfigured; Check your config.toml!' in caplog.text -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_dispatch(config_mqtt_conn, aiomqtt_mock, spy_modbus_cmd): _ = config_mqtt_conn _ = aiomqtt_mock @@ -326,7 +326,7 @@ async def test_mqtt_dispatch(config_mqtt_conn, aiomqtt_mock, spy_modbus_cmd): finally: await m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_dispatch_cb(config_mqtt_conn, aiomqtt_mock): _ = config_mqtt_conn _ = aiomqtt_mock @@ -348,7 +348,7 @@ async def test_mqtt_dispatch_cb(config_mqtt_conn, aiomqtt_mock): finally: await m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_dispatch_err(config_mqtt_conn, aiomqtt_mock, spy_modbus_cmd, caplog): _ = config_mqtt_conn _ = aiomqtt_mock @@ -391,7 +391,7 @@ async def test_mqtt_dispatch_err(config_mqtt_conn, aiomqtt_mock, spy_modbus_cmd, finally: await m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_ignore_client_conn(config_mqtt_conn, spy_modbus_cmd_client): '''don't call function if connnection is not in server mode''' _ = config_mqtt_conn @@ -404,7 +404,7 @@ async def test_msg_ignore_client_conn(config_mqtt_conn, spy_modbus_cmd_client): finally: await m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_ignore_unknown_func(config_mqtt_conn): '''don't dispatch for unknwon function names''' _ = config_mqtt_conn @@ -416,7 +416,7 @@ async def test_ignore_unknown_func(config_mqtt_conn): finally: await m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_at_cmd_dispatch(config_mqtt_conn, spy_at_cmd): _ = config_mqtt_conn spy = spy_at_cmd @@ -429,7 +429,7 @@ async def test_at_cmd_dispatch(config_mqtt_conn, spy_at_cmd): finally: await m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_dcu_dispatch(config_mqtt_conn, spy_dcu_cmd): _ = config_mqtt_conn spy = spy_dcu_cmd @@ -441,7 +441,7 @@ async def test_dcu_dispatch(config_mqtt_conn, spy_dcu_cmd): finally: await m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_dcu_inv_value(config_mqtt_conn, spy_dcu_cmd): _ = config_mqtt_conn spy = spy_dcu_cmd diff --git a/app/tests/test_proxy.py b/app/tests/test_proxy.py index ace707e..2c4873f 100644 --- a/app/tests/test_proxy.py +++ b/app/tests/test_proxy.py @@ -59,7 +59,7 @@ def config_conn(test_hostname, test_port): } } -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_inverter_cb(config_conn): _ = config_conn @@ -72,7 +72,7 @@ async def test_inverter_cb(config_conn): await Proxy._cb_mqtt_is_up() spy.assert_called_once() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_is_up(config_conn): _ = config_conn @@ -81,7 +81,7 @@ async def test_mqtt_is_up(config_conn): await Proxy._cb_mqtt_is_up() spy.assert_called() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_mqtt_proxy_statt_invalid(config_conn): _ = config_conn diff --git a/app/tests/test_server.py b/app/tests/test_server.py index 1d94148..232812b 100644 --- a/app/tests/test_server.py +++ b/app/tests/test_server.py @@ -186,7 +186,7 @@ class TestHypercornLogHndl: class TestApp: - @pytest.mark.asyncio + @pytest.mark.asyncio(loop_scope="session") async def test_ready(self): """Test the ready route.""" @@ -204,7 +204,7 @@ class TestApp: result = await response.get_data() assert result == b"Is ready" - @pytest.mark.asyncio + @pytest.mark.asyncio(loop_scope="session") async def test_healthy(self): """Test the healthy route.""" reader = FakeReader() @@ -225,7 +225,7 @@ class TestApp: result = await response.get_data() assert result == b"I'm fine" - @pytest.mark.asyncio + @pytest.mark.asyncio(loop_scope="session") async def test_unhealthy(self, monkeypatch, caplog): """Test the healthy route.""" def result_false(self): diff --git a/app/tests/test_solarman.py b/app/tests/test_solarman.py index 71ad8f7..89bf864 100755 --- a/app/tests/test_solarman.py +++ b/app/tests/test_solarman.py @@ -932,7 +932,7 @@ def config_tsun_dcu1(): Proxy.class_init() Proxy.mqtt = Mqtt() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read_message(device_ind_msg): Config.act_config = {'solarman':{'enabled': True}} m = MemoryStream(device_ind_msg, (0,)) @@ -951,7 +951,7 @@ async def test_read_message(device_ind_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_invalid_start_byte(invalid_start_byte, device_ind_msg): # received a message with wrong start byte plus an valid message # the complete receive buffer must be cleared to @@ -974,7 +974,7 @@ async def test_invalid_start_byte(invalid_start_byte, device_ind_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_invalid_stop_byte(invalid_stop_byte): # received a message with wrong stop byte # the complete receive buffer must be cleared to @@ -996,7 +996,7 @@ async def test_invalid_stop_byte(invalid_stop_byte): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_invalid_stop_byte2(invalid_stop_byte, device_ind_msg): # received a message with wrong stop byte plus an valid message # only the first message must be discarded @@ -1023,7 +1023,7 @@ async def test_invalid_stop_byte2(invalid_stop_byte, device_ind_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_invalid_stop_start_byte(invalid_stop_byte, invalid_start_byte): # received a message with wrong stop byte plus an invalid message # with fron start byte @@ -1047,7 +1047,7 @@ async def test_invalid_stop_start_byte(invalid_stop_byte, invalid_start_byte): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_invalid_checksum(invalid_checksum, device_ind_msg): # received a message with wrong checksum plus an valid message # only the first message must be discarded @@ -1073,7 +1073,7 @@ async def test_invalid_checksum(invalid_checksum, device_ind_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read_message_twice(config_no_tsun_inv1, device_ind_msg, device_rsp_msg): _ = config_no_tsun_inv1 m = MemoryStream(device_ind_msg, (0,)) @@ -1095,7 +1095,7 @@ async def test_read_message_twice(config_no_tsun_inv1, device_ind_msg, device_rs assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read_message_in_chunks(device_ind_msg): Config.act_config = {'solarman':{'enabled': True}} m = MemoryStream(device_ind_msg, (4,11,0)) @@ -1118,7 +1118,7 @@ async def test_read_message_in_chunks(device_ind_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read_message_in_chunks2(my_loop, config_tsun_inv1, device_ind_msg): _ = config_tsun_inv1 m = MemoryStream(device_ind_msg, (4,10,0)) @@ -1144,7 +1144,7 @@ async def test_read_message_in_chunks2(my_loop, config_tsun_inv1, device_ind_msg assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read_two_messages(my_loop, config_tsun_allow_all, device_ind_msg, device_rsp_msg, inverter_ind_msg, inverter_rsp_msg): _ = config_tsun_allow_all m = MemoryStream(device_ind_msg, (0,)) @@ -1173,7 +1173,7 @@ async def test_read_two_messages(my_loop, config_tsun_allow_all, device_ind_msg, assert m.ifc.tx_fifo.get()==b'' m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read_two_messages2(my_loop, config_tsun_allow_all, inverter_ind_msg, inverter_ind_msg_81, inverter_rsp_msg, inverter_rsp_msg_81): _ = config_tsun_allow_all m = MemoryStream(inverter_ind_msg, (0,)) @@ -1199,7 +1199,7 @@ async def test_read_two_messages2(my_loop, config_tsun_allow_all, inverter_ind_m assert m.ifc.tx_fifo.get()==b'' m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read_two_messages3(my_loop, config_tsun_allow_all, device_ind_msg2, device_rsp_msg2, inverter_ind_msg, inverter_rsp_msg): # test device message received after the inverter masg _ = config_tsun_allow_all @@ -1229,7 +1229,7 @@ async def test_read_two_messages3(my_loop, config_tsun_allow_all, device_ind_msg assert m.ifc.tx_fifo.get()==b'' m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read_two_messages4(my_loop, config_tsun_dcu1, dcu_dev_ind_msg, dcu_dev_rsp_msg, dcu_data_ind_msg, dcu_data_rsp_msg): _ = config_tsun_dcu1 m = MemoryStream(dcu_dev_ind_msg, (0,)) @@ -1258,7 +1258,7 @@ async def test_read_two_messages4(my_loop, config_tsun_dcu1, dcu_dev_ind_msg, dc assert m.ifc.tx_fifo.get()==b'' m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_unkown_frame_code(my_loop, config_tsun_inv1, inverter_ind_msg_81, inverter_rsp_msg_81): _ = config_tsun_inv1 m = MemoryStream(inverter_ind_msg_81, (0,)) @@ -1277,7 +1277,7 @@ async def test_unkown_frame_code(my_loop, config_tsun_inv1, inverter_ind_msg_81, assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_unkown_message(my_loop, config_tsun_inv1, unknown_msg): _ = config_tsun_inv1 m = MemoryStream(unknown_msg, (0,)) @@ -1296,7 +1296,7 @@ async def test_unkown_message(my_loop, config_tsun_inv1, unknown_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_device_rsp(my_loop, config_tsun_inv1, device_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(device_rsp_msg, (0,), False) @@ -1315,7 +1315,7 @@ async def test_device_rsp(my_loop, config_tsun_inv1, device_rsp_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_inverter_rsp(my_loop, config_tsun_inv1, inverter_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(inverter_rsp_msg, (0,), False) @@ -1334,7 +1334,7 @@ async def test_inverter_rsp(my_loop, config_tsun_inv1, inverter_rsp_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_heartbeat_ind(my_loop, config_tsun_inv1, heartbeat_ind_msg, heartbeat_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(heartbeat_ind_msg, (0,)) @@ -1352,7 +1352,7 @@ async def test_heartbeat_ind(my_loop, config_tsun_inv1, heartbeat_ind_msg, heart assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_heartbeat_ind2(my_loop, config_tsun_inv1, heartbeat_ind_msg, heartbeat_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(heartbeat_ind_msg, (0,)) @@ -1371,7 +1371,7 @@ async def test_heartbeat_ind2(my_loop, config_tsun_inv1, heartbeat_ind_msg, hear assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_heartbeat_rsp(my_loop, config_tsun_inv1, heartbeat_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(heartbeat_rsp_msg, (0,), False) @@ -1390,7 +1390,7 @@ async def test_heartbeat_rsp(my_loop, config_tsun_inv1, heartbeat_rsp_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_sync_start_ind(my_loop, config_tsun_inv1, sync_start_ind_msg, sync_start_rsp_msg, sync_start_fwd_msg): _ = config_tsun_inv1 m = MemoryStream(sync_start_ind_msg, (0,)) @@ -1414,7 +1414,7 @@ async def test_sync_start_ind(my_loop, config_tsun_inv1, sync_start_ind_msg, syn m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_sync_start_rsp(my_loop, config_tsun_inv1, sync_start_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(sync_start_rsp_msg, (0,), False) @@ -1433,7 +1433,7 @@ async def test_sync_start_rsp(my_loop, config_tsun_inv1, sync_start_rsp_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_sync_end_ind(my_loop, config_tsun_inv1, sync_end_ind_msg, sync_end_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(sync_end_ind_msg, (0,)) @@ -1451,7 +1451,7 @@ async def test_sync_end_ind(my_loop, config_tsun_inv1, sync_end_ind_msg, sync_en assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_sync_end_rsp(my_loop, config_tsun_inv1, sync_end_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(sync_end_rsp_msg, (0,), False) @@ -1470,7 +1470,7 @@ async def test_sync_end_rsp(my_loop, config_tsun_inv1, sync_end_rsp_msg): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_build_modell_600(my_loop, config_tsun_allow_all, inverter_ind_msg): _ = config_tsun_allow_all m = MemoryStream(inverter_ind_msg, (0,)) @@ -1491,7 +1491,7 @@ async def test_build_modell_600(my_loop, config_tsun_allow_all, inverter_ind_msg assert m.ifc.tx_fifo.get()==b'' m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_build_modell_1600(my_loop, config_tsun_allow_all, inverter_ind_msg1600): _ = config_tsun_allow_all m = MemoryStream(inverter_ind_msg1600, (0,)) @@ -1505,7 +1505,7 @@ async def test_build_modell_1600(my_loop, config_tsun_allow_all, inverter_ind_ms assert 'TSOL-MS1600' == m.db.get_db_value(Register.EQUIPMENT_MODEL, 0) m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_build_modell_1800(my_loop, config_tsun_allow_all, inverter_ind_msg1800): _ = config_tsun_allow_all m = MemoryStream(inverter_ind_msg1800, (0,)) @@ -1519,7 +1519,7 @@ async def test_build_modell_1800(my_loop, config_tsun_allow_all, inverter_ind_ms assert 'TSOL-MS1800' == m.db.get_db_value(Register.EQUIPMENT_MODEL, 0) m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_build_modell_2000(my_loop, config_tsun_allow_all, inverter_ind_msg2000): _ = config_tsun_allow_all m = MemoryStream(inverter_ind_msg2000, (0,)) @@ -1533,7 +1533,7 @@ async def test_build_modell_2000(my_loop, config_tsun_allow_all, inverter_ind_ms assert 'TSOL-MS2000' == m.db.get_db_value(Register.EQUIPMENT_MODEL, 0) m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_build_modell_800(my_loop, config_tsun_allow_all, inverter_ind_msg800): _ = config_tsun_allow_all m = MemoryStream(inverter_ind_msg800, (0,)) @@ -1547,7 +1547,7 @@ async def test_build_modell_800(my_loop, config_tsun_allow_all, inverter_ind_msg assert 'TSOL-MS800' == m.db.get_db_value(Register.EQUIPMENT_MODEL, 0) m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_build_modell_900(my_loop, config_tsun_allow_all, inverter_ind_msg900): _ = config_tsun_allow_all m = MemoryStream(inverter_ind_msg900, (0,)) @@ -1561,7 +1561,7 @@ async def test_build_modell_900(my_loop, config_tsun_allow_all, inverter_ind_msg assert 'TSOL-MSxx00' == m.db.get_db_value(Register.EQUIPMENT_MODEL, 0) m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_build_logger_modell(my_loop, config_tsun_allow_all, device_ind_msg): _ = config_tsun_allow_all m = MemoryStream(device_ind_msg, (0,)) @@ -1573,7 +1573,7 @@ async def test_build_logger_modell(my_loop, config_tsun_allow_all, device_ind_ms assert 'V1.1.00.0B' == m.db.get_db_value(Register.COLLECTOR_FW_VERSION, 0).rstrip('\00') m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_iterator(my_loop, config_tsun_inv1): Message._registry.clear() m1 = SolarmanV5(None, ('test1.local', 1234), ifc=AsyncIfcImpl(), server_side=True, client_mode=False) @@ -1595,7 +1595,7 @@ async def test_msg_iterator(my_loop, config_tsun_inv1): assert test1 == 1 assert test2 == 1 -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_proxy_counter(my_loop, config_tsun_inv1): m = SolarmanV5(None, ('test.local', 1234), ifc=AsyncIfcImpl(), server_side=True, client_mode=False) assert m.new_data == {} @@ -1614,7 +1614,7 @@ async def test_proxy_counter(my_loop, config_tsun_inv1): assert 0 == m.db.stat['proxy']['Unknown_Msg'] m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_build_modbus_req(my_loop, config_tsun_inv1, device_ind_msg, device_rsp_msg, inverter_ind_msg, inverter_rsp_msg, msg_modbus_cmd): _ = config_tsun_inv1 m = MemoryStream(device_ind_msg, (0,), True) @@ -1649,7 +1649,7 @@ async def test_msg_build_modbus_req(my_loop, config_tsun_inv1, device_ind_msg, d assert m.ifc.tx_fifo.get()== b'' m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_at_cmd(my_loop, config_tsun_allow_all, device_ind_msg, device_rsp_msg, inverter_ind_msg, inverter_rsp_msg, at_command_ind_msg, at_command_rsp_msg): _ = config_tsun_allow_all m = MemoryStream(device_ind_msg, (0,), True) @@ -1709,7 +1709,7 @@ async def test_at_cmd(my_loop, config_tsun_allow_all, device_ind_msg, device_rsp assert Proxy.mqtt.data == "" m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_at_cmd_blocked(my_loop, config_tsun_allow_all, device_ind_msg, device_rsp_msg, inverter_ind_msg, inverter_rsp_msg, at_command_ind_msg): _ = config_tsun_allow_all m = MemoryStream(device_ind_msg, (0,), True) @@ -1744,7 +1744,7 @@ async def test_at_cmd_blocked(my_loop, config_tsun_allow_all, device_ind_msg, de assert Proxy.mqtt.data == "'AT+WEBU' is forbidden" m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_at_cmd_ind(my_loop, config_tsun_inv1, at_command_ind_msg, at_command_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(at_command_ind_msg, (0,), False) @@ -1780,7 +1780,7 @@ async def test_at_cmd_ind(my_loop, config_tsun_inv1, at_command_ind_msg, at_comm m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_at_cmd_ind_block(my_loop, config_tsun_inv1, at_command_ind_msg_block): _ = config_tsun_inv1 m = MemoryStream(at_command_ind_msg_block, (0,), False) @@ -1809,7 +1809,7 @@ async def test_at_cmd_ind_block(my_loop, config_tsun_inv1, at_command_ind_msg_bl assert Proxy.mqtt.data == "" m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_at_command_rsp1(my_loop, config_tsun_inv1, at_command_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(at_command_rsp_msg) @@ -1829,7 +1829,7 @@ async def test_msg_at_command_rsp1(my_loop, config_tsun_inv1, at_command_rsp_msg assert m.db.stat['proxy']['Modbus_Command'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_at_command_rsp2(my_loop, config_tsun_inv1, at_command_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(at_command_rsp_msg) @@ -1851,7 +1851,7 @@ async def test_msg_at_command_rsp2(my_loop, config_tsun_inv1, at_command_rsp_msg assert Proxy.mqtt.data == "+ok" m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_at_command_rsp3(my_loop, config_tsun_inv1, at_command_interim_rsp_msg): _ = config_tsun_inv1 m = MemoryStream(at_command_interim_rsp_msg) @@ -1877,7 +1877,7 @@ async def test_msg_at_command_rsp3(my_loop, config_tsun_inv1, at_command_interim assert Proxy.mqtt.data == "" m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_modbus_req(my_loop, config_tsun_inv1, msg_modbus_cmd, msg_modbus_cmd_fwd): _ = config_tsun_inv1 m = MemoryStream(b'') @@ -1906,7 +1906,7 @@ async def test_msg_modbus_req(my_loop, config_tsun_inv1, msg_modbus_cmd, msg_mod assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_modbus_req_seq(my_loop, config_tsun_inv1, msg_modbus_cmd_seq): _ = config_tsun_inv1 m = MemoryStream(b'') @@ -1935,7 +1935,7 @@ async def test_msg_modbus_req_seq(my_loop, config_tsun_inv1, msg_modbus_cmd_seq) assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_modbus_req2(my_loop, config_tsun_inv1, msg_modbus_cmd_crc_err): _ = config_tsun_inv1 m = MemoryStream(b'') @@ -1963,7 +1963,7 @@ async def test_msg_modbus_req2(my_loop, config_tsun_inv1, msg_modbus_cmd_crc_err assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_unknown_cmd_req(my_loop, config_tsun_inv1, msg_unknown_cmd): _ = config_tsun_inv1 m = MemoryStream(msg_unknown_cmd, (0,), False) @@ -1986,7 +1986,7 @@ async def test_msg_unknown_cmd_req(my_loop, config_tsun_inv1, msg_unknown_cmd): assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_modbus_rsp1(my_loop, config_tsun_inv1, msg_modbus_rsp): '''Modbus response without a valid Modbus request must be dropped''' _ = config_tsun_inv1 @@ -2006,7 +2006,7 @@ async def test_msg_modbus_rsp1(my_loop, config_tsun_inv1, msg_modbus_rsp): assert m.db.stat['proxy']['Modbus_Command'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_modbus_rsp2(my_loop, config_tsun_inv1, msg_modbus_rsp): '''Modbus response with a valid Modbus request must be forwarded''' _ = config_tsun_inv1 # setup config structure @@ -2044,7 +2044,7 @@ async def test_msg_modbus_rsp2(my_loop, config_tsun_inv1, msg_modbus_rsp): m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_modbus_rsp3(my_loop, config_tsun_inv1, msg_modbus_rsp): '''Modbus response with a valid Modbus request must be forwarded''' _ = config_tsun_inv1 @@ -2081,7 +2081,7 @@ async def test_msg_modbus_rsp3(my_loop, config_tsun_inv1, msg_modbus_rsp): m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_unknown_rsp(my_loop, config_tsun_inv1, msg_unknown_cmd_rsp): _ = config_tsun_inv1 m = MemoryStream(msg_unknown_cmd_rsp) @@ -2100,7 +2100,7 @@ async def test_msg_unknown_rsp(my_loop, config_tsun_inv1, msg_unknown_cmd_rsp): assert m.db.stat['proxy']['Modbus_Command'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_modbus_invalid(my_loop, config_tsun_inv1, msg_modbus_invalid): _ = config_tsun_inv1 m = MemoryStream(msg_modbus_invalid, (0,), False) @@ -2115,7 +2115,7 @@ async def test_msg_modbus_invalid(my_loop, config_tsun_inv1, msg_modbus_invalid) assert m.db.stat['proxy']['Modbus_Command'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_modbus_fragment(my_loop, config_tsun_inv1, msg_modbus_rsp): _ = config_tsun_inv1 # receive more bytes than expected (7 bytes from the next msg) @@ -2141,7 +2141,7 @@ async def test_msg_modbus_fragment(my_loop, config_tsun_inv1, msg_modbus_rsp): assert m.db.stat['proxy']['Modbus_Command'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_polling(my_loop, config_tsun_inv1, heartbeat_ind_msg, heartbeat_rsp_msg): _ = config_tsun_inv1 assert asyncio.get_running_loop() @@ -2181,7 +2181,7 @@ async def test_modbus_polling(my_loop, config_tsun_inv1, heartbeat_ind_msg, hear assert next(m.mb_timer.exp_count) == 4 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_scaning(config_tsun_scan, heartbeat_ind_msg, heartbeat_rsp_msg, msg_modbus_rsp, msg_modbus_rsp_inv_id2): _ = config_tsun_scan assert asyncio.get_running_loop() @@ -2254,7 +2254,7 @@ async def test_modbus_scaning(config_tsun_scan, heartbeat_ind_msg, heartbeat_rsp assert next(m.mb_timer.exp_count) == 3 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_scaning_inv_rsp(config_tsun_scan, heartbeat_ind_msg, heartbeat_rsp_msg, msg_modbus_rsp_mb_4): _ = config_tsun_scan assert asyncio.get_running_loop() @@ -2309,7 +2309,7 @@ async def test_modbus_scaning_inv_rsp(config_tsun_scan, heartbeat_ind_msg, heart assert next(m.mb_timer.exp_count) == 2 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_start_client_mode(my_loop, config_tsun_inv1, str_test_ip): _ = config_tsun_inv1 assert asyncio.get_running_loop() @@ -2341,7 +2341,7 @@ async def test_start_client_mode(my_loop, config_tsun_inv1, str_test_ip): assert next(m.mb_timer.exp_count) == 3 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_start_client_mode_scan(config_tsun_scan_dcu, str_test_ip, dcu_modbus_rsp): _ = config_tsun_scan_dcu assert asyncio.get_running_loop() @@ -2414,7 +2414,7 @@ async def test_start_client_mode_scan(config_tsun_scan_dcu, str_test_ip, dcu_mod m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_timeout(my_loop, config_tsun_inv1): _ = config_tsun_inv1 m = MemoryStream(b'') @@ -2428,7 +2428,7 @@ async def test_timeout(my_loop, config_tsun_inv1): m.state = State.closed m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_fnc_dispatch(my_loop, config_tsun_inv1): def msg(): return @@ -2450,7 +2450,7 @@ async def test_fnc_dispatch(my_loop, config_tsun_inv1): assert _obj == m.msg_unknown assert _str == "'msg_unknown'" -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_timestamp(my_loop, config_tsun_inv1): m = MemoryStream(b'') ts = m._timestamp() @@ -2477,7 +2477,7 @@ class InverterTest(InverterBase): dst.ifc.tx_add(src.ifc.fwd_fifo.get()) -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_proxy_at_cmd(my_loop, config_tsun_inv1, patch_open_connection, at_command_ind_msg, at_command_rsp_msg): _ = config_tsun_inv1 _ = patch_open_connection @@ -2515,7 +2515,7 @@ async def test_proxy_at_cmd(my_loop, config_tsun_inv1, patch_open_connection, at assert Proxy.mqtt.key == '' assert Proxy.mqtt.data == "" -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_proxy_at_blocked(my_loop, config_tsun_inv1, patch_open_connection, at_command_ind_msg_block, at_command_rsp_msg): _ = config_tsun_inv1 _ = patch_open_connection @@ -2553,7 +2553,7 @@ async def test_proxy_at_blocked(my_loop, config_tsun_inv1, patch_open_connection assert Proxy.mqtt.key == 'tsun/inv1/at_resp' assert Proxy.mqtt.data == "+ok" -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_dcu_cmd(my_loop, config_tsun_allow_all, dcu_dev_ind_msg, dcu_dev_rsp_msg, dcu_data_ind_msg, dcu_data_rsp_msg, dcu_command_ind_msg, dcu_command_rsp_msg): '''test dcu_power command fpr a DCU device with sensor 0x3026''' _ = config_tsun_allow_all @@ -2600,7 +2600,7 @@ async def test_dcu_cmd(my_loop, config_tsun_allow_all, dcu_dev_ind_msg, dcu_dev_ assert Proxy.mqtt.data == "+ok" Proxy.mqtt.clear() # clear last test result -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_dcu_cmd_not_supported(my_loop, config_tsun_allow_all, device_ind_msg, device_rsp_msg, inverter_ind_msg, inverter_rsp_msg): '''test that an inverter don't accept the dcu_power command''' _ = config_tsun_allow_all @@ -2632,7 +2632,7 @@ async def test_dcu_cmd_not_supported(my_loop, config_tsun_allow_all, device_ind_ assert m.sent_pdu == b'' Proxy.mqtt.clear() # clear last test result -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_proxy_dcu_cmd(my_loop, config_tsun_dcu1, patch_open_connection, dcu_command_ind_msg, dcu_command_rsp_msg): _ = config_tsun_inv1 _ = patch_open_connection diff --git a/app/tests/test_solarman_emu.py b/app/tests/test_solarman_emu.py index d511f22..7be7efa 100644 --- a/app/tests/test_solarman_emu.py +++ b/app/tests/test_solarman_emu.py @@ -128,7 +128,7 @@ def heartbeat_ind(): msg = b'\xa5\x01\x00\x10G\x00\x01\x00\x00\x00\x00\x00Y\x15' return msg -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_emu_init_close(my_loop, config_tsun_inv1): _ = config_tsun_inv1 assert asyncio.get_running_loop() @@ -137,7 +137,7 @@ async def test_emu_init_close(my_loop, config_tsun_inv1): cld.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_emu_start(my_loop, config_tsun_inv1, msg_modbus_rsp, str_test_ip, device_ind_msg): _ = config_tsun_inv1 assert asyncio.get_running_loop() @@ -155,7 +155,7 @@ async def test_emu_start(my_loop, config_tsun_inv1, msg_modbus_rsp, str_test_ip, assert inv.ifc.fwd_fifo.peek() == device_ind_msg cld.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_snd_hb(my_loop, config_tsun_inv1, heartbeat_ind): _ = config_tsun_inv1 inv = InvStream() @@ -166,7 +166,7 @@ async def test_snd_hb(my_loop, config_tsun_inv1, heartbeat_ind): assert cld.ifc.tx_fifo.peek() == heartbeat_ind cld.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_snd_inv_data(my_loop, config_tsun_inv1, inverter_ind_msg, inverter_rsp_msg): _ = config_tsun_inv1 inv = InvStream() @@ -208,7 +208,7 @@ async def test_snd_inv_data(my_loop, config_tsun_inv1, inverter_ind_msg, inverte cld.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_rcv_invalid(my_loop, config_tsun_inv1, inverter_ind_msg, inverter_rsp_msg): _ = config_tsun_inv1 inv = InvStream() diff --git a/app/tests/test_talent.py b/app/tests/test_talent.py index 01ef0fe..b6b6494 100644 --- a/app/tests/test_talent.py +++ b/app/tests/test_talent.py @@ -1048,7 +1048,7 @@ def msg_inverter_ms3000_ind(): # Data indication from the controller msg += b'\x53\x00\x66' # | S.f' return msg -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_read_message(msg_contact_info): Config.act_config = {'tsun':{'enabled': True}} m = MemoryStream(msg_contact_info, (0,)) @@ -2406,7 +2406,7 @@ def test_msg_modbus_fragment(config_tsun_inv1, msg_modbus_rsp20): assert m.db.stat['proxy']['Modbus_Command'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_msg_build_modbus_req(config_tsun_inv1, msg_modbus_cmd): _ = config_tsun_inv1 m = MemoryStream(b'', (0,), True) @@ -2445,7 +2445,7 @@ def test_modbus_no_polling(config_no_modbus_poll, msg_get_time): assert m.db.stat['proxy']['Unknown_Ctrl'] == 0 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_polling(config_tsun_inv1, msg_inverter_ind): _ = config_tsun_inv1 assert asyncio.get_running_loop() @@ -2486,7 +2486,7 @@ async def test_modbus_polling(config_tsun_inv1, msg_inverter_ind): assert next(m.mb_timer.exp_count) == 4 m.close() -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_modbus_scaning(config_tsun_inv1, msg_inverter_ind, msg_modbus_rsp21): _ = config_tsun_inv1 assert asyncio.get_running_loop() diff --git a/app/tests/test_web_route.py b/app/tests/test_web_route.py index 4082f61..9abef58 100644 --- a/app/tests/test_web_route.py +++ b/app/tests/test_web_route.py @@ -61,7 +61,7 @@ def create_inverter_client(config_conn): return inv -@pytest.mark.asyncio +@pytest.mark.asyncio(loop_scope="session") async def test_home(client): """Test the home route.""" response = await client.get('/') @@ -69,7 +69,7 @@ async def test_home(client): assert response.mimetype == 'text/html' assert b"