mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #88644 from MikeSpreitzer/literal-match-tests
Added non-randomized tests of matching FlowSchema rules
This commit is contained in:
commit
db73df3abe
@ -21,7 +21,11 @@ import (
|
|||||||
"math/rand"
|
"math/rand"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
fcv1a1 "k8s.io/api/flowcontrol/v1alpha1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
"k8s.io/apiserver/pkg/authentication/user"
|
||||||
|
"k8s.io/apiserver/pkg/endpoints/request"
|
||||||
fcfmt "k8s.io/apiserver/pkg/util/flowcontrol/format"
|
fcfmt "k8s.io/apiserver/pkg/util/flowcontrol/format"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -76,3 +80,243 @@ func TestPolicyRules(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLiterals(t *testing.T) {
|
||||||
|
ui := &user.DefaultInfo{Name: "goodu", UID: "1",
|
||||||
|
Groups: []string{"goodg1", "goodg2"}}
|
||||||
|
reqRN := RequestDigest{
|
||||||
|
&request.RequestInfo{
|
||||||
|
IsResourceRequest: true,
|
||||||
|
Path: "/apis/goodapig/v1/namespaces/goodns/goodrscs",
|
||||||
|
Verb: "goodverb",
|
||||||
|
APIPrefix: "apis",
|
||||||
|
APIGroup: "goodapig",
|
||||||
|
APIVersion: "v1",
|
||||||
|
Namespace: "goodns",
|
||||||
|
Resource: "goodrscs",
|
||||||
|
Name: "eman",
|
||||||
|
Parts: []string{"goodrscs", "eman"}},
|
||||||
|
ui}
|
||||||
|
reqRU := RequestDigest{
|
||||||
|
&request.RequestInfo{
|
||||||
|
IsResourceRequest: true,
|
||||||
|
Path: "/apis/goodapig/v1/goodrscs",
|
||||||
|
Verb: "goodverb",
|
||||||
|
APIPrefix: "apis",
|
||||||
|
APIGroup: "goodapig",
|
||||||
|
APIVersion: "v1",
|
||||||
|
Namespace: "",
|
||||||
|
Resource: "goodrscs",
|
||||||
|
Name: "eman",
|
||||||
|
Parts: []string{"goodrscs", "eman"}},
|
||||||
|
ui}
|
||||||
|
reqN := RequestDigest{
|
||||||
|
&request.RequestInfo{
|
||||||
|
IsResourceRequest: false,
|
||||||
|
Path: "/openapi/v2",
|
||||||
|
Verb: "goodverb"},
|
||||||
|
ui}
|
||||||
|
checkRules(t, true, reqRN, []fcv1a1.PolicyRulesWithSubjects{{
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindGroup,
|
||||||
|
Group: &fcv1a1.GroupSubject{"goodg1"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"*"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindGroup,
|
||||||
|
Group: &fcv1a1.GroupSubject{"*"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"*"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"*"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"*"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"*"}}}},
|
||||||
|
})
|
||||||
|
checkRules(t, false, reqRN, []fcv1a1.PolicyRulesWithSubjects{{
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"badu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindGroup,
|
||||||
|
Group: &fcv1a1.GroupSubject{"badg"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"badverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"badapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"badrscs"},
|
||||||
|
Namespaces: []string{"goodns"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
Namespaces: []string{"badns"}}}},
|
||||||
|
})
|
||||||
|
checkRules(t, true, reqRU, []fcv1a1.PolicyRulesWithSubjects{{
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
ClusterScope: true}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"*"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
ClusterScope: true}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"*"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
ClusterScope: true}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"*"},
|
||||||
|
ClusterScope: true}}}})
|
||||||
|
checkRules(t, false, reqRU, []fcv1a1.PolicyRulesWithSubjects{{
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"badverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
ClusterScope: true}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"badapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
ClusterScope: true}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"badrscs"},
|
||||||
|
ClusterScope: true}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
ResourceRules: []fcv1a1.ResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
APIGroups: []string{"goodapig"},
|
||||||
|
Resources: []string{"goodrscs"},
|
||||||
|
ClusterScope: false}}},
|
||||||
|
})
|
||||||
|
checkRules(t, true, reqN, []fcv1a1.PolicyRulesWithSubjects{{
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
NonResourceRules: []fcv1a1.NonResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
NonResourceURLs: []string{"/openapi/v2"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
NonResourceRules: []fcv1a1.NonResourcePolicyRule{{
|
||||||
|
Verbs: []string{"*"},
|
||||||
|
NonResourceURLs: []string{"/openapi/v2"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
NonResourceRules: []fcv1a1.NonResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
NonResourceURLs: []string{"*"}}}},
|
||||||
|
})
|
||||||
|
checkRules(t, false, reqN, []fcv1a1.PolicyRulesWithSubjects{{
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
NonResourceRules: []fcv1a1.NonResourcePolicyRule{{
|
||||||
|
Verbs: []string{"badverb"},
|
||||||
|
NonResourceURLs: []string{"/openapi/v2"}}}}, {
|
||||||
|
Subjects: []fcv1a1.Subject{{Kind: fcv1a1.SubjectKindUser,
|
||||||
|
User: &fcv1a1.UserSubject{"goodu"}}},
|
||||||
|
NonResourceRules: []fcv1a1.NonResourcePolicyRule{{
|
||||||
|
Verbs: []string{"goodverb"},
|
||||||
|
NonResourceURLs: []string{"/closedapi/v2"}}}},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkRules(t *testing.T, expectMatch bool, digest RequestDigest, rules []fcv1a1.PolicyRulesWithSubjects) {
|
||||||
|
for idx, rule := range rules {
|
||||||
|
fs := &fcv1a1.FlowSchema{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{Name: fmt.Sprintf("rule%d", idx)},
|
||||||
|
Spec: fcv1a1.FlowSchemaSpec{
|
||||||
|
Rules: []fcv1a1.PolicyRulesWithSubjects{rule}}}
|
||||||
|
actualMatch := matchesFlowSchema(digest, fs)
|
||||||
|
if expectMatch != actualMatch {
|
||||||
|
t.Errorf("expectMatch=%v, actualMatch=%v, digest=%#+v, fs=%s", expectMatch, actualMatch, digest, fcfmt.Fmt(fs))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user