1
// Copyright 2022 The CubeFS Authors.
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
7
// http://www.apache.org/licenses/LICENSE-2.0
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12
// implied. See the License for the specific language governing
13
// permissions and limitations under the License.
23
"github.com/stretchr/testify/require"
26
func TestErrorBase(t *testing.T) {
28
err := NewError(0, "", nil)
29
require.Equal(t, 0, err.StatusCode())
30
require.Equal(t, "", err.ErrorCode())
31
require.Equal(t, "", err.Error())
34
err := NewError(499, "Unknown", errors.New("unknown"))
35
require.Equal(t, 499, err.StatusCode())
36
require.Equal(t, "Unknown", err.ErrorCode())
37
require.Equal(t, "unknown", err.Error())
40
errBase := NewError(400, "", errors.New(""))
41
err := NewError(499, "Unknown", errBase)
42
require.ErrorIs(t, errBase, errors.Unwrap(err))
46
require.Equal(t, 200, DetectStatusCode(nil))
47
require.Equal(t, 222, DetectStatusCode(&Error{
50
Err: errors.New("error"),
52
require.Equal(t, 400, DetectStatusCode(syscall.EINVAL))
54
ctx, cancel := context.WithCancel(context.Background())
56
require.Equal(t, 499, DetectStatusCode(ctx.Err()))
58
require.Equal(t, 500, DetectStatusCode(errors.New("server error")))
61
require.Equal(t, "", DetectErrorCode(nil))
62
require.Equal(t, "CODE", DetectErrorCode(&Error{
65
Err: errors.New("error"),
67
require.Equal(t, "BadRequest", DetectErrorCode(syscall.EINVAL))
69
ctx, cancel := context.WithCancel(context.Background())
71
require.Equal(t, "Canceled", DetectErrorCode(ctx.Err()))
73
require.Equal(t, "InternalServerError", DetectErrorCode(errors.New("server error")))
76
errBase := errors.New("error")
77
status, code, err := DetectError(&Error{
82
require.Equal(t, 222, status)
83
require.Equal(t, "CODE", code)
84
require.ErrorIs(t, errBase, err)
88
httpErr := Error2HTTPError(nil)
89
require.Nil(t, httpErr)
92
errBase := errors.New("error")
93
httpErr := Error2HTTPError(&Error{
98
require.Equal(t, 222, httpErr.StatusCode())
99
require.Equal(t, "CODE", httpErr.ErrorCode())
100
require.Equal(t, "error", httpErr.Error())
103
errBase := errors.New("error")
104
httpErr := Error2HTTPError(errBase)
105
require.Equal(t, 500, httpErr.StatusCode())
106
require.Equal(t, "InternalServerError", httpErr.ErrorCode())
107
require.Equal(t, "error", httpErr.Error())