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

Signed-off-by: Iceber Gu <wei.cai-nat@daocloud.io>

Kubernetes-commit: 85fa121f84ee33bdc8d77e7a35d1f4d2c063c28f
This commit is contained in:
Iceber Gu 2021-04-02 10:17:57 +08:00 committed by Kubernetes Publisher
parent 4e267f6cae
commit fc03592e80
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)
}
}