1package xmlrpc 2 3import ( 4 "testing" 5) 6 7const faultRespXml = ` 8<?xml version="1.0" encoding="UTF-8"?> 9<methodResponse> 10 <fault> 11 <value> 12 <struct> 13 <member> 14 <name>faultString</name> 15 <value> 16 <string>You must log in before using this part of Bugzilla.</string> 17 </value> 18 </member> 19 <member> 20 <name>faultCode</name> 21 <value> 22 <string>410</string> 23 </value> 24 </member> 25 </struct> 26 </value> 27 </fault> 28</methodResponse>` 29 30func Test_failedResponse(t *testing.T) { 31 32 resp := NewResponse([]byte(faultRespXml), 400) 33 34 if !resp.Failed() { 35 t.Fatal("Failed() error: expected true, got false") 36 } 37 if resp.Err() == nil { 38 t.Fatal("Err() error: expected error, got nil") 39 } 40 41 err := resp.Err().(*XmlRpcError) 42 if err.Code != "410" && err.Err != "You must log in before using this part of Bugzilla." { 43 t.Fatal("Err() error: got wrong error") 44 } 45} 46 47const emptyValResp = ` 48<?xml version="1.0" encoding="UTF-8"?> 49<methodResponse> 50 <params> 51 <param> 52 <value> 53 <struct> 54 <member> 55 <name>user</name> 56 <value><string>Joe Smith</string></value> 57 </member> 58 <member> 59 <name>token</name> 60 <value/> 61 </member> 62 </struct> 63 </value> 64 </param> 65 </params> 66</methodResponse>` 67 68func Test_responseWithEmptyValue(t *testing.T) { 69 resp := NewResponse([]byte(emptyValResp), 201) 70 71 result := struct { 72 User string `xmlrpc:"user"` 73 Token string `xmlrpc:"token"` 74 }{} 75 76 if err := resp.Unmarshal(&result); err != nil { 77 t.Fatalf("unmarshal error: %v", err) 78 } 79 80 if result.User != "Joe Smith" || result.Token != "" { 81 t.Fatalf("unexpected result: %v", result) 82 } 83} 84