1
16
17 package v1alpha1_test
18
19 import (
20 "reflect"
21 "testing"
22
23 "k8s.io/api/rbac/v1alpha1"
24 "k8s.io/kubernetes/pkg/api/legacyscheme"
25 rbacapi "k8s.io/kubernetes/pkg/apis/rbac"
26 _ "k8s.io/kubernetes/pkg/apis/rbac/install"
27 )
28
29 func TestConversion(t *testing.T) {
30 testcases := map[string]struct {
31 old *v1alpha1.RoleBinding
32 expected *rbacapi.RoleBinding
33 }{
34 "specific user": {
35 old: &v1alpha1.RoleBinding{
36 RoleRef: v1alpha1.RoleRef{Name: "foo", APIGroup: v1alpha1.GroupName},
37 Subjects: []v1alpha1.Subject{{Kind: "User", APIVersion: v1alpha1.SchemeGroupVersion.String(), Name: "bob"}},
38 },
39 expected: &rbacapi.RoleBinding{
40 RoleRef: rbacapi.RoleRef{Name: "foo", APIGroup: v1alpha1.GroupName},
41 Subjects: []rbacapi.Subject{{Kind: "User", APIGroup: v1alpha1.GroupName, Name: "bob"}},
42 },
43 },
44 "wildcard user matches authenticated": {
45 old: &v1alpha1.RoleBinding{
46 RoleRef: v1alpha1.RoleRef{Name: "foo", APIGroup: v1alpha1.GroupName},
47 Subjects: []v1alpha1.Subject{{Kind: "User", APIVersion: v1alpha1.SchemeGroupVersion.String(), Name: "*"}},
48 },
49 expected: &rbacapi.RoleBinding{
50 RoleRef: rbacapi.RoleRef{Name: "foo", APIGroup: v1alpha1.GroupName},
51 Subjects: []rbacapi.Subject{{Kind: "Group", APIGroup: v1alpha1.GroupName, Name: "system:authenticated"}},
52 },
53 },
54 "missing api group gets defaulted": {
55 old: &v1alpha1.RoleBinding{
56 RoleRef: v1alpha1.RoleRef{Name: "foo", APIGroup: v1alpha1.GroupName},
57 Subjects: []v1alpha1.Subject{
58 {Kind: "User", Name: "myuser"},
59 {Kind: "Group", Name: "mygroup"},
60 {Kind: "ServiceAccount", Name: "mysa", Namespace: "myns"},
61 },
62 },
63 expected: &rbacapi.RoleBinding{
64 RoleRef: rbacapi.RoleRef{Name: "foo", APIGroup: v1alpha1.GroupName},
65 Subjects: []rbacapi.Subject{
66 {Kind: "User", APIGroup: v1alpha1.GroupName, Name: "myuser"},
67 {Kind: "Group", APIGroup: v1alpha1.GroupName, Name: "mygroup"},
68 {Kind: "ServiceAccount", APIGroup: "", Name: "mysa", Namespace: "myns"},
69 },
70 },
71 },
72 "bad api group gets defaulted": {
73 old: &v1alpha1.RoleBinding{
74 RoleRef: v1alpha1.RoleRef{Name: "foo", APIGroup: v1alpha1.GroupName},
75 Subjects: []v1alpha1.Subject{
76 {Kind: "User", APIVersion: "rbac", Name: "myuser"},
77 {Kind: "Group", APIVersion: "rbac", Name: "mygroup"},
78 {Kind: "ServiceAccount", APIVersion: "rbac", Name: "mysa", Namespace: "myns"},
79 {Kind: "User", APIVersion: "rbac/v8", Name: "myuser"},
80 {Kind: "Group", APIVersion: "rbac/v8", Name: "mygroup"},
81 {Kind: "ServiceAccount", APIVersion: "rbac/v8", Name: "mysa", Namespace: "myns"},
82 },
83 },
84 expected: &rbacapi.RoleBinding{
85 RoleRef: rbacapi.RoleRef{Name: "foo", APIGroup: v1alpha1.GroupName},
86 Subjects: []rbacapi.Subject{
87 {Kind: "User", APIGroup: v1alpha1.GroupName, Name: "myuser"},
88 {Kind: "Group", APIGroup: v1alpha1.GroupName, Name: "mygroup"},
89 {Kind: "ServiceAccount", APIGroup: "", Name: "mysa", Namespace: "myns"},
90 {Kind: "User", APIGroup: v1alpha1.GroupName, Name: "myuser"},
91 {Kind: "Group", APIGroup: v1alpha1.GroupName, Name: "mygroup"},
92 {Kind: "ServiceAccount", APIGroup: "", Name: "mysa", Namespace: "myns"},
93 },
94 },
95 },
96 }
97 for k, tc := range testcases {
98 internal := &rbacapi.RoleBinding{}
99 if err := legacyscheme.Scheme.Convert(tc.old, internal, nil); err != nil {
100 t.Errorf("%s: unexpected error: %v", k, err)
101 }
102 if !reflect.DeepEqual(internal, tc.expected) {
103 t.Errorf("%s: expected\n\t%#v, got \n\t%#v", k, tc.expected, internal)
104 }
105 }
106 }
107
View as plain text