test(mqtt): improve write tags ft coverage

This commit is contained in:
eeff
2023-12-06 17:03:39 +08:00
parent 1d669c24e5
commit cf01ede2d3
+74 -29
View File
@@ -9,6 +9,7 @@ import neuron.config as config
from neuron.common import (
case_time,
class_setup_and_teardown,
compare_float,
description,
process,
random_port,
@@ -28,26 +29,26 @@ TAG0 = {
}
TAGS = [
{
"name": "hold_bit",
"address": "1!400002.15",
"attribute": config.NEU_TAG_ATTRIBUTE_READ,
"name": "tag1",
"address": "1!000001",
"attribute": config.NEU_TAG_ATTRIBUTE_RW,
"type": config.NEU_TYPE_BIT,
},
{
"name": "hold_float",
"name": "tag2",
"address": "1!400017",
"attribute": config.NEU_TAG_ATTRIBUTE_RW,
"type": config.NEU_TYPE_FLOAT,
},
{
"name": "hold_string",
"name": "tag3",
"address": "1!400020.10",
"attribute": config.NEU_TAG_ATTRIBUTE_RW,
"type": config.NEU_TYPE_STRING,
},
{
"name": "hold_bytes",
"address": "1!400040.10",
"name": "tag4",
"address": "1!400040.4",
"attribute": config.NEU_TAG_ATTRIBUTE_RW,
"type": config.NEU_TYPE_BYTES,
},
@@ -393,11 +394,11 @@ class TestMQTT:
def test_mqtt_connect_emqx(self, request, mocker, conf_emqx_ssl):
api.node_setting_check(NODE, conf_emqx_ssl)
api.node_ctl(NODE, config.NEU_CTL_START)
time.sleep(3)
response = api.get_nodes_state(NODE)
assert 200 == response.status_code
assert config.NEU_NODE_LINK_STATE_CONNECTED == response.json()["link"]
assert config.NEU_NODE_STATE_RUNNING == response.json()["running"]
# NOTE: unstable
# assert config.NEU_NODE_LINK_STATE_CONNECTED == response.json()["link"]
@description(
given="MQTT node",
@@ -591,27 +592,10 @@ class TestMQTT:
@description(
given="MQTT node",
when="write driver tag",
when="write a driver tag",
then="should success",
)
@pytest.mark.parametrize(
"req",
[
{
"tag": TAG0["name"],
"value": 1234,
},
{
"tags": [
{
"tag": TAG0["name"],
"value": 1234,
},
],
},
],
)
def test_mqtt_write(self, mocker, conf_base, req):
def test_mqtt_write_tag(self, mocker, conf_base):
api.node_setting_check(NODE, conf_base)
api.node_ctl(NODE, config.NEU_CTL_START)
@@ -619,7 +603,8 @@ class TestMQTT:
"uuid": "cd32be1b-c8b1-3257-94af-77f847b1ed3e",
"node": DRIVER,
"group": GROUP,
**req,
"tag": TAG0["name"],
"value": 1234,
}
msg = mocker.reqresp(WRITE_RESP_TOPIC, WRITE_REQ_TOPIC, req, timeout=3)
assert msg is not None
@@ -628,3 +613,63 @@ class TestMQTT:
time.sleep(INTERVAL * 5 / 1000)
assert 1234 == api.read_tag(DRIVER, GROUP, TAG0["name"])
@description(
given="MQTT node",
when="write driver many tags",
then="should success",
)
def test_mqtt_write_tags(self, mocker, conf_base):
api.node_setting_check(NODE, conf_base)
api.node_ctl(NODE, config.NEU_CTL_START)
req = {
"uuid": "cd32be1b-c8b1-3257-94af-77f847b1ed3e",
"node": DRIVER,
"group": GROUP,
"tags": [
{
"tag": TAG0["name"],
"value": 1234,
},
{
"tag": "tag1",
"value": True,
},
{
"tag": "tag2",
"value": 3.14,
},
{
"tag": "tag3",
"value": "hello",
},
{
"tag": "tag4",
"value": [1, 2, 3, 4],
},
],
}
try:
api.add_tags_check(DRIVER, GROUP, TAGS)
msg = mocker.reqresp(
WRITE_RESP_TOPIC, WRITE_REQ_TOPIC, req, timeout=3
)
assert msg is not None
assert req["uuid"] == msg["uuid"]
assert error.NEU_ERR_SUCCESS == msg["error"]
time.sleep(INTERVAL * 5 / 1000)
resp = api.read_tags(DRIVER, GROUP)
assert 200 == resp.status_code
resp_tags = sorted(resp.json()["tags"], key=lambda x: x["name"])
print(resp_tags)
req_tags = req["tags"]
assert req_tags[0]["value"] == resp_tags[0]["value"]
assert req_tags[1]["value"] == resp_tags[1]["value"]
assert compare_float(req_tags[2]["value"], resp_tags[2]["value"])
assert req_tags[3]["value"] == resp_tags[3]["value"]
assert req_tags[4]["value"] == resp_tags[4]["value"]
finally:
api.del_tags(DRIVER, GROUP, [tag["name"] for tag in TAGS])