diff --git a/unittest/data/TestWidget-MQTT.json b/unittest/data/TestWidget-MQTT.json index 57e9435..7a1d144 100644 --- a/unittest/data/TestWidget-MQTT.json +++ b/unittest/data/TestWidget-MQTT.json @@ -6,5 +6,8 @@ "h": 56, "label": "On", "type": 1, - "mqtt": [ "/topic1 Hello", "/t2 Wereld", "/topic3", "", "/top4" ] + "mqtt": [ + { "topic": "/topic1", "message": {"string": 100, "args": {"int":100, "str":"string1"}}}, + { "topic": "/topic2", "message": {"string": 200, "args": { "int":200, "str":"string2"}}} + ] } diff --git a/unittest/test_widget.c b/unittest/test_widget.c index 9a9f254..03620e1 100644 --- a/unittest/test_widget.c +++ b/unittest/test_widget.c @@ -83,29 +83,20 @@ static void widget_default_mqtt_send(struct widget_t *w, void *ev_data) { LOG(LL_INFO, ("MQTT string: '%s'", (char *)w->user_data)); // Traverse Array for (idx = 0; json_scanf_array_elem(w->user_data, strlen(w->user_data), "", idx, &val) > 0; idx++) { - char *t=NULL, *m=NULL; - uint16_t t_len=0, m_len=0; - char *topic; + char *topic, *message; LOG(LL_DEBUG, ("Index %d, token [%.*s]", idx, val.len, val.ptr)); - t=(char*)val.ptr; - m=strstr(val.ptr, " "); - if (m-val.ptr <= val.len) { - LOG(LL_INFO, ("Space found")); - t_len=m-t; - m++; - m_len=val.len-t_len-1; - } else { - t_len=val.len; - m_len=0; - m=NULL; + if (val.len==0) { + LOG(LL_ERROR, ("mqtt element %d is empty token", idx)); + continue; } - if ((topic=malloc(t_len+1))) { - memcpy(topic, t, t_len); - topic[t_len]=0; - LOG(LL_INFO, ("Sending topic='%s', message='%.*s'", topic, m_len, m)); - free(topic); + if (json_scanf(val.ptr, val.len, "{topic:%Q, message:%Q}", &topic, &message) != 2) { + LOG(LL_ERROR, ("mqtt element %d ('%.*s'), required fields 'topic' and 'message'", idx, val.len, val.ptr)); + continue; } + LOG(LL_INFO, ("topic='%s', message='%s'", topic, message)); + if (topic) free(topic); + if (message) free(message); } (void) ev_data; }