1package logical 2 3import ( 4 "strings" 5 "testing" 6) 7 8func TestResponseUtil_RespondErrorCommon_basic(t *testing.T) { 9 testCases := []struct { 10 title string 11 req *Request 12 resp *Response 13 respErr error 14 expectedStatus int 15 expectedErr error 16 }{ 17 { 18 title: "Throttled, no error", 19 respErr: ErrUpstreamRateLimited, 20 resp: &Response{}, 21 expectedStatus: 502, 22 }, 23 { 24 title: "Throttled, with error", 25 respErr: ErrUpstreamRateLimited, 26 resp: &Response{ 27 Data: map[string]interface{}{ 28 "error": "rate limited", 29 }, 30 }, 31 expectedStatus: 502, 32 }, 33 { 34 title: "Read not found", 35 req: &Request{ 36 Operation: ReadOperation, 37 }, 38 respErr: nil, 39 expectedStatus: 404, 40 }, 41 { 42 title: "List with response and no keys", 43 req: &Request{ 44 Operation: ListOperation, 45 }, 46 resp: &Response{}, 47 respErr: nil, 48 expectedStatus: 404, 49 }, 50 { 51 title: "List with response and keys", 52 req: &Request{ 53 Operation: ListOperation, 54 }, 55 resp: &Response{ 56 Data: map[string]interface{}{ 57 "keys": []string{"some", "things", "here"}, 58 }, 59 }, 60 respErr: nil, 61 expectedStatus: 0, 62 }, 63 } 64 65 for _, tc := range testCases { 66 t.Run(tc.title, func(t *testing.T) { 67 var status int 68 var err, respErr error 69 if tc.respErr != nil { 70 respErr = tc.respErr 71 } 72 status, err = RespondErrorCommon(tc.req, tc.resp, respErr) 73 if status != tc.expectedStatus { 74 t.Fatalf("Expected (%d) status code, got (%d)", tc.expectedStatus, status) 75 } 76 if tc.expectedErr != nil { 77 if !strings.Contains(tc.expectedErr.Error(), err.Error()) { 78 t.Fatalf("Expected error to contain:\n%s\n\ngot:\n%s\n", tc.expectedErr, err) 79 } 80 } 81 }) 82 } 83} 84