Merge pull request #100768 from Iceber/fix-nested-key-error

client-go/cache: support errors.Unwrap for KeyError

Kubernetes-commit: 9b9a67ad530daeb397b1b74c0104e65b14d3ca21
This commit is contained in:
Kubernetes Publisher 2021-04-16 11:54:34 -07:00
commit d974964d12
2 changed files with 21 additions and 0 deletions

View File

@ -85,6 +85,11 @@ func (k KeyError) Error() string {
return fmt.Sprintf("couldn't create key for object %+v: %v", k.Obj, k.Err)
}
// Unwrap implements errors.Unwrap
func (k KeyError) Unwrap() error {
return k.Err
}
// ExplicitKey can be passed to MetaNamespaceKeyFunc if you have the key for
// the object but not the object itself.
type ExplicitKey string

View File

@ -17,6 +17,7 @@ limitations under the License.
package cache
import (
"errors"
"testing"
"k8s.io/apimachinery/pkg/util/sets"
@ -154,3 +155,18 @@ func TestUndeltaStore(t *testing.T) {
func TestIndex(t *testing.T) {
doTestIndex(t, NewIndexer(testStoreKeyFunc, testStoreIndexers()))
}
func TestKeyError(t *testing.T) {
obj := 100
err := errors.New("error")
keyErr := KeyError{obj, err}
if errors.Unwrap(keyErr) != err {
t.Errorf("expected unwrap error: %v", err)
}
nestedKeyErr := KeyError{obj, keyErr}
if !errors.Is(keyErr, err) || !errors.Is(nestedKeyErr, err) {
t.Errorf("not match target error: %v", err)
}
}