@@ -70,13 +70,22 @@ static void assert_msg_send(int called, size_t msg_sz, const struct mqtt_sn_data
70
70
}
71
71
72
72
static struct {
73
+ uint8_t data [CONFIG_MQTT_SN_LIB_MAX_PAYLOAD_SIZE ];
73
74
struct mqtt_sn_evt last_evt ;
74
75
int called ;
75
76
} evt_cb_data ;
76
77
77
78
static void evt_cb (struct mqtt_sn_client * client , const struct mqtt_sn_evt * evt )
78
79
{
79
80
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
+
80
89
evt_cb_data .called ++ ;
81
90
82
91
k_sem_give (& mqtt_sn_cb_sem );
@@ -117,7 +126,7 @@ int tp_poll(struct mqtt_sn_client *client)
117
126
return recvfrom_data .sz ;
118
127
}
119
128
120
- #define NUM_TEST_CLIENTS 10
129
+ #define NUM_TEST_CLIENTS 11
121
130
static ZTEST_BMEM struct mqtt_sn_client mqtt_clients [NUM_TEST_CLIENTS ];
122
131
static ZTEST_BMEM struct mqtt_sn_client * mqtt_client ;
123
132
@@ -386,6 +395,39 @@ static ZTEST(mqtt_sn_client, test_mqtt_sn_connect_will)
386
395
zassert_equal (evt_cb_data .last_evt .type , MQTT_SN_EVT_CONNECTED , "Wrong event" );
387
396
}
388
397
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
+
389
431
/* Test a simple PUBLISH message */
390
432
static ZTEST (mqtt_sn_client , test_mqtt_sn_publish_qos0 )
391
433
{
0 commit comments