From 42ff4e354c90a11a1f03538274c5dadd4052d9ee Mon Sep 17 00:00:00 2001 From: "Madhusudan.C.S" Date: Thu, 26 Jan 2017 20:23:59 -0800 Subject: [PATCH] Add unit tests. --- federation/pkg/kubefed/init/init_test.go | 102 +++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/federation/pkg/kubefed/init/init_test.go b/federation/pkg/kubefed/init/init_test.go index 21e7961d66b..2acb8cc610a 100644 --- a/federation/pkg/kubefed/init/init_test.go +++ b/federation/pkg/kubefed/init/init_test.go @@ -43,6 +43,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" + rbacv1beta1 "k8s.io/kubernetes/pkg/apis/rbac/v1beta1" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/util/intstr" @@ -554,6 +555,62 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, }, } + sa := v1.ServiceAccount{ + TypeMeta: metav1.TypeMeta{ + Kind: "ServiceAccount", + APIVersion: testapi.Default.GroupVersion().String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "federation-controller-manager", + Namespace: namespaceName, + Labels: componentLabel, + }, + } + + role := rbacv1beta1.Role{ + TypeMeta: metav1.TypeMeta{ + Kind: "Role", + APIVersion: testapi.Rbac.GroupVersion().String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "federation-system:federation-controller-manager", + Namespace: namespaceName, + Labels: componentLabel, + }, + Rules: []rbacv1beta1.PolicyRule{ + { + Verbs: []string{"get", "list", "watch"}, + APIGroups: []string{""}, + Resources: []string{"secrets"}, + }, + }, + } + + rolebinding := rbacv1beta1.RoleBinding{ + TypeMeta: metav1.TypeMeta{ + Kind: "RoleBinding", + APIVersion: testapi.Rbac.GroupVersion().String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "federation-system:federation-controller-manager", + Namespace: namespaceName, + Labels: componentLabel, + }, + Subjects: []rbacv1beta1.Subject{ + { + Kind: "ServiceAccount", + APIVersion: "", + Name: "federation-controller-manager", + Namespace: "federation-system", + }, + }, + RoleRef: rbacv1beta1.RoleRef{ + APIGroup: "rbac.authorization.k8s.io", + Kind: "Role", + Name: "federation-system:federation-controller-manager", + }, + } + apiserver := v1beta1.Deployment{ TypeMeta: metav1.TypeMeta{ Kind: "Deployment", @@ -709,6 +766,8 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, }, }, }, + ServiceAccountName: "federation-controller-manager", + DeprecatedServiceAccount: "federation-controller-manager", }, }, }, @@ -748,6 +807,7 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, f, tf, codec, _ := cmdtesting.NewAPIFactory() extCodec := testapi.Extensions.Codec() + rbacCodec := testapi.Rbac.Codec() ns := dynamic.ContentConfig().NegotiatedSerializer tf.ClientConfig = kubefedtesting.DefaultClientConfig() tf.Client = &fake.RESTClient{ @@ -852,6 +912,48 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, return &http.Response{StatusCode: http.StatusCreated, Header: kubefedtesting.DefaultHeader(), Body: kubefedtesting.ObjBody(extCodec, &want)}, nil case p == "/api/v1/namespaces/federation-system/pods" && m == http.MethodGet: return &http.Response{StatusCode: http.StatusOK, Header: kubefedtesting.DefaultHeader(), Body: kubefedtesting.ObjBody(codec, &podList)}, nil + case p == "/api/v1/namespaces/federation-system/serviceaccounts" && m == http.MethodPost: + body, err := ioutil.ReadAll(req.Body) + if err != nil { + return nil, err + } + var got v1.ServiceAccount + _, _, err = codec.Decode(body, nil, &got) + if err != nil { + return nil, err + } + if !api.Semantic.DeepEqual(got, sa) { + return nil, fmt.Errorf("Unexpected service account object\n\tDiff: %s", diff.ObjectGoPrintDiff(got, sa)) + } + return &http.Response{StatusCode: http.StatusCreated, Header: kubefedtesting.DefaultHeader(), Body: kubefedtesting.ObjBody(codec, &sa)}, nil + case p == "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/federation-system/roles" && m == http.MethodPost: + body, err := ioutil.ReadAll(req.Body) + if err != nil { + return nil, err + } + var got rbacv1beta1.Role + _, _, err = codec.Decode(body, nil, &got) + if err != nil { + return nil, err + } + if !api.Semantic.DeepEqual(got, role) { + return nil, fmt.Errorf("Unexpected role object\n\tDiff: %s", diff.ObjectGoPrintDiff(got, role)) + } + return &http.Response{StatusCode: http.StatusCreated, Header: kubefedtesting.DefaultHeader(), Body: kubefedtesting.ObjBody(rbacCodec, &role)}, nil + case p == "/apis/rbac.authorization.k8s.io/v1beta1/namespaces/federation-system/rolebindings" && m == http.MethodPost: + body, err := ioutil.ReadAll(req.Body) + if err != nil { + return nil, err + } + var got rbacv1beta1.RoleBinding + _, _, err = codec.Decode(body, nil, &got) + if err != nil { + return nil, err + } + if !api.Semantic.DeepEqual(got, rolebinding) { + return nil, fmt.Errorf("Unexpected rolebinding object\n\tDiff: %s", diff.ObjectGoPrintDiff(got, rolebinding)) + } + return &http.Response{StatusCode: http.StatusCreated, Header: kubefedtesting.DefaultHeader(), Body: kubefedtesting.ObjBody(rbacCodec, &rolebinding)}, nil default: return nil, fmt.Errorf("unexpected request: %#v\n%#v", req.URL, req) }