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 <int>410</int> 23 </value> 24 </member> 25 </struct> 26 </value> 27 </fault> 28</methodResponse>` 29 30func Test_failedResponse(t *testing.T) { 31 resp := NewResponse([]byte(faultRespXml)) 32 33 if !resp.Failed() { 34 t.Fatal("Failed() error: expected true, got false") 35 } 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 68 69func Test_responseWithEmptyValue(t *testing.T) { 70 resp := NewResponse([]byte(emptyValResp)) 71 72 result := struct{ 73 User string `xmlrpc:"user"` 74 Token string `xmlrpc:"token"` 75 }{} 76 77 if err := resp.Unmarshal(&result); err != nil { 78 t.Fatalf("unmarshal error: %v", err) 79 } 80 81 if result.User != "Joe Smith" || result.Token != "" { 82 t.Fatalf("unexpected result: %v", result) 83 } 84} 85