Skip to content

Commit 94e10eb

Browse files
committed
Improve code coverage for frontend/csi package
1 parent 41d6e53 commit 94e10eb

File tree

12 files changed

+10542
-272
lines changed

12 files changed

+10542
-272
lines changed

frontend/csi/controller_helpers/kubernetes/utils_test.go

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"testing"
77

88
"github.com/stretchr/testify/assert"
9+
v1 "k8s.io/api/core/v1"
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
911
"k8s.io/apimachinery/pkg/version"
1012

1113
"github.com/netapp/trident/frontend/csi"
@@ -42,3 +44,135 @@ func TestGetDataSizeFromTotalSize(t *testing.T) {
4244

4345
assert.Equal(t, expectedDataSize, result, "Data size not as expected")
4446
}
47+
48+
func TestValidateKubeVersion(t *testing.T) {
49+
testCases := []struct {
50+
name string
51+
kubeVersion *version.Info
52+
assertErr assert.ErrorAssertionFunc
53+
}{
54+
{
55+
name: "Valid version",
56+
kubeVersion: &version.Info{
57+
GitVersion: "v1.28.0",
58+
Major: "1",
59+
Minor: "28",
60+
},
61+
assertErr: assert.NoError,
62+
},
63+
{
64+
name: "Unsupported version",
65+
kubeVersion: &version.Info{
66+
GitVersion: "v1.15.0", // Below supported version, triggers warning
67+
Major: "1",
68+
Minor: "15",
69+
},
70+
assertErr: assert.NoError, // Warning is logged, but no error returned
71+
},
72+
{
73+
name: "Invalid semantic version",
74+
kubeVersion: &version.Info{
75+
GitVersion: "invalid-version",
76+
Major: "1",
77+
Minor: "xx",
78+
},
79+
assertErr: assert.Error,
80+
},
81+
}
82+
83+
for _, tc := range testCases {
84+
t.Run(tc.name, func(t *testing.T) {
85+
h := &helper{
86+
kubeVersion: tc.kubeVersion,
87+
}
88+
err := h.validateKubeVersion()
89+
90+
tc.assertErr(t, err)
91+
})
92+
}
93+
}
94+
95+
func TestGetStorageClassForPVC(t *testing.T) {
96+
class := "gold"
97+
98+
testCases := []struct {
99+
name string
100+
pvc *v1.PersistentVolumeClaim
101+
expectedClass string
102+
}{
103+
{
104+
name: "StorageClass set",
105+
pvc: &v1.PersistentVolumeClaim{
106+
Spec: v1.PersistentVolumeClaimSpec{
107+
StorageClassName: &class,
108+
},
109+
},
110+
expectedClass: "gold",
111+
},
112+
{
113+
name: "StorageClass nil",
114+
pvc: &v1.PersistentVolumeClaim{
115+
Spec: v1.PersistentVolumeClaimSpec{
116+
StorageClassName: nil,
117+
},
118+
},
119+
expectedClass: "",
120+
},
121+
}
122+
123+
for _, tc := range testCases {
124+
t.Run(tc.name, func(t *testing.T) {
125+
result := getStorageClassForPVC(tc.pvc)
126+
assert.Equal(t, tc.expectedClass, result)
127+
})
128+
}
129+
}
130+
131+
func TestCheckValidStorageClassReceived(t *testing.T) {
132+
ctx := context.Background()
133+
class := "standard"
134+
135+
testCases := []struct {
136+
name string
137+
pvc *v1.PersistentVolumeClaim
138+
assertErr assert.ErrorAssertionFunc
139+
}{
140+
{
141+
name: "Valid storage class",
142+
pvc: &v1.PersistentVolumeClaim{
143+
ObjectMeta: metav1.ObjectMeta{Name: "pvc1"},
144+
Spec: v1.PersistentVolumeClaimSpec{
145+
StorageClassName: &class,
146+
},
147+
},
148+
assertErr: assert.NoError,
149+
},
150+
{
151+
name: "Nil storage class",
152+
pvc: &v1.PersistentVolumeClaim{
153+
ObjectMeta: metav1.ObjectMeta{Name: "pvc2"},
154+
Spec: v1.PersistentVolumeClaimSpec{},
155+
},
156+
assertErr: assert.Error,
157+
},
158+
{
159+
name: "Empty storage class",
160+
pvc: &v1.PersistentVolumeClaim{
161+
ObjectMeta: metav1.ObjectMeta{Name: "pvc3"},
162+
Spec: v1.PersistentVolumeClaimSpec{
163+
StorageClassName: new(string), // empty string pointer
164+
},
165+
},
166+
assertErr: assert.Error,
167+
},
168+
}
169+
170+
h := &helper{}
171+
for _, tc := range testCases {
172+
t.Run(tc.name, func(t *testing.T) {
173+
err := h.checkValidStorageClassReceived(ctx, tc.pvc)
174+
175+
tc.assertErr(t, err)
176+
})
177+
}
178+
}

0 commit comments

Comments
 (0)