Skip to content

Commit e43b460

Browse files
authored
Merge pull request #2 from bnkamalesh/bug/empty-message-infiniteloop
[patch] skip empty message being appended while preparing error messages
2 parents 7fee94f + 9839299 commit e43b460

File tree

2 files changed

+73
-2
lines changed

2 files changed

+73
-2
lines changed

errors.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,21 @@ func (e *Error) Error() string {
8686
// which are not of type *Error
8787
func (e *Error) Message() string {
8888
messages := make([]string, 0, 5)
89-
messages = append(messages, e.message)
89+
if e.message != "" {
90+
messages = append(messages, e.message)
91+
}
9092

9193
err, _ := e.original.(*Error)
9294
for err != nil {
9395
if err.message == "" {
96+
err, _ = err.original.(*Error)
9497
continue
9598
}
9699
messages = append(messages, err.message)
97100
err, _ = err.original.(*Error)
98101
}
99102

100-
if len(messages) > 1 {
103+
if len(messages) > 0 {
101104
return strings.Join(messages, ". ")
102105
}
103106

errors_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,3 +220,71 @@ func Benchmark_HTTPStatusCodeMessage(b *testing.B) {
220220
_, _, _ = HTTPStatusCodeMessage(err)
221221
}
222222
}
223+
224+
func TestError_Message(t *testing.T) {
225+
type fields struct {
226+
original error
227+
message string
228+
eType errType
229+
fileLine string
230+
}
231+
tests := []struct {
232+
name string
233+
fields fields
234+
want string
235+
}{
236+
{
237+
name: "No nested error",
238+
fields: fields{
239+
original: nil,
240+
message: "hello friendly error msg",
241+
eType: TypeInternal,
242+
fileLine: "errors.go:87",
243+
},
244+
want: "hello friendly error msg",
245+
},
246+
{
247+
name: "Empty message",
248+
fields: fields{
249+
original: nil,
250+
message: "",
251+
eType: TypeInternal,
252+
fileLine: "errors.go:87",
253+
},
254+
want: "",
255+
},
256+
{
257+
name: "Nested error with message",
258+
fields: fields{
259+
original: &Error{
260+
original: &Error{
261+
message: "",
262+
eType: TypeInputBody,
263+
fileLine: "errors.go:87",
264+
},
265+
message: "hello nested err message",
266+
eType: TypeInternal,
267+
fileLine: "errors.go:87",
268+
},
269+
message: "",
270+
eType: TypeInternal,
271+
fileLine: "errors.go:87",
272+
},
273+
want: "hello nested err message",
274+
},
275+
}
276+
277+
for _, tt := range tests {
278+
t.Run(tt.name, func(t *testing.T) {
279+
e := &Error{
280+
original: tt.fields.original,
281+
message: tt.fields.message,
282+
eType: tt.fields.eType,
283+
fileLine: tt.fields.fileLine,
284+
}
285+
if got := e.Message(); got != tt.want {
286+
t.Errorf("Error.Message() = %v, want %v", got, tt.want)
287+
}
288+
})
289+
}
290+
}

0 commit comments

Comments
 (0)