mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-10-19 05:39:51 +00:00
348959acc3
Bumps the github-dependencies group with 2 updates: [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) and [github.com/onsi/gomega](https://github.com/onsi/gomega). Updates `github.com/aws/aws-sdk-go` from 1.46.3 to 1.46.4 - [Release notes](https://github.com/aws/aws-sdk-go/releases) - [Commits](https://github.com/aws/aws-sdk-go/compare/v1.46.3...v1.46.4) Updates `github.com/onsi/gomega` from 1.28.1 to 1.29.0 - [Release notes](https://github.com/onsi/gomega/releases) - [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md) - [Commits](https://github.com/onsi/gomega/compare/v1.28.1...v1.29.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-dependencies - dependency-name: github.com/onsi/gomega dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
87 lines
2.4 KiB
Go
87 lines
2.4 KiB
Go
package matchers
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"reflect"
|
|
|
|
"github.com/onsi/gomega/format"
|
|
)
|
|
|
|
type MatchErrorMatcher struct {
|
|
Expected any
|
|
FuncErrDescription []any
|
|
isFunc bool
|
|
}
|
|
|
|
func (matcher *MatchErrorMatcher) Match(actual any) (success bool, err error) {
|
|
matcher.isFunc = false
|
|
|
|
if isNil(actual) {
|
|
return false, fmt.Errorf("Expected an error, got nil")
|
|
}
|
|
|
|
if !isError(actual) {
|
|
return false, fmt.Errorf("Expected an error. Got:\n%s", format.Object(actual, 1))
|
|
}
|
|
|
|
actualErr := actual.(error)
|
|
expected := matcher.Expected
|
|
|
|
if isError(expected) {
|
|
// first try the built-in errors.Is
|
|
if errors.Is(actualErr, expected.(error)) {
|
|
return true, nil
|
|
}
|
|
// if not, try DeepEqual along the error chain
|
|
for unwrapped := actualErr; unwrapped != nil; unwrapped = errors.Unwrap(unwrapped) {
|
|
if reflect.DeepEqual(unwrapped, expected) {
|
|
return true, nil
|
|
}
|
|
}
|
|
return false, nil
|
|
}
|
|
|
|
if isString(expected) {
|
|
return actualErr.Error() == expected, nil
|
|
}
|
|
|
|
v := reflect.ValueOf(expected)
|
|
t := v.Type()
|
|
errorInterface := reflect.TypeOf((*error)(nil)).Elem()
|
|
if t.Kind() == reflect.Func && t.NumIn() == 1 && t.In(0).Implements(errorInterface) && t.NumOut() == 1 && t.Out(0).Kind() == reflect.Bool {
|
|
if len(matcher.FuncErrDescription) == 0 {
|
|
return false, fmt.Errorf("MatchError requires an additional description when passed a function")
|
|
}
|
|
matcher.isFunc = true
|
|
return v.Call([]reflect.Value{reflect.ValueOf(actualErr)})[0].Bool(), nil
|
|
}
|
|
|
|
var subMatcher omegaMatcher
|
|
var hasSubMatcher bool
|
|
if expected != nil {
|
|
subMatcher, hasSubMatcher = (expected).(omegaMatcher)
|
|
if hasSubMatcher {
|
|
return subMatcher.Match(actualErr.Error())
|
|
}
|
|
}
|
|
|
|
return false, fmt.Errorf(
|
|
"MatchError must be passed an error, a string, or a Matcher that can match on strings. Got:\n%s",
|
|
format.Object(expected, 1))
|
|
}
|
|
|
|
func (matcher *MatchErrorMatcher) FailureMessage(actual interface{}) (message string) {
|
|
if matcher.isFunc {
|
|
return format.Message(actual, fmt.Sprintf("to match error function %s", matcher.FuncErrDescription[0]))
|
|
}
|
|
return format.Message(actual, "to match error", matcher.Expected)
|
|
}
|
|
|
|
func (matcher *MatchErrorMatcher) NegatedFailureMessage(actual interface{}) (message string) {
|
|
if matcher.isFunc {
|
|
return format.Message(actual, fmt.Sprintf("not to match error function %s", matcher.FuncErrDescription[0]))
|
|
}
|
|
return format.Message(actual, "not to match error", matcher.Expected)
|
|
}
|