@@ -513,6 +513,45 @@ static void test_decode_publish_resp(void)
513513 "PUBACK remain_len=1: returns MALFORMED_DATA" );
514514}
515515
516+ /* -------------------------------------------------------------------------- */
517+ /* MqttDecode_UnsubscribeAck tests */
518+ /* -------------------------------------------------------------------------- */
519+ static void test_decode_unsuback (void )
520+ {
521+ byte buf [8 ];
522+ MqttUnsubscribeAck ack ;
523+ int rc ;
524+
525+ PRINTF ("--- MqttDecode_UnsubscribeAck ---" );
526+
527+ /* Valid UNSUBACK: remain_len=2 (packet_id) */
528+ buf [0 ] = MQTT_PACKET_TYPE_SET (MQTT_PACKET_TYPE_UNSUBSCRIBE_ACK ); /* 0xB0 */
529+ buf [1 ] = 2 ; /* remain_len */
530+ buf [2 ] = 0 ; /* packet_id MSB */
531+ buf [3 ] = 1 ; /* packet_id LSB */
532+ XMEMSET (& ack , 0 , sizeof (ack ));
533+ rc = MqttDecode_UnsubscribeAck (buf , 4 , & ack );
534+ CHECK (rc > 0 , "UNSUBACK remain_len=2: succeeds" );
535+ CHECK (ack .packet_id == 1 , "UNSUBACK remain_len=2: packet_id == 1" );
536+
537+ /* Malformed UNSUBACK: remain_len=0 */
538+ buf [0 ] = MQTT_PACKET_TYPE_SET (MQTT_PACKET_TYPE_UNSUBSCRIBE_ACK );
539+ buf [1 ] = 0 ;
540+ XMEMSET (& ack , 0 , sizeof (ack ));
541+ rc = MqttDecode_UnsubscribeAck (buf , 2 , & ack );
542+ CHECK (rc == MQTT_CODE_ERROR_MALFORMED_DATA ,
543+ "UNSUBACK remain_len=0: returns MALFORMED_DATA" );
544+
545+ /* Malformed UNSUBACK: remain_len=1 */
546+ buf [0 ] = MQTT_PACKET_TYPE_SET (MQTT_PACKET_TYPE_UNSUBSCRIBE_ACK );
547+ buf [1 ] = 1 ;
548+ buf [2 ] = 0 ;
549+ XMEMSET (& ack , 0 , sizeof (ack ));
550+ rc = MqttDecode_UnsubscribeAck (buf , 3 , & ack );
551+ CHECK (rc == MQTT_CODE_ERROR_MALFORMED_DATA ,
552+ "UNSUBACK remain_len=1: returns MALFORMED_DATA" );
553+ }
554+
516555int main (int argc , char * * argv )
517556{
518557 (void )argc ;
@@ -529,6 +568,7 @@ int main(int argc, char** argv)
529568 test_qos2_ack_arithmetic ();
530569 test_decode_suback ();
531570 test_decode_publish_resp ();
571+ test_decode_unsuback ();
532572#ifdef WOLFMQTT_V5
533573 test_publish_resp_v5_roundtrip ();
534574#endif
0 commit comments