1package s3shared 2 3import ( 4 "strings" 5 "testing" 6) 7 8func TestGetResponseErrorCode(t *testing.T) { 9 const xmlErrorResponse = `<Error> 10 <Type>Sender</Type> 11 <Code>InvalidGreeting</Code> 12 <Message>Hi</Message> 13 <HostId>bar-id</HostId> 14 <RequestId>foo-id</RequestId> 15</Error>` 16 17 const wrappedXMLErrorResponse = `<ErrorResponse><Error> 18 <Type>Sender</Type> 19 <Code>InvalidGreeting</Code> 20 <Message>Hi</Message> 21</Error> 22 <HostId>bar-id</HostId> 23 <RequestId>foo-id</RequestId> 24</ErrorResponse>` 25 26 cases := map[string]struct { 27 getErr func() (ErrorComponents, error) 28 expectedErrorCode string 29 expectedErrorMessage string 30 expectedErrorRequestID string 31 expectedErrorHostID string 32 }{ 33 "standard xml error": { 34 getErr: func() (ErrorComponents, error) { 35 errResp := strings.NewReader(xmlErrorResponse) 36 return GetErrorResponseComponents(errResp, ErrorResponseDeserializerOptions{ 37 UseStatusCode: false, 38 StatusCode: 0, 39 IsWrappedWithErrorTag: false, 40 }) 41 }, 42 expectedErrorCode: "InvalidGreeting", 43 expectedErrorMessage: "Hi", 44 expectedErrorRequestID: "foo-id", 45 expectedErrorHostID: "bar-id", 46 }, 47 48 "s3 no response body": { 49 getErr: func() (ErrorComponents, error) { 50 errResp := strings.NewReader("") 51 return GetErrorResponseComponents(errResp, ErrorResponseDeserializerOptions{ 52 UseStatusCode: true, 53 StatusCode: 400, 54 }) 55 }, 56 expectedErrorCode: "BadRequest", 57 expectedErrorMessage: "Bad Request", 58 }, 59 "s3control no response body": { 60 getErr: func() (ErrorComponents, error) { 61 errResp := strings.NewReader("") 62 return GetErrorResponseComponents(errResp, ErrorResponseDeserializerOptions{ 63 IsWrappedWithErrorTag: true, 64 }) 65 }, 66 }, 67 "s3control standard response body": { 68 getErr: func() (ErrorComponents, error) { 69 errResp := strings.NewReader(wrappedXMLErrorResponse) 70 return GetErrorResponseComponents(errResp, ErrorResponseDeserializerOptions{ 71 IsWrappedWithErrorTag: true, 72 }) 73 }, 74 expectedErrorCode: "InvalidGreeting", 75 expectedErrorMessage: "Hi", 76 expectedErrorRequestID: "foo-id", 77 expectedErrorHostID: "bar-id", 78 }, 79 } 80 81 for name, c := range cases { 82 t.Run(name, func(t *testing.T) { 83 ec, err := c.getErr() 84 if err != nil { 85 t.Fatalf("expected no error, got %v", err) 86 } 87 88 if e, a := c.expectedErrorCode, ec.Code; !strings.EqualFold(e, a) { 89 t.Fatalf("expected %v, got %v", e, a) 90 } 91 if e, a := c.expectedErrorMessage, ec.Message; !strings.EqualFold(e, a) { 92 t.Fatalf("expected %v, got %v", e, a) 93 } 94 if e, a := c.expectedErrorRequestID, ec.RequestID; !strings.EqualFold(e, a) { 95 t.Fatalf("expected %v, got %v", e, a) 96 } 97 if e, a := c.expectedErrorHostID, ec.HostID; !strings.EqualFold(e, a) { 98 t.Fatalf("expected %v, got %v", e, a) 99 } 100 }) 101 } 102} 103