-
Notifications
You must be signed in to change notification settings - Fork 217
Expand file tree
/
Copy patherrors_test.go
More file actions
123 lines (105 loc) · 2.96 KB
/
errors_test.go
File metadata and controls
123 lines (105 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// SPDX-FileCopyrightText: Copyright 2025 Stacklok, Inc.
// SPDX-License-Identifier: Apache-2.0
package webhook
import (
"errors"
"fmt"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestWebhookErrors(t *testing.T) {
t.Parallel()
underlyingErr := fmt.Errorf("connection refused")
tests := []struct {
name string
err error
expectedMsg string
isTimeout bool
isNetwork bool
isInvalidResp bool
unwrapsToInner bool
}{
{
name: "TimeoutError",
err: NewTimeoutError("my-webhook", underlyingErr),
expectedMsg: `webhook "my-webhook": timeout: connection refused`,
isTimeout: true,
unwrapsToInner: true,
},
{
name: "NetworkError",
err: NewNetworkError("my-webhook", underlyingErr),
expectedMsg: `webhook "my-webhook": network error: connection refused`,
isNetwork: true,
unwrapsToInner: true,
},
{
name: "InvalidResponseError",
err: NewInvalidResponseError("my-webhook", underlyingErr, 0),
expectedMsg: `webhook "my-webhook": invalid response: connection refused`,
isInvalidResp: true,
unwrapsToInner: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
assert.Equal(t, tt.expectedMsg, tt.err.Error())
// Test errors.As for each type.
var timeoutErr *TimeoutError
assert.Equal(t, tt.isTimeout, errors.As(tt.err, &timeoutErr))
var networkErr *NetworkError
assert.Equal(t, tt.isNetwork, errors.As(tt.err, &networkErr))
var invalidRespErr *InvalidResponseError
assert.Equal(t, tt.isInvalidResp, errors.As(tt.err, &invalidRespErr))
// Test Unwrap chain reaches the underlying error.
if tt.unwrapsToInner {
require.True(t, errors.Is(tt.err, underlyingErr),
"expected error to unwrap to underlying error")
}
})
}
}
func TestWebhookErrorBaseType(t *testing.T) {
t.Parallel()
inner := fmt.Errorf("some error")
err := &WebhookError{WebhookName: "base-test", Err: inner}
assert.Equal(t, `webhook "base-test": some error`, err.Error())
assert.Equal(t, inner, err.Unwrap())
}
func TestIsAlwaysDenyError(t *testing.T) {
t.Parallel()
tests := []struct {
name string
err error
want bool
}{
{
name: "unprocessable entity invalid response",
err: NewInvalidResponseError("test", fmt.Errorf("unprocessable"), 422),
want: true,
},
{
name: "other invalid response status",
err: NewInvalidResponseError("test", fmt.Errorf("bad request"), 400),
want: false,
},
{
name: "invalid response without status",
err: NewInvalidResponseError("test", fmt.Errorf("decode error"), 0),
want: false,
},
{
name: "non invalid response error",
err: NewNetworkError("test", fmt.Errorf("network")),
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
assert.Equal(t, tt.want, IsAlwaysDenyError(tt.err))
})
}
}