Skip to content

Commit 675d922

Browse files
author
Ekko Tu
committed
Add Unit tests
Signed-off-by: Ekko Tu <[email protected]>
1 parent e3fba1b commit 675d922

File tree

3 files changed

+426
-64
lines changed

3 files changed

+426
-64
lines changed

pkg/crypto/crypto_test.go

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
package crypto
2+
3+
import (
4+
"errors"
5+
"testing"
6+
7+
corev1 "k8s.io/api/core/v1"
8+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+
"k8s.io/apimachinery/pkg/runtime"
10+
"k8s.io/client-go/kubernetes/fake"
11+
ktesting "k8s.io/client-go/testing"
12+
13+
"github.com/kubean-io/kubean-api/constants"
14+
"github.com/kubean-io/kubean/pkg/util"
15+
)
16+
17+
func TestInitConfiguration(t *testing.T) {
18+
tests := []struct {
19+
name string
20+
existingCM *corev1.ConfigMap
21+
expectError bool
22+
expectCreate bool
23+
expectUpdate bool
24+
getError error
25+
updateError error
26+
createError error
27+
}{
28+
{
29+
name: "private key already exists",
30+
existingCM: &corev1.ConfigMap{
31+
ObjectMeta: metav1.ObjectMeta{
32+
Name: constants.KubeanConfigMapName,
33+
Namespace: util.GetCurrentNSOrDefault(),
34+
},
35+
Data: map[string]string{
36+
PrivateKey: "existing-private-key",
37+
},
38+
},
39+
expectError: false,
40+
expectCreate: false,
41+
expectUpdate: false,
42+
},
43+
{
44+
name: "private key is empty string",
45+
existingCM: &corev1.ConfigMap{
46+
ObjectMeta: metav1.ObjectMeta{
47+
Name: constants.KubeanConfigMapName,
48+
Namespace: util.GetCurrentNSOrDefault(),
49+
},
50+
Data: map[string]string{
51+
PrivateKey: "",
52+
},
53+
},
54+
expectError: false,
55+
expectCreate: true,
56+
expectUpdate: true,
57+
},
58+
{
59+
name: "no private key field",
60+
existingCM: &corev1.ConfigMap{
61+
ObjectMeta: metav1.ObjectMeta{
62+
Name: constants.KubeanConfigMapName,
63+
Namespace: util.GetCurrentNSOrDefault(),
64+
},
65+
Data: map[string]string{},
66+
},
67+
expectError: false,
68+
expectCreate: true,
69+
expectUpdate: true,
70+
},
71+
{
72+
name: "configmap not found",
73+
existingCM: nil,
74+
expectError: true,
75+
getError: errors.New("configmap not found"),
76+
},
77+
{
78+
name: "update fails",
79+
existingCM: &corev1.ConfigMap{
80+
ObjectMeta: metav1.ObjectMeta{
81+
Name: constants.KubeanConfigMapName,
82+
Namespace: util.GetCurrentNSOrDefault(),
83+
},
84+
Data: map[string]string{},
85+
},
86+
expectError: true,
87+
updateError: errors.New("update failed"),
88+
},
89+
{
90+
name: "create pubkey configmap fails",
91+
existingCM: &corev1.ConfigMap{
92+
ObjectMeta: metav1.ObjectMeta{
93+
Name: constants.KubeanConfigMapName,
94+
Namespace: util.GetCurrentNSOrDefault(),
95+
},
96+
Data: map[string]string{},
97+
},
98+
expectError: true,
99+
createError: errors.New("create failed"),
100+
},
101+
}
102+
103+
for _, tt := range tests {
104+
t.Run(tt.name, func(t *testing.T) {
105+
// Create fake clientset
106+
var objects []runtime.Object
107+
if tt.existingCM != nil {
108+
objects = append(objects, tt.existingCM)
109+
}
110+
clientset := fake.NewSimpleClientset(objects...)
111+
112+
// Mock errors if specified
113+
if tt.getError != nil {
114+
clientset.PrependReactor("get", "configmaps", func(action ktesting.Action) (handled bool, ret runtime.Object, err error) {
115+
return true, nil, tt.getError
116+
})
117+
}
118+
if tt.updateError != nil {
119+
clientset.PrependReactor("update", "configmaps", func(action ktesting.Action) (handled bool, ret runtime.Object, err error) {
120+
return true, nil, tt.updateError
121+
})
122+
}
123+
if tt.createError != nil {
124+
clientset.PrependReactor("create", "configmaps", func(action ktesting.Action) (handled bool, ret runtime.Object, err error) {
125+
return true, nil, tt.createError
126+
})
127+
}
128+
129+
// Execute test
130+
err := InitConfiguration(clientset)
131+
132+
// Verify results
133+
if tt.expectError && err == nil {
134+
t.Errorf("expected error but got none")
135+
}
136+
if !tt.expectError && err != nil {
137+
t.Errorf("unexpected error: %v", err)
138+
}
139+
140+
// Verify actions
141+
actions := clientset.Actions()
142+
143+
// Should always have a get action
144+
if len(actions) < 1 || actions[0].GetVerb() != "get" {
145+
t.Errorf("expected get action")
146+
}
147+
148+
if tt.expectUpdate {
149+
found := false
150+
for _, action := range actions {
151+
if action.GetVerb() == "update" {
152+
found = true
153+
break
154+
}
155+
}
156+
if !found {
157+
t.Errorf("expected update action")
158+
}
159+
}
160+
161+
if tt.expectCreate {
162+
found := false
163+
for _, action := range actions {
164+
if action.GetVerb() == "create" {
165+
found = true
166+
break
167+
}
168+
}
169+
if !found && tt.createError == nil {
170+
t.Errorf("expected create action")
171+
}
172+
}
173+
})
174+
}
175+
}

