cubefs

Форк
0
/
error_test.go 
109 строк · 2.9 Кб
1
// Copyright 2022 The CubeFS Authors.
2
//
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
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
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.
14

15
package rpc
16

17
import (
18
	"context"
19
	"errors"
20
	"syscall"
21
	"testing"
22

23
	"github.com/stretchr/testify/require"
24
)
25

26
func TestErrorBase(t *testing.T) {
27
	{
28
		err := NewError(0, "", nil)
29
		require.Equal(t, 0, err.StatusCode())
30
		require.Equal(t, "", err.ErrorCode())
31
		require.Equal(t, "", err.Error())
32
	}
33
	{
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())
38
	}
39
	{
40
		errBase := NewError(400, "", errors.New(""))
41
		err := NewError(499, "Unknown", errBase)
42
		require.ErrorIs(t, errBase, errors.Unwrap(err))
43
	}
44

45
	{
46
		require.Equal(t, 200, DetectStatusCode(nil))
47
		require.Equal(t, 222, DetectStatusCode(&Error{
48
			Status: 222,
49
			Code:   "CODE",
50
			Err:    errors.New("error"),
51
		}))
52
		require.Equal(t, 400, DetectStatusCode(syscall.EINVAL))
53

54
		ctx, cancel := context.WithCancel(context.Background())
55
		cancel()
56
		require.Equal(t, 499, DetectStatusCode(ctx.Err()))
57

58
		require.Equal(t, 500, DetectStatusCode(errors.New("server error")))
59
	}
60
	{
61
		require.Equal(t, "", DetectErrorCode(nil))
62
		require.Equal(t, "CODE", DetectErrorCode(&Error{
63
			Status: 222,
64
			Code:   "CODE",
65
			Err:    errors.New("error"),
66
		}))
67
		require.Equal(t, "BadRequest", DetectErrorCode(syscall.EINVAL))
68

69
		ctx, cancel := context.WithCancel(context.Background())
70
		cancel()
71
		require.Equal(t, "Canceled", DetectErrorCode(ctx.Err()))
72

73
		require.Equal(t, "InternalServerError", DetectErrorCode(errors.New("server error")))
74
	}
75
	{
76
		errBase := errors.New("error")
77
		status, code, err := DetectError(&Error{
78
			Status: 222,
79
			Code:   "CODE",
80
			Err:    errBase,
81
		})
82
		require.Equal(t, 222, status)
83
		require.Equal(t, "CODE", code)
84
		require.ErrorIs(t, errBase, err)
85
	}
86

87
	{
88
		httpErr := Error2HTTPError(nil)
89
		require.Nil(t, httpErr)
90
	}
91
	{
92
		errBase := errors.New("error")
93
		httpErr := Error2HTTPError(&Error{
94
			Status: 222,
95
			Code:   "CODE",
96
			Err:    errBase,
97
		})
98
		require.Equal(t, 222, httpErr.StatusCode())
99
		require.Equal(t, "CODE", httpErr.ErrorCode())
100
		require.Equal(t, "error", httpErr.Error())
101
	}
102
	{
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())
108
	}
109
}
110

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.