@@ -76,6 +76,97 @@ func TestPublish_ReadRequest(t *testing.T) {
7676 }
7777}
7878
79+ func TestPublish_Write (t * testing.T ) {
80+ testcases := []struct {
81+ name string
82+ msg mqtt.Message
83+ ctx * mqtt.ClientContext
84+ out []byte
85+ }{
86+ {
87+ name : "request QoS=0" ,
88+ msg : mqtt.Message {
89+ Header : & mqtt.Header {
90+ Type : mqtt .PUBLISH ,
91+ },
92+ Payload : & mqtt.PublishRequest {
93+ Topic : "foo" ,
94+ MessageId : uint16 (123 ),
95+ Data : []byte ("bar" ),
96+ },
97+ },
98+ ctx : & mqtt.ClientContext {},
99+ out : []byte {
100+ 0x30 , // Packet type
101+ 0x08 , // length
102+ 0x0 , 0x03 , // topic length
103+ 'f' , 'o' , 'o' ,
104+ 'b' , 'a' , 'r' , // data
105+ },
106+ },
107+ {
108+ name : "request QoS=1" ,
109+ msg : mqtt.Message {
110+ Header : & mqtt.Header {
111+ Type : mqtt .PUBLISH ,
112+ QoS : 1 ,
113+ },
114+ Payload : & mqtt.PublishRequest {
115+ Topic : "foo" ,
116+ MessageId : uint16 (123 ),
117+ Data : []byte ("bar" ),
118+ },
119+ },
120+ ctx : & mqtt.ClientContext {},
121+ out : []byte {
122+ 0x32 , // Packet type
123+ 0x0a , // length
124+ 0x0 , 0x03 , // topic length
125+ 'f' , 'o' , 'o' ,
126+ 0x0 , 0x7b , // message id
127+ 'b' , 'a' , 'r' , // data
128+ },
129+ },
130+ {
131+ name : "request v5" ,
132+ msg : mqtt.Message {
133+ Header : & mqtt.Header {
134+ Type : mqtt .PUBLISH ,
135+ QoS : 1 ,
136+ },
137+ Payload : & mqtt.PublishRequest {
138+ Topic : "foo" ,
139+ MessageId : uint16 (123 ),
140+ Data : []byte ("bar" ),
141+ },
142+ },
143+ ctx : & mqtt.ClientContext {ProtocolVersion : 5 },
144+ out : []byte {
145+ 0x32 , // Packet type
146+ 0x0b , // length
147+ 0x0 , 0x03 , // topic length
148+ 'f' , 'o' , 'o' ,
149+ 0x0 , 0x7b , // message id
150+ 0x0 , // properties
151+ 'b' , 'a' , 'r' , // data
152+ },
153+ },
154+ }
155+
156+ t .Parallel ()
157+ for _ , tc := range testcases {
158+ tc := tc
159+ t .Run (tc .name , func (t * testing.T ) {
160+ t .Parallel ()
161+
162+ var b bytes.Buffer
163+ err := tc .msg .Write (& b , tc .ctx )
164+ require .NoError (t , err )
165+ require .Equal (t , tc .out , b .Bytes ())
166+ })
167+ }
168+ }
169+
79170func TestPublish (t * testing.T ) {
80171 testcases := []struct {
81172 name string
0 commit comments