Skip to content

Commit 4f7beac

Browse files
add tests for error utils
1 parent 8f97b00 commit 4f7beac

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

pkg/utils/errors_test.go

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package utils
2+
3+
import (
4+
"errors"
5+
"io/fs"
6+
"testing"
7+
"time"
8+
9+
"github.com/stretchr/testify/assert"
10+
corev1 "k8s.io/api/core/v1"
11+
apierrors "k8s.io/apimachinery/pkg/api/errors"
12+
"k8s.io/apimachinery/pkg/api/meta"
13+
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14+
"k8s.io/apimachinery/pkg/runtime/schema"
15+
"sigs.k8s.io/controller-runtime/pkg/client"
16+
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
17+
)
18+
19+
func TestRetryableError(t *testing.T) {
20+
wrapped := errors.New("example error")
21+
err := NewRetryableError(wrapped, time.Minute)
22+
23+
assert.IsType(t, &RetryableError{}, err)
24+
assert.True(t, errors.Is(err, &RetryableError{}), "error is not RetryableError")
25+
assert.True(t, errors.Is(err, wrapped), "RetryableError does not contain wrapped error")
26+
assert.False(t, errors.Is(err, fs.ErrClosed), "RetryableError matches unrelated error")
27+
28+
re := &RetryableError{}
29+
if assert.True(t, errors.As(err, &re)) {
30+
assert.Equal(t, wrapped, re.Err)
31+
assert.Equal(t, wrapped.Error(), re.Error())
32+
assert.Equal(t, time.Minute, re.RequeueAfter)
33+
}
34+
}
35+
36+
func TestRemainingResourcesError(t *testing.T) {
37+
objs := []client.Object{
38+
&corev1.Namespace{
39+
ObjectMeta: v1.ObjectMeta{
40+
Name: "example",
41+
},
42+
},
43+
&corev1.Secret{
44+
ObjectMeta: v1.ObjectMeta{
45+
Name: "foo",
46+
Namespace: "example",
47+
},
48+
},
49+
}
50+
err := NewRemainingResourcesError(time.Minute, objs...)
51+
52+
assert.True(t, errors.Is(err, &RemainingResourcesError{}), "error is not RemainingResourcesError")
53+
assert.True(t, errors.Is(err, &RetryableError{}), "error is not RetryableError")
54+
assert.False(t, errors.Is(err, fs.ErrClosed), "RemainingResourcesError matches unrelated error")
55+
56+
rr := &RemainingResourcesError{}
57+
if assert.True(t, errors.As(err, &rr)) {
58+
assert.EqualValues(t, objs, rr.Objects)
59+
assert.Equal(t, "deletion of the following resources is still pending: [Namespace/example, Secret/example/foo]", rr.Error())
60+
}
61+
62+
re := &RetryableError{}
63+
if assert.True(t, errors.As(err, &re)) {
64+
assert.Equal(t, time.Minute, re.RequeueAfter)
65+
}
66+
}
67+
68+
func TestIsCRDNotFoundError(t *testing.T) {
69+
testCases := []struct {
70+
desc string
71+
err error
72+
expected bool
73+
}{
74+
{
75+
desc: "should return false when err is nil",
76+
err: nil,
77+
expected: false,
78+
},
79+
{
80+
desc: "should return false when err is NoResourceMatchError",
81+
err: &meta.NoResourceMatchError{},
82+
expected: true,
83+
},
84+
{
85+
desc: "should return false when err is NoKindMatchError",
86+
err: &meta.NoKindMatchError{},
87+
expected: true,
88+
},
89+
{
90+
desc: "resource discovery failed error",
91+
err: &apiutil.ErrResourceDiscoveryFailed{},
92+
expected: true,
93+
},
94+
{
95+
desc: "not found error",
96+
err: &apiutil.ErrResourceDiscoveryFailed{
97+
schema.GroupVersion{}: apierrors.NewNotFound(schema.GroupResource{}, ""),
98+
},
99+
expected: true,
100+
},
101+
{
102+
desc: "multiple not found error",
103+
err: &apiutil.ErrResourceDiscoveryFailed{
104+
schema.GroupVersion{}: apierrors.NewNotFound(schema.GroupResource{}, ""),
105+
schema.GroupVersion{}: apierrors.NewNotFound(schema.GroupResource{}, ""),
106+
},
107+
expected: true,
108+
},
109+
{
110+
desc: "Not found and forbidden error",
111+
err: &apiutil.ErrResourceDiscoveryFailed{
112+
schema.GroupVersion{}: apierrors.NewNotFound(schema.GroupResource{}, ""),
113+
schema.GroupVersion{}: apierrors.NewForbidden(schema.GroupResource{}, "", nil),
114+
},
115+
expected: false,
116+
},
117+
}
118+
for _, tC := range testCases {
119+
t.Run(tC.desc, func(t *testing.T) {
120+
actual := IsCRDNotFoundError(tC.err)
121+
assert.Equal(t, tC.expected, actual)
122+
})
123+
}
124+
}

0 commit comments

Comments
 (0)