mirror of
https://github.com/kubernetes/client-go.git
synced 2025-06-26 15:12:06 +00:00
Merge pull request #100939 from wzshiming/feat/subresource-match
Feature support FakeClientset match subresource Kubernetes-commit: 5c137f1af94e23a71e7a7a3dad037f1193147778
This commit is contained in:
commit
742abf77bc
@ -20,6 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
jsonpatch "github.com/evanphx/json-patch"
|
jsonpatch "github.com/evanphx/json-patch"
|
||||||
@ -509,12 +510,8 @@ func (r *SimpleReactor) Handles(action Action) bool {
|
|||||||
if !verbCovers {
|
if !verbCovers {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
resourceCovers := r.Resource == "*" || r.Resource == action.GetResource().Resource
|
|
||||||
if !resourceCovers {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
return resourceCovers(r.Resource, action)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *SimpleReactor) React(action Action) (bool, runtime.Object, error) {
|
func (r *SimpleReactor) React(action Action) (bool, runtime.Object, error) {
|
||||||
@ -530,12 +527,7 @@ type SimpleWatchReactor struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *SimpleWatchReactor) Handles(action Action) bool {
|
func (r *SimpleWatchReactor) Handles(action Action) bool {
|
||||||
resourceCovers := r.Resource == "*" || r.Resource == action.GetResource().Resource
|
return resourceCovers(r.Resource, action)
|
||||||
if !resourceCovers {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *SimpleWatchReactor) React(action Action) (bool, watch.Interface, error) {
|
func (r *SimpleWatchReactor) React(action Action) (bool, watch.Interface, error) {
|
||||||
@ -551,14 +543,27 @@ type SimpleProxyReactor struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *SimpleProxyReactor) Handles(action Action) bool {
|
func (r *SimpleProxyReactor) Handles(action Action) bool {
|
||||||
resourceCovers := r.Resource == "*" || r.Resource == action.GetResource().Resource
|
return resourceCovers(r.Resource, action)
|
||||||
if !resourceCovers {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *SimpleProxyReactor) React(action Action) (bool, restclient.ResponseWrapper, error) {
|
func (r *SimpleProxyReactor) React(action Action) (bool, restclient.ResponseWrapper, error) {
|
||||||
return r.Reaction(action)
|
return r.Reaction(action)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resourceCovers(resource string, action Action) bool {
|
||||||
|
if resource == "*" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if resource == action.GetResource().Resource {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if index := strings.Index(resource, "/"); index != -1 &&
|
||||||
|
resource[:index] == action.GetResource().Resource &&
|
||||||
|
resource[index+1:] == action.GetSubresource() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
@ -322,3 +322,90 @@ func TestGetWithExactMatch(t *testing.T) {
|
|||||||
errNotFound = errors.NewNotFound(gvr.GroupResource(), "pod")
|
errNotFound = errors.NewNotFound(gvr.GroupResource(), "pod")
|
||||||
assert.EqualError(t, err, errNotFound.Error())
|
assert.EqualError(t, err, errNotFound.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_resourceCovers(t *testing.T) {
|
||||||
|
type args struct {
|
||||||
|
resource string
|
||||||
|
action Action
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
args args
|
||||||
|
want bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
args: args{
|
||||||
|
resource: "*",
|
||||||
|
action: ActionImpl{},
|
||||||
|
},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
args: args{
|
||||||
|
resource: "serviceaccounts",
|
||||||
|
action: ActionImpl{},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
args: args{
|
||||||
|
resource: "serviceaccounts",
|
||||||
|
action: ActionImpl{
|
||||||
|
Resource: schema.GroupVersionResource{
|
||||||
|
Resource: "serviceaccounts",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
args: args{
|
||||||
|
resource: "serviceaccounts/token",
|
||||||
|
action: ActionImpl{
|
||||||
|
Resource: schema.GroupVersionResource{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
args: args{
|
||||||
|
resource: "serviceaccounts/token",
|
||||||
|
action: ActionImpl{
|
||||||
|
Resource: schema.GroupVersionResource{
|
||||||
|
Resource: "serviceaccounts",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
args: args{
|
||||||
|
resource: "serviceaccounts/token",
|
||||||
|
action: ActionImpl{
|
||||||
|
Resource: schema.GroupVersionResource{},
|
||||||
|
Subresource: "token",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
args: args{
|
||||||
|
resource: "serviceaccounts/token",
|
||||||
|
action: ActionImpl{
|
||||||
|
Resource: schema.GroupVersionResource{
|
||||||
|
Resource: "serviceaccounts",
|
||||||
|
},
|
||||||
|
Subresource: "token",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := resourceCovers(tt.args.resource, tt.args.action); got != tt.want {
|
||||||
|
t.Errorf("resourceCovers() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user