Skip to content

Commit 66197cd

Browse files
authored
Specific response assertion error messages
Signed-off-by: Pieter van der Werk <[email protected]>
1 parent 98997dd commit 66197cd

File tree

2 files changed

+50
-12
lines changed

2 files changed

+50
-12
lines changed

envoyauth/response.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func (result *EvalResult) IsAllowed() (bool, error) {
105105
}
106106

107107
if allowed, ok = val.(bool); !ok {
108-
return false, fmt.Errorf("type assertion error")
108+
return false, fmt.Errorf("type assertion error, expected allowed to be of type 'boolean' but got '%T'", val)
109109
}
110110

111111
return allowed, nil
@@ -137,14 +137,14 @@ func (result *EvalResult) GetRequestHTTPHeadersToRemove() ([]string, error) {
137137
for _, vval := range val {
138138
header, ok := vval.(string)
139139
if !ok {
140-
return nil, fmt.Errorf("type assertion error")
140+
return nil, fmt.Errorf("type assertion error, expected request_headers_to_remove value to be of type 'string' but got '%T'", vval)
141141
}
142142

143143
headersToRemove = append(headersToRemove, header)
144144
}
145145
return headersToRemove, nil
146146
default:
147-
return nil, fmt.Errorf("type assertion error")
147+
return nil, fmt.Errorf("type assertion error, expected request_headers_to_remove to be of type '[]string' but got '%T'", val)
148148
}
149149
}
150150

@@ -244,7 +244,7 @@ func (result *EvalResult) GetResponseBody() (string, error) {
244244
}
245245

246246
if body, ok = val.(string); !ok {
247-
return "", fmt.Errorf("type assertion error")
247+
return "", fmt.Errorf("type assertion error, expected body to be of type 'string' but got '%T'", val)
248248
}
249249

250250
return body, nil
@@ -271,7 +271,7 @@ func (result *EvalResult) GetResponseHTTPStatus() (int, error) {
271271
}
272272

273273
if statusCode, ok = val.(json.Number); !ok {
274-
return status, fmt.Errorf("type assertion error")
274+
return status, fmt.Errorf("type assertion error, expected http_status to be of type 'number' but got '%T'", val)
275275
}
276276

277277
httpStatusCode, err := statusCode.Int64()
@@ -307,7 +307,7 @@ func (result *EvalResult) GetDynamicMetadata() (*_structpb.Struct, error) {
307307

308308
metadata, ok := val.(map[string]interface{})
309309
if !ok {
310-
return nil, fmt.Errorf("type assertion error")
310+
return nil, fmt.Errorf("type assertion error, expected dynamic_metadata to be of type 'object' but got '%T'", val)
311311
}
312312

313313
return structpb.NewStruct(metadata)
@@ -369,7 +369,7 @@ func transformToHTTPHeaderFormat(input interface{}, result *http.Header) error {
369369
for _, val := range input {
370370
headers, ok := val.(map[string]interface{})
371371
if !ok {
372-
return fmt.Errorf("type assertion error")
372+
return fmt.Errorf("type assertion error, expected headers to be of type 'object' but got '%T'", val)
373373
}
374374

375375
err := takeResponseHeaders(headers, result)
@@ -385,7 +385,7 @@ func transformToHTTPHeaderFormat(input interface{}, result *http.Header) error {
385385
}
386386

387387
default:
388-
return fmt.Errorf("type assertion error")
388+
return fmt.Errorf("type assertion error, expected headers to be of type 'object' but got '%T'", input)
389389
}
390390

391391
return nil

envoyauth/response_test.go

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package envoyauth
33
import (
44
"encoding/json"
55
"reflect"
6+
"strings"
67
"testing"
78

89
_structpb "github.com/golang/protobuf/ptypes/struct"
@@ -28,6 +29,10 @@ func TestIsAllowed(t *testing.T) {
2829
t.Fatal("Expected error but got nil")
2930
}
3031

32+
if !strings.Contains(err.Error(), "but got 'int'") {
33+
t.Fatal("Assertion error type reflection failed")
34+
}
35+
3136
input["allowed"] = true
3237
var result bool
3338
result, err = er.IsAllowed()
@@ -107,6 +112,21 @@ func TestGetRequestHTTPHeadersToRemove(t *testing.T) {
107112
}
108113
})
109114
}
115+
116+
t.Run("type_assertion_error", func(t *testing.T) {
117+
er := EvalResult{
118+
Decision: map[string]interface{}{"request_headers_to_remove": 1},
119+
}
120+
121+
_, err := er.GetRequestHTTPHeadersToRemove()
122+
if err == nil {
123+
t.Fatal("Expected error but got nil")
124+
}
125+
126+
if !strings.Contains(err.Error(), "but got 'int'") {
127+
t.Fatalf("Assertion error type reflection failed")
128+
}
129+
})
110130
}
111131

112132
func TestGetResponseHTTPHeadersToAdd(t *testing.T) {
@@ -295,10 +315,14 @@ func TestGetResponseBody(t *testing.T) {
295315
}
296316

297317
input["body"] = 123
298-
result, err = er.GetResponseBody()
318+
_, err = er.GetResponseBody()
299319
if err == nil {
300320
t.Fatal("Expected error but got nil", err)
301321
}
322+
323+
if !strings.Contains(err.Error(), "but got 'int'") {
324+
t.Fatalf("Assertion error type reflection failed")
325+
}
302326
}
303327

304328
func TestGetResponseHttpStatus(t *testing.T) {
@@ -317,19 +341,23 @@ func TestGetResponseHttpStatus(t *testing.T) {
317341
}
318342

319343
input["http_status"] = true
320-
result, err = er.GetResponseEnvoyHTTPStatus()
344+
_, err = er.GetResponseEnvoyHTTPStatus()
321345
if err == nil {
322346
t.Fatal("Expected error but got nil")
323347
}
324348

349+
if !strings.Contains(err.Error(), "but got 'bool'") {
350+
t.Fatalf("Assertion error type reflection failed")
351+
}
352+
325353
input["http_status"] = json.Number("1")
326-
result, err = er.GetResponseEnvoyHTTPStatus()
354+
_, err = er.GetResponseEnvoyHTTPStatus()
327355
if err == nil {
328356
t.Fatal("Expected error but got nil")
329357
}
330358

331359
input["http_status"] = json.Number("9999")
332-
result, err = er.GetResponseEnvoyHTTPStatus()
360+
_, err = er.GetResponseEnvoyHTTPStatus()
333361
if err == nil {
334362
t.Fatal("Expected error but got nil")
335363
}
@@ -380,6 +408,16 @@ func TestGetDynamicMetadata(t *testing.T) {
380408
if !proto.Equal(result, expectedDynamicMetadata) {
381409
t.Fatalf("Expected result %v but got %v", expectedDynamicMetadata, result)
382410
}
411+
412+
input["dynamic_metadata"] = 123
413+
_, err = er.GetDynamicMetadata()
414+
if err == nil {
415+
t.Fatal("Expected error but got nil")
416+
}
417+
418+
if !strings.Contains(err.Error(), "but got 'int'") {
419+
t.Fatalf("Assertion error type reflection failed")
420+
}
383421
}
384422

385423
func TestGetDynamicMetadataWithBooleanDecision(t *testing.T) {

0 commit comments

Comments
 (0)