Skip to content

Commit 73af2c4

Browse files
committed
Fix f-2746 MqttEncode_Connect tests
1 parent a54141e commit 73af2c4

1 file changed

Lines changed: 114 additions & 0 deletions

File tree

tests/test_mqtt_packet.c

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,115 @@ TEST(encode_connect_fixed_header_flags)
789789
ASSERT_EQ(0, (int)MQTT_PACKET_FLAGS_GET(tx_buf[0]));
790790
}
791791

792+
/* [MQTT-3.1.2] CONNECT variable header flags byte encodes credential and
793+
* clean-session bits. The flags byte sits at offset 7 inside the variable
794+
* header (after 2-byte protocol length, 4-byte "MQTT", 1-byte protocol
795+
* level). With a remaining length < 128 the fixed header is 2 bytes, so the
796+
* flags byte is tx_buf[9]. */
797+
TEST(encode_connect_flags_username_password_clean)
798+
{
799+
byte tx_buf[256];
800+
MqttConnect conn;
801+
int rc;
802+
byte flags;
803+
804+
XMEMSET(&conn, 0, sizeof(conn));
805+
conn.client_id = "test_client";
806+
conn.username = "user";
807+
conn.password = "pass";
808+
conn.clean_session = 1;
809+
rc = MqttEncode_Connect(tx_buf, (int)sizeof(tx_buf), &conn);
810+
ASSERT_TRUE(rc > 0);
811+
flags = tx_buf[9];
812+
ASSERT_EQ(MQTT_CONNECT_FLAG_USERNAME,
813+
flags & MQTT_CONNECT_FLAG_USERNAME);
814+
ASSERT_EQ(MQTT_CONNECT_FLAG_PASSWORD,
815+
flags & MQTT_CONNECT_FLAG_PASSWORD);
816+
ASSERT_EQ(MQTT_CONNECT_FLAG_CLEAN_SESSION,
817+
flags & MQTT_CONNECT_FLAG_CLEAN_SESSION);
818+
ASSERT_EQ(0, flags & MQTT_CONNECT_FLAG_WILL_FLAG);
819+
ASSERT_EQ(0, flags & MQTT_CONNECT_FLAG_WILL_RETAIN);
820+
ASSERT_EQ(0, flags & MQTT_CONNECT_FLAG_WILL_QOS_MASK);
821+
ASSERT_EQ(0, flags & MQTT_CONNECT_FLAG_RESERVED);
822+
}
823+
824+
TEST(encode_connect_flags_none)
825+
{
826+
byte tx_buf[256];
827+
MqttConnect conn;
828+
int rc;
829+
830+
XMEMSET(&conn, 0, sizeof(conn));
831+
conn.client_id = "test_client";
832+
rc = MqttEncode_Connect(tx_buf, (int)sizeof(tx_buf), &conn);
833+
ASSERT_TRUE(rc > 0);
834+
ASSERT_EQ(0, (int)tx_buf[9]);
835+
}
836+
837+
TEST(encode_connect_flags_clean_session_only)
838+
{
839+
byte tx_buf[256];
840+
MqttConnect conn;
841+
int rc;
842+
843+
XMEMSET(&conn, 0, sizeof(conn));
844+
conn.client_id = "test_client";
845+
conn.clean_session = 1;
846+
rc = MqttEncode_Connect(tx_buf, (int)sizeof(tx_buf), &conn);
847+
ASSERT_TRUE(rc > 0);
848+
ASSERT_EQ(MQTT_CONNECT_FLAG_CLEAN_SESSION, (int)tx_buf[9]);
849+
}
850+
851+
TEST(encode_connect_flags_username_only)
852+
{
853+
byte tx_buf[256];
854+
MqttConnect conn;
855+
int rc;
856+
857+
XMEMSET(&conn, 0, sizeof(conn));
858+
conn.client_id = "test_client";
859+
conn.username = "user";
860+
rc = MqttEncode_Connect(tx_buf, (int)sizeof(tx_buf), &conn);
861+
ASSERT_TRUE(rc > 0);
862+
ASSERT_EQ(MQTT_CONNECT_FLAG_USERNAME,
863+
tx_buf[9] & MQTT_CONNECT_FLAG_USERNAME);
864+
ASSERT_EQ(0, tx_buf[9] & MQTT_CONNECT_FLAG_PASSWORD);
865+
}
866+
867+
TEST(encode_connect_flags_lwt_qos1_retain)
868+
{
869+
byte tx_buf[256];
870+
byte lwt_payload[] = {'b', 'y', 'e'};
871+
MqttConnect conn;
872+
MqttMessage lwt;
873+
int rc;
874+
byte flags;
875+
876+
XMEMSET(&conn, 0, sizeof(conn));
877+
XMEMSET(&lwt, 0, sizeof(lwt));
878+
lwt.topic_name = "will/topic";
879+
lwt.buffer = lwt_payload;
880+
lwt.total_len = (word32)sizeof(lwt_payload);
881+
lwt.qos = MQTT_QOS_1;
882+
lwt.retain = 1;
883+
884+
conn.client_id = "test_client";
885+
conn.enable_lwt = 1;
886+
conn.lwt_msg = &lwt;
887+
rc = MqttEncode_Connect(tx_buf, (int)sizeof(tx_buf), &conn);
888+
ASSERT_TRUE(rc > 0);
889+
flags = tx_buf[9];
890+
ASSERT_EQ(MQTT_CONNECT_FLAG_WILL_FLAG,
891+
flags & MQTT_CONNECT_FLAG_WILL_FLAG);
892+
ASSERT_EQ(MQTT_CONNECT_FLAG_WILL_RETAIN,
893+
flags & MQTT_CONNECT_FLAG_WILL_RETAIN);
894+
ASSERT_EQ((int)MQTT_QOS_1,
895+
(int)MQTT_CONNECT_FLAG_GET_QOS(flags));
896+
ASSERT_EQ(0, flags & MQTT_CONNECT_FLAG_USERNAME);
897+
ASSERT_EQ(0, flags & MQTT_CONNECT_FLAG_PASSWORD);
898+
ASSERT_EQ(0, flags & MQTT_CONNECT_FLAG_CLEAN_SESSION);
899+
}
900+
792901
/* ============================================================================
793902
* QoS 2 next-ack arithmetic (PUBLISH_REC -> REL -> COMP)
794903
* ============================================================================ */
@@ -1117,6 +1226,11 @@ void run_mqtt_packet_tests(void)
11171226
RUN_TEST(encode_connect_username_only);
11181227
RUN_TEST(encode_connect_no_credentials);
11191228
RUN_TEST(encode_connect_fixed_header_flags);
1229+
RUN_TEST(encode_connect_flags_username_password_clean);
1230+
RUN_TEST(encode_connect_flags_none);
1231+
RUN_TEST(encode_connect_flags_clean_session_only);
1232+
RUN_TEST(encode_connect_flags_username_only);
1233+
RUN_TEST(encode_connect_flags_lwt_qos1_retain);
11201234

11211235
/* QoS 2 ack arithmetic */
11221236
RUN_TEST(qos2_ack_arithmetic);

0 commit comments

Comments
 (0)