...
1
16
17 package certificates
18
19 import (
20 "context"
21 "testing"
22
23 certv1 "k8s.io/api/certificates/v1"
24 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25 clientset "k8s.io/client-go/kubernetes"
26
27 kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
28 "k8s.io/kubernetes/test/integration/framework"
29 )
30
31
32 func TestCertificateSubjectRestrictionPlugin(t *testing.T) {
33 tests := map[string]struct {
34 signerName string
35 group string
36 error string
37 }{
38 "should reject a request if signerName is kube-apiserver-client and group is system:masters": {
39 signerName: certv1.KubeAPIServerClientSignerName,
40 group: "system:masters",
41 error: `certificatesigningrequests.certificates.k8s.io "csr" is forbidden: use of kubernetes.io/kube-apiserver-client signer with system:masters group is not allowed`,
42 },
43 "should admit a request if signerName is kube-apiserver-client and group is NOT system:masters": {
44 signerName: certv1.KubeAPIServerClientSignerName,
45 group: "system:notmasters",
46 },
47 }
48 for name, test := range tests {
49 t.Run(name, func(t *testing.T) {
50
51 s := kubeapiservertesting.StartTestServerOrDie(t, kubeapiservertesting.NewDefaultTestServerOptions(), []string{""}, framework.SharedEtcd())
52 defer s.TearDownFn()
53 client := clientset.NewForConfigOrDie(s.ClientConfig)
54
55
56 csr := buildTestingCSR("csr", test.signerName, test.group)
57 _, err := client.CertificatesV1().CertificateSigningRequests().Create(context.TODO(), csr, metav1.CreateOptions{})
58 if err != nil && test.error != err.Error() {
59 t.Errorf("expected error %q but got: %v", test.error, err)
60 }
61 if err == nil && test.error != "" {
62 t.Errorf("expected to get an error %q but got none", test.error)
63 }
64 })
65 }
66 }
67
View as plain text