mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-30 17:58:14 +00:00 
			
		
		
		
	 65b5b51c82
			
		
	
	65b5b51c82
	
	
	
		
			
			Supplement unit tests to `kubectl create rolebinding` command, including: 1. Unit tests for pkg/kubectl/role.go 2. Unit tests for pkg/kubectl/cmd/create_role.go
		
			
				
	
	
		
			136 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
| Copyright 2017 The Kubernetes Authors.
 | |
| 
 | |
| Licensed under the Apache License, Version 2.0 (the "License");
 | |
| you may not use this file except in compliance with the License.
 | |
| You may obtain a copy of the License at
 | |
| 
 | |
|     http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
| Unless required by applicable law or agreed to in writing, software
 | |
| distributed under the License is distributed on an "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| See the License for the specific language governing permissions and
 | |
| limitations under the License.
 | |
| */
 | |
| 
 | |
| package kubectl
 | |
| 
 | |
| import (
 | |
| 	"reflect"
 | |
| 	"testing"
 | |
| 
 | |
| 	"k8s.io/apimachinery/pkg/apis/meta/v1"
 | |
| 	"k8s.io/kubernetes/pkg/apis/rbac"
 | |
| )
 | |
| 
 | |
| func TestRoleBindingGenerate(t *testing.T) {
 | |
| 	tests := map[string]struct {
 | |
| 		params        map[string]interface{}
 | |
| 		expectErrMsg  string
 | |
| 		expectBinding *rbac.RoleBinding
 | |
| 	}{
 | |
| 		"test-missing-name": {
 | |
| 			params: map[string]interface{}{
 | |
| 				"role":           "fake-role",
 | |
| 				"groups":         []string{"fake-group"},
 | |
| 				"serviceaccount": []string{"fake-namespace:fake-account"},
 | |
| 			},
 | |
| 			expectErrMsg: "Parameter: name is required",
 | |
| 		},
 | |
| 		"test-missing-role-and-clusterrole": {
 | |
| 			params: map[string]interface{}{
 | |
| 				"name":           "fake-binding",
 | |
| 				"group":          []string{"fake-group"},
 | |
| 				"serviceaccount": []string{"fake-namespace:fake-account"},
 | |
| 			},
 | |
| 			expectErrMsg: "exactly one of clusterrole or role must be specified",
 | |
| 		},
 | |
| 		"test-both-role-and-clusterrole-provided": {
 | |
| 			params: map[string]interface{}{
 | |
| 				"name":           "fake-binding",
 | |
| 				"role":           "fake-role",
 | |
| 				"clusterrole":    "fake-clusterrole",
 | |
| 				"group":          []string{"fake-group"},
 | |
| 				"serviceaccount": []string{"fake-namespace:fake-account"},
 | |
| 			},
 | |
| 			expectErrMsg: "exactly one of clusterrole or role must be specified",
 | |
| 		},
 | |
| 		"test-invalid-parameter-type": {
 | |
| 			params: map[string]interface{}{
 | |
| 				"name":           "fake-binding",
 | |
| 				"role":           []string{"fake-role"},
 | |
| 				"group":          []string{"fake-group"},
 | |
| 				"serviceaccount": []string{"fake-namespace:fake-account"},
 | |
| 			},
 | |
| 			expectErrMsg: "expected string, saw [fake-role] for 'role'",
 | |
| 		},
 | |
| 		"test-invalid-serviceaccount": {
 | |
| 			params: map[string]interface{}{
 | |
| 				"name":           "fake-binding",
 | |
| 				"role":           "fake-role",
 | |
| 				"group":          []string{"fake-group"},
 | |
| 				"serviceaccount": []string{"fake-account"},
 | |
| 			},
 | |
| 			expectErrMsg: "serviceaccount must be <namespace>:<name>",
 | |
| 		},
 | |
| 		"test-valid-case": {
 | |
| 			params: map[string]interface{}{
 | |
| 				"name":           "fake-binding",
 | |
| 				"role":           "fake-role",
 | |
| 				"user":           []string{"fake-user"},
 | |
| 				"group":          []string{"fake-group"},
 | |
| 				"serviceaccount": []string{"fake-namespace:fake-account"},
 | |
| 			},
 | |
| 			expectBinding: &rbac.RoleBinding{
 | |
| 				ObjectMeta: v1.ObjectMeta{
 | |
| 					Name: "fake-binding",
 | |
| 				},
 | |
| 				RoleRef: rbac.RoleRef{
 | |
| 					APIGroup: rbac.GroupName,
 | |
| 					Kind:     "Role",
 | |
| 					Name:     "fake-role",
 | |
| 				},
 | |
| 				Subjects: []rbac.Subject{
 | |
| 					{
 | |
| 						Kind:     rbac.UserKind,
 | |
| 						APIGroup: "rbac.authorization.k8s.io",
 | |
| 						Name:     "fake-user",
 | |
| 					},
 | |
| 					{
 | |
| 						Kind:     rbac.GroupKind,
 | |
| 						APIGroup: "rbac.authorization.k8s.io",
 | |
| 						Name:     "fake-group",
 | |
| 					},
 | |
| 					{
 | |
| 						Kind:      rbac.ServiceAccountKind,
 | |
| 						Namespace: "fake-namespace",
 | |
| 						Name:      "fake-account",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	generator := RoleBindingGeneratorV1{}
 | |
| 	for name, test := range tests {
 | |
| 		obj, err := generator.Generate(test.params)
 | |
| 		switch {
 | |
| 		case test.expectErrMsg != "" && err != nil:
 | |
| 			if err.Error() != test.expectErrMsg {
 | |
| 				t.Errorf("test '%s': expect error '%s', but saw '%s'", name, test.expectErrMsg, err.Error())
 | |
| 			}
 | |
| 			continue
 | |
| 		case test.expectErrMsg != "" && err == nil:
 | |
| 			t.Errorf("test '%s': expected error '%s' and didn't get one", name, test.expectErrMsg)
 | |
| 			continue
 | |
| 		case test.expectErrMsg == "" && err != nil:
 | |
| 			t.Errorf("test '%s': unexpected error %s", name, err.Error())
 | |
| 			continue
 | |
| 		}
 | |
| 		if !reflect.DeepEqual(obj.(*rbac.RoleBinding), test.expectBinding) {
 | |
| 			t.Errorf("test '%s': expected:\n%#v\nsaw:\n%#v", name, test.expectBinding, obj.(*rbac.RoleBinding))
 | |
| 		}
 | |
| 	}
 | |
| }
 |