Skip to content

Commit 093d44d

Browse files
authored
Added unit tests for attribute updates, attribute requests, connect and disconnect requests (#1943)
* refactor mqtt on_attribute update function * implement basic mqtt-tests * implement on_attribute_update mqtt unit-tests * add configs for an attribute update section * refactor on_attribute_requests, connect, disconnect * add more robust error handling fix bug stopping whole requests cicle execution. * implement basic mqtt tests for on attribute request * implement basic mqtt tests for on attribute request * add more test cases for on_attribute_request method * implement on_connect request mqtt tests * implement on-disconnect mqtt unit-tests * fix logic for handling client attributes for mqtt connector * add blank line at the end of each file * fix error with incorrect parsing for client attributes on_attribute_request
1 parent 865f3ee commit 093d44d

19 files changed

+1502
-211
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"retain": false,
3+
"scope": "client",
4+
"topicFilter": "v1/devices/me/attributes/request",
5+
"deviceInfo": {
6+
"deviceNameExpressionSource": "message",
7+
"deviceNameExpression": "${serialNumber}"
8+
},
9+
"attributeNameExpressionSource": "message",
10+
"attributeNameExpression": "${versionAttribute}",
11+
"topicExpression": "devices/${deviceName}/attrs",
12+
"valueExpression": "{\"${attributeKey}\": ${attributeValue}}"
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"attributeNameExpression": "${versionAttribute}, ${versionModel}",
3+
"attributeNameExpressionSource": "message",
4+
"deviceInfo": {
5+
"deviceNameExpression": "${serialNumber}",
6+
"deviceNameExpressionSource": "message"
7+
},
8+
"retain": false,
9+
"scope": "client",
10+
"topicExpression": "devices/${deviceName}/attrs",
11+
"topicFilter": "v1/devices/me/attributes/request",
12+
"valueExpression": "{\"${attributeKey}\": ${attributeValue}}"
13+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"attributeNameExpression": "${versionAttribute}, ${versionModel}",
3+
"attributeNameExpressionSource": "message",
4+
"deviceInfo": {
5+
"deviceNameExpression": "${serialNumber}",
6+
"deviceNameExpressionSource": "message"
7+
},
8+
"retain": false,
9+
"topicExpression": "devices/${deviceName}/attrs",
10+
"topicFilter": "v1/devices/me/attributes/request",
11+
"valueExpression": "{\"${attributeKey}\": ${attributeValue}}"
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"attributeNameExpression": "${versionAttribute}",
3+
"attributeNameExpressionSource": "message",
4+
"deviceInfo": {
5+
"deviceNameExpression": "${serialNumber}",
6+
"deviceNameExpressionSource": "message"
7+
},
8+
"retain": false,
9+
"topicExpression": "devices/${deviceName}/attrs",
10+
"topicFilter": "v1/devices/me/attributes/request",
11+
"valueExpression": "{\"${attributeKey}\": ${attributeValue}}"
12+
}
13+
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
{
2+
"broker": {
3+
"host": "127.0.0.1",
4+
"port": 1885,
5+
"version": 5,
6+
"clientId": "ThingsBoard_gateway",
7+
"security": {
8+
"type": "basic",
9+
"username": "user1",
10+
"password": "user1"
11+
},
12+
"maxNumberOfWorkers": 100,
13+
"maxMessageNumberPerWorker": 10
14+
},
15+
"mapping": [
16+
{
17+
"topicFilter": "sensor/attributes",
18+
"subscriptionQos": 1,
19+
"converter": {
20+
"type": "json",
21+
"deviceInfo": {
22+
"deviceNameExpressionSource": "message",
23+
"deviceNameExpression": "SN-001",
24+
"deviceProfileExpressionSource": "message",
25+
"deviceProfileExpression": "${sensorType}"
26+
},
27+
"sendDataOnlyOnChange": false,
28+
"timeout": 60000,
29+
"attributes": [
30+
{
31+
"type": "string",
32+
"key": "model",
33+
"value": "${sensorModel}"
34+
},
35+
{
36+
"type": "string",
37+
"key": "status",
38+
"value": "on"
39+
}
40+
],
41+
"timeseries": [
42+
{
43+
"type": "double",
44+
"key": "temperature",
45+
"value": "${temp}"
46+
},
47+
{
48+
"type": "double",
49+
"key": "humidity",
50+
"value": "${hum}"
51+
},
52+
{
53+
"type": "string",
54+
"key": "combine",
55+
"value": "${hum}:${temp}"
56+
}
57+
]
58+
}
59+
},
60+
{
61+
"topicFilter": "sensor/+/data",
62+
"subscriptionQos": 1,
63+
"converter": {
64+
"type": "json",
65+
"deviceInfo": {
66+
"deviceNameExpressionSource": "topic",
67+
"deviceNameExpression": "(?<=sensor/)(.*?)(?=/data)",
68+
"deviceProfileExpressionSource": "constant",
69+
"deviceProfileExpression": "Thermometer"
70+
},
71+
"sendDataOnlyOnChange": false,
72+
"timeout": 60000,
73+
"attributes": [
74+
{
75+
"type": "string",
76+
"key": "model",
77+
"value": "${sensorModel}"
78+
}
79+
],
80+
"timeseries": [
81+
{
82+
"type": "double",
83+
"key": "temperature",
84+
"value": "${temp}"
85+
},
86+
{
87+
"type": "string",
88+
"key": "humidity",
89+
"value": "${hum}"
90+
}
91+
]
92+
}
93+
}
94+
],
95+
"requestsMapping": {
96+
"connectRequests": [],
97+
"disconnectRequests": [],
98+
"attributeRequests": [],
99+
"attributeUpdates": [
100+
{
101+
"retain": true,
102+
"deviceNameFilter": ".*",
103+
"attributeFilter": "^firmwareVersion\\.*",
104+
"topicExpression": "sensor/${deviceName}/firmwareVersion",
105+
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
106+
}
107+
],
108+
"serverSideRpc": []
109+
}
110+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
{
2+
"broker": {
3+
"host": "127.0.0.1",
4+
"port": 1885,
5+
"version": 5,
6+
"clientId": "ThingsBoard_gateway",
7+
"security": {
8+
"type": "basic",
9+
"username": "user1",
10+
"password": "user1"
11+
},
12+
"maxNumberOfWorkers": 100,
13+
"maxMessageNumberPerWorker": 10
14+
},
15+
"mapping": [
16+
{
17+
"topicFilter": "sensor/attributes",
18+
"subscriptionQos": 1,
19+
"converter": {
20+
"type": "json",
21+
"deviceInfo": {
22+
"deviceNameExpressionSource": "message",
23+
"deviceNameExpression": "SN-001",
24+
"deviceProfileExpressionSource": "message",
25+
"deviceProfileExpression": "${sensorType}"
26+
},
27+
"sendDataOnlyOnChange": false,
28+
"timeout": 60000,
29+
"attributes": [
30+
{
31+
"type": "string",
32+
"key": "model",
33+
"value": "${sensorModel}"
34+
},
35+
{
36+
"type": "string",
37+
"key": "status",
38+
"value": "on"
39+
}
40+
],
41+
"timeseries": [
42+
{
43+
"type": "double",
44+
"key": "temperature",
45+
"value": "${temp}"
46+
},
47+
{
48+
"type": "double",
49+
"key": "humidity",
50+
"value": "${hum}"
51+
},
52+
{
53+
"type": "string",
54+
"key": "combine",
55+
"value": "${hum}:${temp}"
56+
}
57+
]
58+
}
59+
},
60+
{
61+
"topicFilter": "sensor/+/data",
62+
"subscriptionQos": 1,
63+
"converter": {
64+
"type": "json",
65+
"deviceInfo": {
66+
"deviceNameExpressionSource": "topic",
67+
"deviceNameExpression": "(?<=sensor/)(.*?)(?=/data)",
68+
"deviceProfileExpressionSource": "constant",
69+
"deviceProfileExpression": "Thermometer"
70+
},
71+
"sendDataOnlyOnChange": false,
72+
"timeout": 60000,
73+
"attributes": [
74+
{
75+
"type": "string",
76+
"key": "model",
77+
"value": "${sensorModel}"
78+
}
79+
],
80+
"timeseries": [
81+
{
82+
"type": "double",
83+
"key": "temperature",
84+
"value": "${temp}"
85+
},
86+
{
87+
"type": "string",
88+
"key": "humidity",
89+
"value": "${hum}"
90+
}
91+
]
92+
}
93+
}
94+
],
95+
"requestsMapping": {
96+
"connectRequests": [],
97+
"disconnectRequests": [],
98+
"attributeRequests": [],
99+
"attributeUpdates": [
100+
{
101+
"retain": true,
102+
"deviceNameFilter": ".*",
103+
"attributeFilter": "^firmwareVersion\\d+",
104+
"topicExpression": "sensor/${deviceName}/firmwareVersion",
105+
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
106+
},
107+
{
108+
"retain": true,
109+
"deviceNameFilter": ".*",
110+
"attributeFilter": "^model\\d+",
111+
"topicExpression": "sensor/${deviceName}/model",
112+
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
113+
}
114+
],
115+
"serverSideRpc": []
116+
}
117+
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
{
2+
"broker": {
3+
"host": "127.0.0.1",
4+
"port": 1885,
5+
"version": 5,
6+
"clientId": "ThingsBoard_gateway",
7+
"security": {
8+
"type": "basic",
9+
"username": "user1",
10+
"password": "user1"
11+
},
12+
"maxNumberOfWorkers": 100,
13+
"maxMessageNumberPerWorker": 10
14+
},
15+
"mapping": [
16+
{
17+
"topicFilter": "sensor/attributes",
18+
"subscriptionQos": 1,
19+
"converter": {
20+
"type": "json",
21+
"deviceInfo": {
22+
"deviceNameExpressionSource": "message",
23+
"deviceNameExpression": "SN-001",
24+
"deviceProfileExpressionSource": "message",
25+
"deviceProfileExpression": "${sensorType}"
26+
},
27+
"sendDataOnlyOnChange": false,
28+
"timeout": 60000,
29+
"attributes": [
30+
{
31+
"type": "string",
32+
"key": "model",
33+
"value": "${sensorModel}"
34+
},
35+
{
36+
"type": "string",
37+
"key": "status",
38+
"value": "on"
39+
}
40+
],
41+
"timeseries": [
42+
{
43+
"type": "double",
44+
"key": "temperature",
45+
"value": "${temp}"
46+
},
47+
{
48+
"type": "double",
49+
"key": "humidity",
50+
"value": "${hum}"
51+
},
52+
{
53+
"type": "string",
54+
"key": "combine",
55+
"value": "${hum}:${temp}"
56+
}
57+
]
58+
}
59+
},
60+
{
61+
"topicFilter": "sensor/+/data",
62+
"subscriptionQos": 1,
63+
"converter": {
64+
"type": "json",
65+
"deviceInfo": {
66+
"deviceNameExpressionSource": "topic",
67+
"deviceNameExpression": "(?<=sensor/)(.*?)(?=/data)",
68+
"deviceProfileExpressionSource": "constant",
69+
"deviceProfileExpression": "Thermometer"
70+
},
71+
"sendDataOnlyOnChange": false,
72+
"timeout": 60000,
73+
"attributes": [
74+
{
75+
"type": "string",
76+
"key": "model",
77+
"value": "${sensorModel}"
78+
}
79+
],
80+
"timeseries": [
81+
{
82+
"type": "double",
83+
"key": "temperature",
84+
"value": "${temp}"
85+
},
86+
{
87+
"type": "string",
88+
"key": "humidity",
89+
"value": "${hum}"
90+
}
91+
]
92+
}
93+
}
94+
],
95+
"requestsMapping": {
96+
"connectRequests": [],
97+
"disconnectRequests": [],
98+
"attributeRequests": [],
99+
"attributeUpdates": [
100+
{
101+
"retain": true,
102+
"deviceNameFilter": ".*",
103+
"attributeFilter": "",
104+
"topicExpression": "sensor/${deviceName}/${attributeKey}",
105+
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
106+
}
107+
],
108+
"serverSideRpc": []
109+
}
110+
}

0 commit comments

Comments
 (0)