Skip to content

Commit e47f2d5

Browse files
easyCZroboquat
authored andcommitted
[public-api] Handle context cancelled as deadline exceeded error
1 parent 68c6a2d commit e47f2d5

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

Diff for: components/public-api-server/pkg/proxy/errors.go

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package proxy
66

77
import (
8+
"context"
89
"errors"
910
"fmt"
1011

@@ -53,6 +54,10 @@ func categorizeRPCError(err error) *connect.Error {
5354
}
5455
}
5556

57+
if errors.Is(err, context.Canceled) {
58+
return connect.NewError(connect.CodeDeadlineExceeded, fmt.Errorf("Request timed out"))
59+
}
60+
5661
if handshakeErr := new(protocol.ErrBadHandshake); errors.As(err, &handshakeErr) {
5762
return connect.NewError(connect.CodeUnauthenticated, fmt.Errorf("Failed to establish caller identity"))
5863
}

Diff for: components/public-api-server/pkg/proxy/errors_test.go

+17-12
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package proxy
66

77
import (
8+
"context"
89
"errors"
910
"fmt"
1011
"testing"
@@ -17,55 +18,59 @@ import (
1718

1819
func TestConvertError(t *testing.T) {
1920
scenarios := []struct {
20-
WebsocketError error
21-
ExpectedError error
21+
Input error
22+
ExpectedError error
2223
}{
2324
{
24-
WebsocketError: &protocol.ErrBadHandshake{
25+
Input: &protocol.ErrBadHandshake{
2526
URL: "https://foo.bar",
2627
},
2728
ExpectedError: connect.NewError(connect.CodeUnauthenticated, fmt.Errorf("Failed to establish caller identity")),
2829
},
2930
{
30-
WebsocketError: &jsonrpc2.Error{
31+
Input: &jsonrpc2.Error{
3132
Code: 400,
3233
Message: "user id is a required argument",
3334
},
3435
ExpectedError: connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("user id is a required argument")),
3536
},
3637
{
37-
WebsocketError: &jsonrpc2.Error{
38+
Input: &jsonrpc2.Error{
3839
Code: -32603,
3940
Message: "Request getWorkspace failed with message: No workspace with id 'some-id' found.",
4041
},
4142
ExpectedError: connect.NewError(connect.CodeInternal, fmt.Errorf("Request getWorkspace failed with message: No workspace with id 'some-id' found.")),
4243
},
4344
{
44-
WebsocketError: &jsonrpc2.Error{
45+
Input: &jsonrpc2.Error{
4546
Code: 409,
4647
Message: "already exists",
4748
},
4849
ExpectedError: connect.NewError(connect.CodeAlreadyExists, fmt.Errorf("already exists")),
4950
},
5051
{
51-
WebsocketError: &jsonrpc2.Error{
52+
Input: &jsonrpc2.Error{
5253
Code: 470,
5354
Message: "user blocked",
5455
},
5556
ExpectedError: connect.NewError(connect.CodePermissionDenied, fmt.Errorf("user blocked")),
5657
},
5758
{
58-
WebsocketError: nil,
59-
ExpectedError: nil,
59+
Input: nil,
60+
ExpectedError: nil,
6061
},
6162
{
62-
WebsocketError: errors.New("some other random error returns internal error"),
63-
ExpectedError: connect.NewError(connect.CodeInternal, fmt.Errorf("some other random error returns internal error")),
63+
Input: errors.New("some other random error returns internal error"),
64+
ExpectedError: connect.NewError(connect.CodeInternal, fmt.Errorf("some other random error returns internal error")),
65+
},
66+
{
67+
Input: context.Canceled,
68+
ExpectedError: connect.NewError(connect.CodeDeadlineExceeded, fmt.Errorf("Request timed out")),
6469
},
6570
}
6671

6772
for _, s := range scenarios {
68-
converted := ConvertError(s.WebsocketError)
73+
converted := ConvertError(s.Input)
6974
require.Equal(t, s.ExpectedError, converted)
7075
}
7176
}

0 commit comments

Comments
 (0)