Skip to content

Commit e180545

Browse files
authored
Merge pull request #415 from plgd-dev/jkralik/feature/statusUnwrap
status error: implement Unwrap
2 parents a09be9a + 823f240 commit e180545

File tree

2 files changed

+65
-11
lines changed

2 files changed

+65
-11
lines changed

message/status/status.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,26 +37,26 @@ func CodeToString(c codes.Code) string {
3737
return c.String()
3838
}
3939

40-
func (se Status) Error() string {
41-
return fmt.Sprintf("coap error: code = %s desc = %v", CodeToString(se.Code()), se.err)
40+
func (s Status) Error() string {
41+
return fmt.Sprintf("coap error: code = %s desc = %v", CodeToString(s.Code()), s.err)
4242
}
4343

44-
// Code returns the status code contained in se.
45-
func (se Status) Code() codes.Code {
46-
if se.msg != nil {
47-
return se.msg.Code()
44+
// Code returns the status code contained in s.
45+
func (s Status) Code() codes.Code {
46+
if s.msg != nil {
47+
return s.msg.Code()
4848
}
49-
return se.code
49+
return s.code
5050
}
5151

5252
// Message returns a coap message.
53-
func (se Status) Message() *pool.Message {
54-
return se.msg
53+
func (s Status) Message() *pool.Message {
54+
return s.msg
5555
}
5656

5757
// COAPError just for check interface
58-
func (se Status) COAPError() Status {
59-
return se
58+
func (s Status) COAPError() Status {
59+
return s
6060
}
6161

6262
// Error returns an error representing c and msg. If c is OK, returns nil.
@@ -142,3 +142,8 @@ func FromContextError(err error) Status {
142142
}
143143
}
144144
}
145+
146+
// Unwrap unpacks wrapped errors.
147+
func (s Status) Unwrap() error {
148+
return s.err
149+
}

message/status/status_test.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package status
2+
3+
import (
4+
"context"
5+
"errors"
6+
"fmt"
7+
"testing"
8+
9+
"github.com/plgd-dev/go-coap/v3/message/codes"
10+
"github.com/plgd-dev/go-coap/v3/message/pool"
11+
"github.com/stretchr/testify/require"
12+
)
13+
14+
func TestStatus(t *testing.T) {
15+
s, ok := FromError(nil)
16+
require.True(t, ok)
17+
require.Equal(t, OK, s.Code())
18+
19+
_, ok = FromError(fmt.Errorf("test"))
20+
require.False(t, ok)
21+
22+
msg := pool.NewMessage(context.TODO())
23+
msg.SetCode(codes.NotFound)
24+
err := Errorf(msg, "test %w", context.Canceled)
25+
s, ok = FromError(err)
26+
require.True(t, ok)
27+
require.Equal(t, codes.NotFound, s.Code())
28+
require.True(t, errors.Is(err, context.Canceled))
29+
30+
s = Convert(err)
31+
require.Equal(t, codes.NotFound, s.Code())
32+
require.Equal(t, codes.NotFound, Code(err))
33+
34+
require.Equal(t, OK, Code(nil))
35+
36+
err = FromContextError(context.Canceled)
37+
require.True(t, errors.Is(err, context.Canceled))
38+
require.Equal(t, Canceled, Code(err))
39+
40+
err = FromContextError(nil)
41+
require.Equal(t, OK, Code(err))
42+
43+
err = FromContextError(context.DeadlineExceeded)
44+
require.Equal(t, Timeout, Code(err))
45+
46+
err = FromContextError(fmt.Errorf("test"))
47+
require.Equal(t, Unknown, Code(err))
48+
require.Equal(t, Unknown, Code(fmt.Errorf("test")))
49+
}

0 commit comments

Comments
 (0)