@@ -53,8 +53,6 @@ var _ = Describe("Backup", func() {
5353 mockCreateBackup (
5454 mockCtrl ,
5555 mockAPI ,
56- projectID ,
57- region ,
5856 expectedPayload ,
5957 )
6058
@@ -94,11 +92,172 @@ var _ = Describe("Backup", func() {
9492 },
9593 ),
9694 )
95+ })
96+
97+ Context ("CreateBackup error cases" , func () {
98+ const projectID = "project-id"
99+
100+ BeforeEach (func () {
101+ config = & Config {
102+ Global : GlobalOpts {
103+ ProjectID : projectID ,
104+ },
105+ }
106+ openStack , err = CreateSTACKITProvider (mockAPI , config )
107+ Expect (err ).ToNot (HaveOccurred ())
108+ })
109+
110+ It ("should return error when API fails" , func () {
111+ mockAPI .EXPECT ().CreateBackup (gomock .Any (), projectID , region ).Return (nil ).Times (1 )
112+
113+ backup , err := openStack .CreateBackup (context .Background (), "expected-name" , "volume-id" , "" , nil )
114+ Expect (err ).To (HaveOccurred ())
115+ Expect (backup ).To (BeNil ())
116+ })
97117
118+ It ("should return error when both volID and snapshotID are empty" , func () {
119+ backup , err := openStack .CreateBackup (context .Background (), "expected-name" , "" , "" , nil )
120+ Expect (err ).To (HaveOccurred ())
121+ Expect (backup ).To (BeNil ())
122+ })
123+
124+ It ("should return error when name is empty" , func () {
125+ backup , err := openStack .CreateBackup (context .Background (), "" , "volume-id" , "" , nil )
126+ Expect (err ).To (HaveOccurred ())
127+ Expect (backup ).To (BeNil ())
128+ })
129+ })
130+
131+ Context ("CreateBackup validation cases" , func () {
132+ const projectID = "project-id"
133+
134+ BeforeEach (func () {
135+ config = & Config {
136+ Global : GlobalOpts {
137+ ProjectID : projectID ,
138+ },
139+ }
140+ openStack , err = CreateSTACKITProvider (mockAPI , config )
141+ Expect (err ).ToNot (HaveOccurred ())
142+ })
143+
144+ It ("should return error when source type is invalid" , func () {
145+ // Test with an invalid source type
146+ // Mock the API call to return nil, which will trigger our validation
147+ mockAPI .EXPECT ().CreateBackup (gomock .Any (), projectID , region ).Return (nil ).Times (1 )
148+
149+ backup , err := openStack .CreateBackup (context .Background (), "expected-name" , "volume-id" , "" , nil )
150+ Expect (err ).To (HaveOccurred ())
151+ Expect (err .Error ()).To (ContainSubstring ("failed to create backup request" ))
152+ Expect (backup ).To (BeNil ())
153+ })
154+
155+ It ("should handle special characters in tags" , func () {
156+ tags := map [string ]string {
157+ "special" : "tag with spaces and !@#$%^&*()" ,
158+ "normal" : "value" ,
159+ }
160+
161+ expectedPayload := iaas.CreateBackupPayload {
162+ Name : ptr .To ("expected-name" ),
163+ Source : & iaas.BackupSource {
164+ Type : ptr .To ("volume" ),
165+ Id : ptr .To ("volume-id" ),
166+ },
167+ Labels : ptr .To (map [string ]any {
168+ "special" : "tag with spaces and !@#$%^&*()" ,
169+ "normal" : "value" ,
170+ }),
171+ }
172+
173+ mockCreateBackup (mockCtrl , mockAPI , expectedPayload )
174+
175+ backup , err := openStack .CreateBackup (context .Background (), "expected-name" , "volume-id" , "" , tags )
176+ Expect (err ).ToNot (HaveOccurred ())
177+ Expect (backup ).ToNot (BeNil ())
178+ Expect (backup .Id ).ToNot (BeNil ())
179+ Expect (* backup .Id ).To (Equal ("expected backup" ))
180+ })
181+ })
182+
183+ Context ("CreateBackup edge cases" , func () {
184+ const projectID = "project-id"
185+
186+ BeforeEach (func () {
187+ config = & Config {
188+ Global : GlobalOpts {
189+ ProjectID : projectID ,
190+ },
191+ }
192+ openStack , err = CreateSTACKITProvider (mockAPI , config )
193+ Expect (err ).ToNot (HaveOccurred ())
194+ })
195+
196+ It ("should handle nil tags" , func () {
197+ expectedPayload := iaas.CreateBackupPayload {
198+ Name : ptr .To ("expected-name" ),
199+ Source : & iaas.BackupSource {
200+ Type : ptr .To ("volume" ),
201+ Id : ptr .To ("volume-id" ),
202+ },
203+ Labels : nil ,
204+ }
205+
206+ mockCreateBackup (mockCtrl , mockAPI , expectedPayload )
207+
208+ backup , err := openStack .CreateBackup (context .Background (), "expected-name" , "volume-id" , "" , nil )
209+ Expect (err ).ToNot (HaveOccurred ())
210+ Expect (backup ).ToNot (BeNil ())
211+ Expect (backup .Id ).ToNot (BeNil ())
212+ Expect (* backup .Id ).To (Equal ("expected backup" ))
213+ })
214+
215+ It ("should handle empty tags map" , func () {
216+ expectedPayload := iaas.CreateBackupPayload {
217+ Name : ptr .To ("expected-name" ),
218+ Source : & iaas.BackupSource {
219+ Type : ptr .To ("volume" ),
220+ Id : ptr .To ("volume-id" ),
221+ },
222+ Labels : ptr .To (map [string ]any {}),
223+ }
224+
225+ mockCreateBackup (mockCtrl , mockAPI , expectedPayload )
226+
227+ backup , err := openStack .CreateBackup (context .Background (), "expected-name" , "volume-id" , "" , map [string ]string {})
228+ Expect (err ).ToNot (HaveOccurred ())
229+ Expect (backup ).ToNot (BeNil ())
230+ Expect (backup .Id ).ToNot (BeNil ())
231+ Expect (* backup .Id ).To (Equal ("expected backup" ))
232+ })
233+
234+ It ("should handle long backup name" , func () {
235+ longName := "very-long-backup-name-" + string (make ([]byte , 200 ))
236+
237+ expectedPayload := iaas.CreateBackupPayload {
238+ Name : ptr .To (longName ),
239+ Source : & iaas.BackupSource {
240+ Type : ptr .To ("volume" ),
241+ Id : ptr .To ("volume-id" ),
242+ },
243+ }
244+
245+ mockCreateBackup (mockCtrl , mockAPI , expectedPayload )
246+
247+ backup , err := openStack .CreateBackup (context .Background (), longName , "volume-id" , "" , nil )
248+ Expect (err ).ToNot (HaveOccurred ())
249+ Expect (backup ).ToNot (BeNil ())
250+ Expect (backup .Id ).ToNot (BeNil ())
251+ Expect (* backup .Id ).To (Equal ("expected backup" ))
252+ })
98253 })
99254})
100255
101- func mockCreateBackup (mockCtrl * gomock.Controller , mockAPI * mock.MockDefaultApi , projectID , region string , expectedPayload iaas.CreateBackupPayload ) {
256+ func mockCreateBackup (mockCtrl * gomock.Controller , mockAPI * mock.MockDefaultApi , expectedPayload iaas.CreateBackupPayload ) {
257+ const (
258+ projectID = "project-id"
259+ region = "eu01"
260+ )
102261 createRequest := mock .NewMockApiCreateBackupRequest (mockCtrl )
103262 createRequest .EXPECT ().CreateBackupPayload (expectedPayload ).Return (createRequest )
104263 createRequest .EXPECT ().Execute ().Return (& iaas.Backup {Id : ptr .To ("expected backup" )}, nil )
0 commit comments