pkg/util/entrypoint/entrypoint_test.go

Lines changed: 3 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ func TestEntryPoint_buildPlaybookCmd(t *testing.T) {
356356
action: ResetPB,
357357
isPrivateKey: true,
358358
},
359-
want: "ansible-playbook -i /conf/hosts.yml -b --become-user root -e \"@/conf/group_vars.yml\" --private-key /auth/ssh-privatekey -e \"reset_confirmation=yes\" /kubespray/reset.yml",
359+
want: "ansible-playbook -i /dev/fd/200 -b --become-user root -e \"@/conf/group_vars.yml\" --private-key /auth/ssh-privatekey -e \"reset_confirmation=yes\" /kubespray/reset.yml",
360360
},
361361
{
362362
name: "test extra args case",
@@ -375,7 +375,7 @@ func TestEntryPoint_buildPlaybookCmd(t *testing.T) {
375375
action: ResetPB,
376376
extraArgs: "-e \"reset_confirmation=yes\"",
377377
},
378-
want: "ansible-playbook -i /conf/hosts.yml -b --become-user root -e \"@/conf/group_vars.yml\" --private-key /auth/ssh-privatekey -e \"reset_confirmation=yes\" /kubespray/reset.yml -e \"reset_confirmation=yes\"",
378+
want: "ansible-playbook -i /dev/fd/200 -b --become-user root -e \"@/conf/group_vars.yml\" --private-key /auth/ssh-privatekey -e \"reset_confirmation=yes\" /kubespray/reset.yml -e \"reset_confirmation=yes\"",
379379
},
380380
}
381381
for _, tt := range tests {
@@ -450,7 +450,7 @@ func Test_entryPoint_hookRunPart(t *testing.T) {
450450
isPrivateKey: true,
451451
},
452452
wantErr: false,
453-
want: "ansible-playbook -i /conf/hosts.yml -b --become-user root -e \"@/conf/group_vars.yml\" --private-key /auth/ssh-privatekey -e \"reset_confirmation=yes\" /kubespray/reset.yml",
453+
want: "ansible-playbook -i /dev/fd/200 -b --become-user root -e \"@/conf/group_vars.yml\" --private-key /auth/ssh-privatekey -e \"reset_confirmation=yes\" /kubespray/reset.yml",
454454
},
455455
{
456456
name: "test shell action case",
@@ -491,64 +491,3 @@ func Test_entryPoint_hookRunPart(t *testing.T) {
491491
})
492492
}
493493
}
494-
495-
func TestEntryPoint_Render(t *testing.T) {
496-
type fields struct {
497-
PreHookCMDs []string
498-
SprayCMD string
499-
PostHookCMDs []string
500-
Actions *Actions
501-
}
502-
tests := []struct {
503-
name string
504-
fields fields
505-
want string
506-
wantErr bool
507-
}{
508-
{
509-
name: "test PreHookCMDs not empty case",
510-
fields: fields{
511-
PreHookCMDs: []string{"cmd1", "cmd2", "cmd3"},
512-
},
513-
wantErr: false,
514-
want: "#!/bin/bash\n\nset -o errexit\nset -o nounset\nset -o pipefail\n\n# preinstall\ncmd1\ncmd2\ncmd3\n\n\n# run kubespray\n\n\n# postinstall\n\n",
515-
},
516-
{
517-
name: "test SprayCMD not empty case",
518-
fields: fields{
519-
PreHookCMDs: []string{"cmd1", "cmd2", "cmd3"},
520-
SprayCMD: "echo $TEST",
521-
},
522-
want: "#!/bin/bash\n\nset -o errexit\nset -o nounset\nset -o pipefail\n\n# preinstall\ncmd1\ncmd2\ncmd3\n\n\n# run kubespray\necho $TEST\n\n# postinstall\n\n",
523-
wantErr: false,
524-
},
525-
{
526-
name: "test PostHookCMDs not empty case",
527-
fields: fields{
528-
PreHookCMDs: []string{"cmd1", "cmd2", "cmd3"},
529-
SprayCMD: "echo $TEST",
530-
PostHookCMDs: []string{"cmd4"},
531-
},
532-
wantErr: false,
533-
want: "#!/bin/bash\n\nset -o errexit\nset -o nounset\nset -o pipefail\n\n# preinstall\ncmd1\ncmd2\ncmd3\n\n\n# run kubespray\necho $TEST\n\n# postinstall\ncmd4\n\n",
534-
},
535-
}
536-
for _, tt := range tests {
537-
t.Run(tt.name, func(t *testing.T) {
538-
ep := &EntryPoint{
539-
PreHookCMDs: tt.fields.PreHookCMDs,
540-
SprayCMD: tt.fields.SprayCMD,
541-
PostHookCMDs: tt.fields.PostHookCMDs,
542-
Actions: tt.fields.Actions,
543-
}
544-
got, err := ep.Render()
545-
if (err != nil) != tt.wantErr {
546-
t.Errorf("Render() error = %v, wantErr %v", err, tt.wantErr)
547-
return
548-
}
549-
if got != tt.want {
550-
t.Errorf("Render() got = %v, want %v", got, tt.want)
551-
}
552-
})
553-
}
554-
}

0 commit comments

Comments
 (0)