fix: readable error messages (#1325)

- Mapped the error codes to easier to read error messages
- Created unit test to check functionality

 #1100

---------

Signed-off-by: DBlanchard88 <davidblanchard88@gmail.com>
Signed-off-by: Dave <89858058+DBlanchard88@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
This commit is contained in:
Dave 2024-06-18 16:38:16 -04:00 committed by GitHub
parent 298bd36698
commit 7ff33effcc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 69 additions and 4 deletions

View File

@ -1,5 +1,7 @@
package model package model
import "fmt"
const ( const (
FlagNotFoundErrorCode = "FLAG_NOT_FOUND" FlagNotFoundErrorCode = "FLAG_NOT_FOUND"
ParseErrorCode = "PARSE_ERROR" ParseErrorCode = "PARSE_ERROR"
@ -8,3 +10,19 @@ const (
FlagDisabledErrorCode = "FLAG_DISABLED" FlagDisabledErrorCode = "FLAG_DISABLED"
InvalidContextCode = "INVALID_CONTEXT" InvalidContextCode = "INVALID_CONTEXT"
) )
var ReadableErrorMessage = map[string]string{
FlagNotFoundErrorCode: "Flag not found",
ParseErrorCode: "Error parsing input or configuration",
TypeMismatchErrorCode: "Type mismatch error",
GeneralErrorCode: "General error",
FlagDisabledErrorCode: "Flag is disabled",
InvalidContextCode: "Invalid context provided",
}
func GetErrorMessage(code string) string {
if msg, exists := ReadableErrorMessage[code]; exists {
return msg
}
return fmt.Sprintf("Unknown error code: %s", code)
}

View File

@ -327,15 +327,16 @@ func formatContextKeys(context *structpb.Struct) []string {
} }
func errFormat(err error) error { func errFormat(err error) error {
ReadableErrorMsg := model.GetErrorMessage(err.Error())
switch err.Error() { switch err.Error() {
case model.FlagNotFoundErrorCode, model.FlagDisabledErrorCode: case model.FlagNotFoundErrorCode, model.FlagDisabledErrorCode:
return connect.NewError(connect.CodeNotFound, fmt.Errorf("%s, %s", ErrorPrefix, err.Error())) return connect.NewError(connect.CodeNotFound, fmt.Errorf("%s", ReadableErrorMsg))
case model.TypeMismatchErrorCode: case model.TypeMismatchErrorCode:
return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("%s, %s", ErrorPrefix, err.Error())) return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("%s", ReadableErrorMsg))
case model.ParseErrorCode: case model.ParseErrorCode:
return connect.NewError(connect.CodeDataLoss, fmt.Errorf("%s, %s", ErrorPrefix, err.Error())) return connect.NewError(connect.CodeDataLoss, fmt.Errorf("%s", ReadableErrorMsg))
case model.GeneralErrorCode: case model.GeneralErrorCode:
return connect.NewError(connect.CodeUnknown, fmt.Errorf("%s, %s", ErrorPrefix, err.Error())) return connect.NewError(connect.CodeUnknown, fmt.Errorf("%s", ReadableErrorMsg))
} }
return err return err

View File

@ -986,3 +986,49 @@ func TestFlag_Evaluation_ErrorCodes(t *testing.T) {
} }
} }
} }
func Test_Readable_ErrorMessage(t *testing.T) {
tests := []struct {
name string
code string
want string
}{
{
name: "Testing flag not found error",
code: model.FlagNotFoundErrorCode,
want: model.ReadableErrorMessage[model.FlagNotFoundErrorCode],
},
{
name: "Testing parse error",
code: model.ParseErrorCode,
want: model.ReadableErrorMessage[model.ParseErrorCode],
},
{
name: "Testing type mismatch error",
code: model.TypeMismatchErrorCode,
want: model.ReadableErrorMessage[model.TypeMismatchErrorCode],
},
{
name: "Testing general error",
code: model.GeneralErrorCode,
want: model.ReadableErrorMessage[model.GeneralErrorCode],
},
{
name: "Testing flag disabled error",
code: model.FlagDisabledErrorCode,
want: model.ReadableErrorMessage[model.FlagDisabledErrorCode],
},
{
name: "Testing invalid context error",
code: model.InvalidContextCode,
want: model.ReadableErrorMessage[model.InvalidContextCode],
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := model.GetErrorMessage(tt.code); got != tt.want {
t.Errorf("GetErrorMessage() Wanted: %v , but got: %v as a ReadableErrorMessage", tt.want, got)
}
})
}
}