Skip to content

Commit e79315d

Browse files
M1chacfriedt
authored andcommitted
tests: net: mqtt_sn_client: test incoming publishes
Until now, only outgoing ones were tested. Signed-off-by: Michael Zimmermann <[email protected]>
1 parent 9735cb3 commit e79315d

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

tests/net/lib/mqtt_sn_client/src/mqtt_sn_client.c

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,22 @@ static void assert_msg_send(int called, size_t msg_sz, const struct mqtt_sn_data
7070
}
7171

7272
static struct {
73+
uint8_t data[CONFIG_MQTT_SN_LIB_MAX_PAYLOAD_SIZE];
7374
struct mqtt_sn_evt last_evt;
7475
int called;
7576
} evt_cb_data;
7677

7778
static void evt_cb(struct mqtt_sn_client *client, const struct mqtt_sn_evt *evt)
7879
{
7980
memcpy(&evt_cb_data.last_evt, evt, sizeof(*evt));
81+
82+
if (evt->type == MQTT_SN_EVT_PUBLISH) {
83+
zassert_true(evt->param.publish.data.size <= sizeof(evt_cb_data.data));
84+
memcpy(evt_cb_data.data, evt->param.publish.data.data,
85+
evt->param.publish.data.size);
86+
evt_cb_data.last_evt.param.publish.data.data = evt_cb_data.data;
87+
}
88+
8089
evt_cb_data.called++;
8190

8291
k_sem_give(&mqtt_sn_cb_sem);
@@ -117,7 +126,7 @@ int tp_poll(struct mqtt_sn_client *client)
117126
return recvfrom_data.sz;
118127
}
119128

120-
#define NUM_TEST_CLIENTS 10
129+
#define NUM_TEST_CLIENTS 11
121130
static ZTEST_BMEM struct mqtt_sn_client mqtt_clients[NUM_TEST_CLIENTS];
122131
static ZTEST_BMEM struct mqtt_sn_client *mqtt_client;
123132

@@ -386,6 +395,39 @@ static ZTEST(mqtt_sn_client, test_mqtt_sn_connect_will)
386395
zassert_equal(evt_cb_data.last_evt.type, MQTT_SN_EVT_CONNECTED, "Wrong event");
387396
}
388397

398+
/* Test a simple incoming PUBLISH event */
399+
static ZTEST(mqtt_sn_client, test_mqtt_sn_publish_event_qos0)
400+
{
401+
struct mqtt_sn_data data = MQTT_SN_DATA_STRING_LITERAL("Hello.");
402+
struct mqtt_sn_data topic = MQTT_SN_DATA_STRING_LITERAL("zephyr");
403+
uint8_t suback[] = {8, 0x13, 0, 0x1B, 0x1B, 0x00, 0x01, 0};
404+
static const uint8_t pubmsg[] = {0x0d, 0x0c, 0x01, 0x00, 0x2a, 0x00, 0x00,
405+
'H', 'e', 'l', 'l', 'o', '.'};
406+
int err;
407+
408+
mqtt_sn_connect_no_will(mqtt_client);
409+
err = k_sem_take(&mqtt_sn_tx_sem, K_NO_WAIT);
410+
411+
err = mqtt_sn_subscribe(mqtt_client, MQTT_SN_QOS_0, &topic);
412+
zassert_ok(err, "Unexpected error %d", err);
413+
err = k_sem_take(&mqtt_sn_tx_sem, K_SECONDS(1));
414+
/* Expect a SUBSCRIBE message */
415+
assert_msg_send(1, 11, &gw_addr);
416+
417+
err = input(mqtt_client, suback, sizeof(suback), &gw_addr);
418+
zassert_ok(err, "unexpected error %d", err);
419+
420+
/* Send PUBLISH */
421+
err = input(mqtt_client, pubmsg, sizeof(pubmsg), &gw_addr);
422+
zassert_equal(err, 0, "unexpected error %d", err);
423+
zassert_equal(evt_cb_data.called, 2, "NO event");
424+
zassert_equal(evt_cb_data.last_evt.type, MQTT_SN_EVT_PUBLISH, "Wrong event");
425+
zassert_equal(evt_cb_data.last_evt.param.publish.data.size, data.size,
426+
"Unexpected publish data size: %zu",
427+
evt_cb_data.last_evt.param.publish.data.size);
428+
zassert_mem_equal(evt_cb_data.last_evt.param.publish.data.data, data.data, data.size);
429+
}
430+
389431
/* Test a simple PUBLISH message */
390432
static ZTEST(mqtt_sn_client, test_mqtt_sn_publish_qos0)
391433
{

0 commit comments

Comments
 (0)