@@ -8,7 +8,9 @@ package resty
88import (
99 "bytes"
1010 "errors"
11+ "fmt"
1112 "io"
13+ "net/http"
1214 "net/url"
1315 "os"
1416 "path/filepath"
@@ -180,6 +182,145 @@ func TestUtil_readMachineID(t *testing.T) {
180182 })
181183}
182184
185+ func TestInMemoryJSONMarshalUnmarshal (t * testing.T ) {
186+ t .Run ("json encoder" , func (t * testing.T ) {
187+ user := & credentials {Username : "testuser" , Password : "testpass" }
188+ buf := acquireBuffer ()
189+ defer releaseBuffer (buf )
190+ err := InMemoryJSONMarshal (buf , user )
191+ assertNil (t , err )
192+ assertEqual (t , `{"username":"testuser","password":"testpass"}` , buf .String ())
193+ })
194+
195+ t .Run ("json encoder error" , func (t * testing.T ) {
196+ obj := & brokenMarshalJSON {}
197+ buf := acquireBuffer ()
198+ defer releaseBuffer (buf )
199+ err := InMemoryJSONMarshal (buf , obj )
200+ assertNotNil (t , err )
201+ assertEqual (t , true , strings .Contains (err .Error (), "b0rk3d" ))
202+ })
203+
204+ t .Run ("json decoder" , func (t * testing.T ) {
205+ byteData := []byte (`{"username":"testuser","password":"testpass"}` )
206+ cred := & credentials {}
207+ err := InMemoryJSONUnmarshal (bytes .NewReader (byteData ), cred )
208+ assertNil (t , err )
209+ assertEqual (t , "testuser" , cred .Username )
210+ assertEqual (t , "testpass" , cred .Password )
211+ })
212+
213+ t .Run ("json decoder read error" , func (t * testing.T ) {
214+ cred := & credentials {}
215+ err := InMemoryJSONUnmarshal (& brokenReadCloser {}, cred )
216+ assertNotNil (t , err )
217+ assertEqual (t , err .Error (), "read error" )
218+ })
219+
220+ t .Run ("json decoder error" , func (t * testing.T ) {
221+ byteData := []byte (`"username":"testuser","password":"testpass"}` )
222+ cred := & credentials {}
223+ err := InMemoryJSONUnmarshal (bytes .NewReader (byteData ), cred )
224+ assertNotNil (t , err )
225+ assertEqual (t , true , strings .Contains (err .Error (), "invalid character ':' after top-level value" ))
226+ })
227+ }
228+
229+ func TestInMemoryXMLMarshalUnmarshal (t * testing.T ) {
230+ t .Run ("xml encoder" , func (t * testing.T ) {
231+ user := & credentials {Username : "testuser" , Password : "testpass" }
232+ buf := acquireBuffer ()
233+ defer releaseBuffer (buf )
234+ err := InMemoryXMLMarshal (buf , user )
235+ assertNil (t , err )
236+ assertEqual (t , `<credentials><Username>testuser</Username><Password>testpass</Password></credentials>` , buf .String ())
237+ })
238+
239+ t .Run ("xml encoder error" , func (t * testing.T ) {
240+ obj := & brokenMarshalXML {}
241+ buf := acquireBuffer ()
242+ defer releaseBuffer (buf )
243+ err := InMemoryXMLMarshal (buf , obj )
244+ assertNotNil (t , err )
245+ assertEqual (t , err .Error (), "b0rk3d" )
246+ })
247+
248+ t .Run ("xml decoder" , func (t * testing.T ) {
249+ byteData := []byte (`<?xml version="1.0" encoding="UTF-8"?><credentials><Username>testuser</Username><Password>testpass</Password></credentials>` )
250+ cred := & credentials {}
251+ err := InMemoryXMLUnmarshal (bytes .NewReader (byteData ), cred )
252+ assertNil (t , err )
253+ assertEqual (t , "testuser" , cred .Username )
254+ assertEqual (t , "testpass" , cred .Password )
255+ })
256+
257+ t .Run ("xml decoder read error" , func (t * testing.T ) {
258+ cred := & credentials {}
259+ err := InMemoryXMLUnmarshal (& brokenReadCloser {}, cred )
260+ assertNotNil (t , err )
261+ assertEqual (t , err .Error (), "read error" )
262+ })
263+
264+ t .Run ("xml decoder error" , func (t * testing.T ) {
265+ byteData := []byte (`<?xml version="1.0" encoding="UTF-8"?><Username>testuser</Username><Password>testpass</Password></credentials>` )
266+ cred := & credentials {}
267+ err := InMemoryJSONUnmarshal (bytes .NewReader (byteData ), cred )
268+ fmt .Println (err )
269+ assertNotNil (t , err )
270+ assertEqual (t , err .Error (), "invalid character '<' looking for beginning of value" )
271+ })
272+ }
273+
274+ func TestInMemoryJSONPost (t * testing.T ) {
275+ ts := createPostServer (t )
276+ defer ts .Close ()
277+
278+ user := & credentials {Username : "testuser" , Password : "testpass" }
279+ assertEqual (t , "Username: **********, Password: **********" , user .String ())
280+
281+ c := dcnl ().
282+ AddContentTypeEncoder (jsonContentType , InMemoryJSONMarshal ).
283+ AddContentTypeDecoder (jsonContentType , InMemoryJSONUnmarshal )
284+
285+ r := c .R ().
286+ SetHeader (hdrContentTypeKey , jsonContentType ).
287+ SetBody (user ).
288+ SetResult (& AuthSuccess {})
289+
290+ resp , err := r .Post (ts .URL + "/login" )
291+ authResp := resp .Result ().(* AuthSuccess )
292+
293+ assertError (t , err )
294+ assertEqual (t , http .StatusOK , resp .StatusCode ())
295+ assertEqual (t , int64 (50 ), resp .Size ())
296+ assertEqual (t , authResp .ID , "success" )
297+ assertEqual (t , authResp .Message , "login successful" )
298+ }
299+
300+ func TestInMemoryXMLPost (t * testing.T ) {
301+ ts := createPostServer (t )
302+ defer ts .Close ()
303+
304+ xmlContentType := "application/xml"
305+ c := dcnl ().
306+ AddContentTypeEncoder (xmlContentType , InMemoryXMLMarshal ).
307+ AddContentTypeDecoder (xmlContentType , InMemoryXMLUnmarshal )
308+
309+ resp , err := c .R ().
310+ SetHeader (hdrContentTypeKey , xmlContentType ).
311+ SetBody (credentials {Username : "testuser" , Password : "testpass" }).
312+ SetResult (& AuthSuccess {}).
313+ Post (ts .URL + "/login" )
314+
315+ authResp := resp .Result ().(* AuthSuccess )
316+
317+ assertError (t , err )
318+ assertEqual (t , http .StatusOK , resp .StatusCode ())
319+ assertEqual (t , int64 (116 ), resp .Size ())
320+ assertEqual (t , authResp .ID , "success" )
321+ assertEqual (t , authResp .Message , "login successful" )
322+ }
323+
183324// This test methods exist for test coverage purpose
184325// to validate the getter and setter
185326func TestUtilMiscTestCoverage (t * testing.T ) {
0 commit comments