1
16
17 package node
18
19 import (
20 "context"
21 "testing"
22
23 v1 "k8s.io/api/core/v1"
24 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25 clientsetfake "k8s.io/client-go/kubernetes/fake"
26 bootstraptokenv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/bootstraptoken/v1"
27 )
28
29 func TestUpdateOrCreateTokens(t *testing.T) {
30 tests := []struct {
31 name string
32 failIfExists bool
33 tokens []bootstraptokenv1.BootstrapToken
34 wantErr bool
35 }{
36 {
37 name: "token is nil",
38 failIfExists: true,
39 tokens: []bootstraptokenv1.BootstrapToken{},
40 wantErr: false,
41 },
42 {
43 name: "create secret which does not exist",
44 failIfExists: true,
45 tokens: []bootstraptokenv1.BootstrapToken{
46 {
47 Token: &bootstraptokenv1.BootstrapTokenString{
48 ID: "token1",
49 Secret: "token1data",
50 },
51 },
52 },
53 wantErr: false,
54 },
55 {
56 name: "create multiple secrets which do not exist",
57 failIfExists: true,
58 tokens: []bootstraptokenv1.BootstrapToken{
59 {
60 Token: &bootstraptokenv1.BootstrapTokenString{
61 ID: "token1",
62 Secret: "token1data",
63 },
64 },
65 {
66 Token: &bootstraptokenv1.BootstrapTokenString{
67 ID: "token2",
68 Secret: "token2data",
69 },
70 },
71 {
72 Token: &bootstraptokenv1.BootstrapTokenString{
73 ID: "token3",
74 Secret: "token3data",
75 },
76 },
77 },
78 wantErr: false,
79 },
80 {
81 name: "create secret which exists, failIfExists is false",
82 failIfExists: false,
83 tokens: []bootstraptokenv1.BootstrapToken{
84 {
85 Token: &bootstraptokenv1.BootstrapTokenString{
86 ID: "foo",
87 Secret: "bar",
88 },
89 },
90 },
91 wantErr: false,
92 },
93 {
94 name: "create secret which exists, failIfExists is true",
95 failIfExists: true,
96 tokens: []bootstraptokenv1.BootstrapToken{
97 {
98 Token: &bootstraptokenv1.BootstrapTokenString{
99 ID: "foo",
100 Secret: "bar",
101 },
102 },
103 },
104 wantErr: true,
105 },
106 }
107 for _, tc := range tests {
108 t.Run(tc.name, func(t *testing.T) {
109 client := newMockClientForTest(t)
110 if err := UpdateOrCreateTokens(client, tc.failIfExists, tc.tokens); (err != nil) != tc.wantErr {
111 t.Fatalf("UpdateOrCreateTokens() error = %v, wantErr %v", err, tc.wantErr)
112 }
113 })
114 }
115 }
116
117 func newMockClientForTest(t *testing.T) *clientsetfake.Clientset {
118 client := clientsetfake.NewSimpleClientset()
119 _, err := client.CoreV1().Secrets(metav1.NamespaceSystem).Create(context.TODO(), &v1.Secret{
120 TypeMeta: metav1.TypeMeta{
121 Kind: "Secret",
122 APIVersion: "v1",
123 },
124 ObjectMeta: metav1.ObjectMeta{
125 Name: "bootstrap-token-foo",
126 Labels: map[string]string{"app": "foo"},
127 Namespace: metav1.NamespaceSystem,
128 },
129 Data: map[string][]byte{"foo": {'f', 'o', 'o'}},
130 }, metav1.CreateOptions{})
131 if err != nil {
132 t.Fatalf("error creating sercet: %v", err)
133 }
134 return client
135 }
136
View as plain text