-
Notifications
You must be signed in to change notification settings - Fork 113
/
errors.go
54 lines (43 loc) · 1.32 KB
/
errors.go
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
package util
import (
"strings"
"testing"
"github.com/pkg/errors"
gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
"github.com/kyma-project/control-plane/components/provisioner/internal/apperrors"
"gotest.tools/assert"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
)
func K8SErrorToAppError(err error) apperrors.AppError {
var apperr apperrors.AppError
cause := errors.Cause(err)
switch {
case k8serrors.IsBadRequest(cause):
apperr = apperrors.BadRequest(err.Error())
case k8serrors.IsForbidden(cause):
apperr = apperrors.Forbidden(err.Error())
default:
apperr = apperrors.Internal(err.Error())
}
return apperr.SetComponent(apperrors.ErrClusterK8SClient).SetReason(apperrors.ErrReason(k8serrors.ReasonForError(cause)))
}
func GardenerErrCodesToErrReason(lastErrors ...gardencorev1beta1.LastError) apperrors.ErrReason {
var codes []gardencorev1beta1.ErrorCode
var vals []string
for _, e := range lastErrors {
if len(e.Codes) > 0 {
codes = append(codes, e.Codes...)
}
}
for _, code := range codes {
vals = append(vals, string(code))
}
return apperrors.ErrReason(strings.Join(vals, ", "))
}
func CheckErrorType(t *testing.T, err error, errCode apperrors.ErrCode) {
var appErr apperrors.AppError
if !errors.As(err, &appErr) {
t.Fail()
}
assert.Equal(t, appErr.Code(), errCode)
}