@@ -26,7 +26,7 @@ var _ = Describe("ValidateProviderSpecNSecret", func() {
2626 }
2727 secret = & corev1.Secret {
2828 Data : map [string ][]byte {
29- "projectId" : []byte ("test-project " ),
29+ "projectId" : []byte ("11111111-2222-3333-4444-555555555555 " ),
3030 "stackitToken" : []byte ("test-token" ),
3131 },
3232 }
@@ -45,13 +45,33 @@ var _ = Describe("ValidateProviderSpecNSecret", func() {
4545 Expect (errors [0 ].Error ()).To (ContainSubstring ("machineType" ))
4646 })
4747
48+ It ("should fail when MachineType has invalid format" , func () {
49+ providerSpec .MachineType = "InvalidFormat"
50+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
51+ Expect (errors ).NotTo (BeEmpty ())
52+ Expect (errors [0 ].Error ()).To (ContainSubstring ("machineType has invalid format" ))
53+ })
54+
55+ It ("should succeed when MachineType has valid format" , func () {
56+ providerSpec .MachineType = "c1.2"
57+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
58+ Expect (errors ).To (BeEmpty ())
59+ })
60+
4861 It ("should fail when ImageID is empty" , func () {
4962 providerSpec .ImageID = ""
5063 errors := ValidateProviderSpecNSecret (providerSpec , secret )
5164 Expect (errors ).NotTo (BeEmpty ())
5265 Expect (errors [0 ].Error ()).To (ContainSubstring ("imageId" ))
5366 })
5467
68+ It ("should fail when ImageID is not a valid UUID" , func () {
69+ providerSpec .ImageID = "invalid-uuid"
70+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
71+ Expect (errors ).NotTo (BeEmpty ())
72+ Expect (errors [0 ].Error ()).To (ContainSubstring ("imageId must be a valid UUID" ))
73+ })
74+
5575 It ("should fail when both required fields are empty" , func () {
5676 providerSpec .MachineType = ""
5777 providerSpec .ImageID = ""
@@ -79,6 +99,126 @@ var _ = Describe("ValidateProviderSpecNSecret", func() {
7999 errors := ValidateProviderSpecNSecret (providerSpec , secret )
80100 Expect (errors ).To (BeEmpty ())
81101 })
102+
103+ It ("should succeed with label keys containing allowed characters" , func () {
104+ providerSpec .Labels = map [string ]string {
105+ "app.kubernetes.io_component" : "worker" ,
106+ "environment-type" : "prod" ,
107+ "version" : "v1.2.3" ,
108+ }
109+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
110+ Expect (errors ).To (BeEmpty ())
111+ })
112+
113+ It ("should succeed with label values containing allowed characters" , func () {
114+ providerSpec .Labels = map [string ]string {
115+ "env" : "production-env_01.test" ,
116+ "version" : "v1.2.3-alpha" ,
117+ }
118+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
119+ Expect (errors ).To (BeEmpty ())
120+ })
121+
122+ It ("should succeed with empty label value" , func () {
123+ providerSpec .Labels = map [string ]string {
124+ "optional-label" : "" ,
125+ }
126+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
127+ Expect (errors ).To (BeEmpty ())
128+ })
129+
130+ It ("should fail when label key exceeds 63 characters" , func () {
131+ longKey := string (make ([]byte , 64 ))
132+ for i := range longKey {
133+ longKey = longKey [:i ] + "a" + longKey [i + 1 :]
134+ }
135+ providerSpec .Labels = map [string ]string {
136+ longKey : "value" ,
137+ }
138+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
139+ Expect (errors ).NotTo (BeEmpty ())
140+ Expect (errors [0 ].Error ()).To (ContainSubstring ("exceeds maximum length of 63 characters" ))
141+ })
142+
143+ It ("should fail when label value exceeds 63 characters" , func () {
144+ longValue := string (make ([]byte , 64 ))
145+ for i := range longValue {
146+ longValue = longValue [:i ] + "a" + longValue [i + 1 :]
147+ }
148+ providerSpec .Labels = map [string ]string {
149+ "key" : longValue ,
150+ }
151+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
152+ Expect (errors ).NotTo (BeEmpty ())
153+ Expect (errors [0 ].Error ()).To (ContainSubstring ("exceeds maximum length of 63 characters" ))
154+ })
155+
156+ It ("should fail when label key starts with non-alphanumeric" , func () {
157+ providerSpec .Labels = map [string ]string {
158+ "-invalid-key" : "value" ,
159+ }
160+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
161+ Expect (errors ).NotTo (BeEmpty ())
162+ Expect (errors [0 ].Error ()).To (ContainSubstring ("invalid format" ))
163+ })
164+
165+ It ("should fail when label key ends with non-alphanumeric" , func () {
166+ providerSpec .Labels = map [string ]string {
167+ "invalid-key-" : "value" ,
168+ }
169+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
170+ Expect (errors ).NotTo (BeEmpty ())
171+ Expect (errors [0 ].Error ()).To (ContainSubstring ("invalid format" ))
172+ })
173+
174+ It ("should fail when label key contains invalid characters" , func () {
175+ providerSpec .Labels = map [string ]string {
176+ "invalid@key" : "value" ,
177+ }
178+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
179+ Expect (errors ).NotTo (BeEmpty ())
180+ Expect (errors [0 ].Error ()).To (ContainSubstring ("invalid format" ))
181+ })
182+
183+ It ("should fail when label value starts with non-alphanumeric" , func () {
184+ providerSpec .Labels = map [string ]string {
185+ "key" : "-invalid-value" ,
186+ }
187+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
188+ Expect (errors ).NotTo (BeEmpty ())
189+ Expect (errors [0 ].Error ()).To (ContainSubstring ("invalid format" ))
190+ })
191+
192+ It ("should fail when label value ends with non-alphanumeric" , func () {
193+ providerSpec .Labels = map [string ]string {
194+ "key" : "invalid-value-" ,
195+ }
196+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
197+ Expect (errors ).NotTo (BeEmpty ())
198+ Expect (errors [0 ].Error ()).To (ContainSubstring ("invalid format" ))
199+ })
200+
201+ It ("should fail when label value contains invalid characters" , func () {
202+ providerSpec .Labels = map [string ]string {
203+ "key" : "invalid@value" ,
204+ }
205+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
206+ Expect (errors ).NotTo (BeEmpty ())
207+ Expect (errors [0 ].Error ()).To (ContainSubstring ("invalid format" ))
208+ })
209+
210+ It ("should fail with multiple label validation errors" , func () {
211+ longKey := string (make ([]byte , 64 ))
212+ for i := range longKey {
213+ longKey = longKey [:i ] + "a" + longKey [i + 1 :]
214+ }
215+ providerSpec .Labels = map [string ]string {
216+ longKey : "value1" ,
217+ "-invalid-key" : "value2" ,
218+ }
219+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
220+ Expect (errors ).To (HaveLen (2 ))
221+ })
82222 })
83223
84224 Context ("Networking validation" , func () {
@@ -562,5 +702,12 @@ var _ = Describe("ValidateProviderSpecNSecret", func() {
562702 Expect (errors ).NotTo (BeEmpty ())
563703 Expect (errors [0 ].Error ()).To (ContainSubstring ("projectId" ))
564704 })
705+
706+ It ("should fail when projectId is not a valid UUID" , func () {
707+ secret .Data ["projectId" ] = []byte ("invalid-uuid" )
708+ errors := ValidateProviderSpecNSecret (providerSpec , secret )
709+ Expect (errors ).NotTo (BeEmpty ())
710+ Expect (errors [0 ].Error ()).To (ContainSubstring ("projectId' must be a valid UUID" ))
711+ })
565712 })
566713})
0 commit comments