@@ -3,8 +3,10 @@ package utils
33import (
44 "reflect"
55 "testing"
6+ "time"
67
78 sdkConfig "github.com/stackitcloud/stackit-sdk-go/core/config"
9+ "github.com/stackitcloud/stackit-sdk-go/services/iaas"
810
911 "github.com/spf13/viper"
1012 "github.com/stackitcloud/stackit-cli/internal/pkg/config"
@@ -248,3 +250,255 @@ func TestConvertStringMapToInterfaceMap(t *testing.T) {
248250 })
249251 }
250252}
253+
254+ func TestConvertToBase64PatchedServer (t * testing.T ) {
255+ now := time .Now ()
256+ userData := []byte ("test" )
257+ emptyUserData := []byte ("" )
258+
259+ tests := []struct {
260+ name string
261+ input * iaas.Server
262+ expected * Base64PatchedServer
263+ }{
264+ {
265+ name : "nil input" ,
266+ input : nil ,
267+ expected : nil ,
268+ },
269+ {
270+ name : "server with user data" ,
271+ input : & iaas.Server {
272+ Id : Ptr ("server-123" ),
273+ Name : Ptr ("test-server" ),
274+ Status : Ptr ("ACTIVE" ),
275+ AvailabilityZone : Ptr ("eu01-1" ),
276+ MachineType : Ptr ("t1.1" ),
277+ UserData : & userData ,
278+ CreatedAt : & now ,
279+ PowerStatus : Ptr ("RUNNING" ),
280+ AffinityGroup : Ptr ("group-1" ),
281+ ImageId : Ptr ("image-123" ),
282+ KeypairName : Ptr ("keypair-1" ),
283+ },
284+ expected : & Base64PatchedServer {
285+ Id : Ptr ("server-123" ),
286+ Name : Ptr ("test-server" ),
287+ Status : Ptr ("ACTIVE" ),
288+ AvailabilityZone : Ptr ("eu01-1" ),
289+ MachineType : Ptr ("t1.1" ),
290+ UserData : Ptr (Base64Bytes (userData )),
291+ CreatedAt : & now ,
292+ PowerStatus : Ptr ("RUNNING" ),
293+ AffinityGroup : Ptr ("group-1" ),
294+ ImageId : Ptr ("image-123" ),
295+ KeypairName : Ptr ("keypair-1" ),
296+ },
297+ },
298+ {
299+ name : "server with empty user data" ,
300+ input : & iaas.Server {
301+ Id : Ptr ("server-456" ),
302+ Name : Ptr ("test-server-2" ),
303+ Status : Ptr ("STOPPED" ),
304+ AvailabilityZone : Ptr ("eu01-2" ),
305+ MachineType : Ptr ("t1.2" ),
306+ UserData : & emptyUserData ,
307+ },
308+ expected : & Base64PatchedServer {
309+ Id : Ptr ("server-456" ),
310+ Name : Ptr ("test-server-2" ),
311+ Status : Ptr ("STOPPED" ),
312+ AvailabilityZone : Ptr ("eu01-2" ),
313+ MachineType : Ptr ("t1.2" ),
314+ UserData : Ptr (Base64Bytes (emptyUserData )),
315+ },
316+ },
317+ {
318+ name : "server without user data" ,
319+ input : & iaas.Server {
320+ Id : Ptr ("server-789" ),
321+ Name : Ptr ("test-server-3" ),
322+ Status : Ptr ("CREATING" ),
323+ AvailabilityZone : Ptr ("eu01-3" ),
324+ MachineType : Ptr ("t1.3" ),
325+ UserData : nil ,
326+ },
327+ expected : & Base64PatchedServer {
328+ Id : Ptr ("server-789" ),
329+ Name : Ptr ("test-server-3" ),
330+ Status : Ptr ("CREATING" ),
331+ AvailabilityZone : Ptr ("eu01-3" ),
332+ MachineType : Ptr ("t1.3" ),
333+ UserData : nil ,
334+ },
335+ },
336+ }
337+
338+ for _ , tt := range tests {
339+ t .Run (tt .name , func (t * testing.T ) {
340+ result := ConvertToBase64PatchedServer (tt .input )
341+
342+ if result == nil && tt .expected == nil {
343+ return
344+ }
345+
346+ if (result == nil && tt .expected != nil ) || (result != nil && tt .expected == nil ) {
347+ t .Errorf ("ConvertToBase64PatchedServer() = %v, want %v" , result , tt .expected )
348+ return
349+ }
350+
351+ if ! reflect .DeepEqual (result , tt .expected ) {
352+ t .Errorf ("ConvertToBase64PatchedServer() = %v, want %v" , result , tt .expected )
353+ }
354+ })
355+ }
356+ }
357+
358+ func TestConvertToBase64PatchedServers (t * testing.T ) {
359+ now := time .Now ()
360+ userData1 := []byte ("test1" )
361+ userData2 := []byte ("test2" )
362+ emptyUserData := []byte ("" )
363+
364+ tests := []struct {
365+ name string
366+ input []iaas.Server
367+ expected []Base64PatchedServer
368+ }{
369+ {
370+ name : "nil input" ,
371+ input : nil ,
372+ expected : nil ,
373+ },
374+ {
375+ name : "empty slice" ,
376+ input : []iaas.Server {},
377+ expected : []Base64PatchedServer {},
378+ },
379+ {
380+ name : "single server with user data" ,
381+ input : []iaas.Server {
382+ {
383+ Id : Ptr ("server-1" ),
384+ Name : Ptr ("test-server-1" ),
385+ Status : Ptr ("ACTIVE" ),
386+ MachineType : Ptr ("t1.1" ),
387+ AvailabilityZone : Ptr ("eu01-1" ),
388+ UserData : & userData1 ,
389+ CreatedAt : & now ,
390+ },
391+ },
392+ expected : []Base64PatchedServer {
393+ {
394+ Id : Ptr ("server-1" ),
395+ Name : Ptr ("test-server-1" ),
396+ Status : Ptr ("ACTIVE" ),
397+ MachineType : Ptr ("t1.1" ),
398+ AvailabilityZone : Ptr ("eu01-1" ),
399+ UserData : Ptr (Base64Bytes (userData1 )),
400+ CreatedAt : & now ,
401+ },
402+ },
403+ },
404+ {
405+ name : "multiple servers mixed" ,
406+ input : []iaas.Server {
407+ {
408+ Id : Ptr ("server-1" ),
409+ Name : Ptr ("test-server-1" ),
410+ Status : Ptr ("ACTIVE" ),
411+ MachineType : Ptr ("t1.1" ),
412+ AvailabilityZone : Ptr ("eu01-1" ),
413+ UserData : & userData1 ,
414+ CreatedAt : & now ,
415+ },
416+ {
417+ Id : Ptr ("server-2" ),
418+ Name : Ptr ("test-server-2" ),
419+ Status : Ptr ("STOPPED" ),
420+ MachineType : Ptr ("t1.2" ),
421+ AvailabilityZone : Ptr ("eu01-2" ),
422+ UserData : & userData2 ,
423+ },
424+ {
425+ Id : Ptr ("server-3" ),
426+ Name : Ptr ("test-server-3" ),
427+ Status : Ptr ("CREATING" ),
428+ MachineType : Ptr ("t1.3" ),
429+ AvailabilityZone : Ptr ("eu01-3" ),
430+ UserData : & emptyUserData ,
431+ },
432+ {
433+ Id : Ptr ("server-4" ),
434+ Name : Ptr ("test-server-4" ),
435+ Status : Ptr ("ERROR" ),
436+ MachineType : Ptr ("t1.4" ),
437+ AvailabilityZone : Ptr ("eu01-4" ),
438+ UserData : nil ,
439+ },
440+ },
441+ expected : []Base64PatchedServer {
442+ {
443+ Id : Ptr ("server-1" ),
444+ Name : Ptr ("test-server-1" ),
445+ Status : Ptr ("ACTIVE" ),
446+ MachineType : Ptr ("t1.1" ),
447+ AvailabilityZone : Ptr ("eu01-1" ),
448+ UserData : Ptr (Base64Bytes (userData1 )),
449+ CreatedAt : & now ,
450+ },
451+ {
452+ Id : Ptr ("server-2" ),
453+ Name : Ptr ("test-server-2" ),
454+ Status : Ptr ("STOPPED" ),
455+ MachineType : Ptr ("t1.2" ),
456+ AvailabilityZone : Ptr ("eu01-2" ),
457+ UserData : Ptr (Base64Bytes (userData2 )),
458+ },
459+ {
460+ Id : Ptr ("server-3" ),
461+ Name : Ptr ("test-server-3" ),
462+ Status : Ptr ("CREATING" ),
463+ MachineType : Ptr ("t1.3" ),
464+ AvailabilityZone : Ptr ("eu01-3" ),
465+ UserData : Ptr (Base64Bytes (emptyUserData )),
466+ },
467+ {
468+ Id : Ptr ("server-4" ),
469+ Name : Ptr ("test-server-4" ),
470+ Status : Ptr ("ERROR" ),
471+ MachineType : Ptr ("t1.4" ),
472+ AvailabilityZone : Ptr ("eu01-4" ),
473+ UserData : nil ,
474+ },
475+ },
476+ },
477+ }
478+
479+ for _ , tt := range tests {
480+ t .Run (tt .name , func (t * testing.T ) {
481+ result := ConvertToBase64PatchedServers (tt .input )
482+
483+ if result == nil && tt .expected == nil {
484+ return
485+ }
486+
487+ if (result == nil && tt .expected != nil ) || (result != nil && tt .expected == nil ) {
488+ t .Errorf ("ConvertToBase64PatchedServers() = %v, want %v" , result , tt .expected )
489+ return
490+ }
491+
492+ if len (result ) != len (tt .expected ) {
493+ t .Errorf ("ConvertToBase64PatchedServers() length = %d, want %d" , len (result ), len (tt .expected ))
494+ return
495+ }
496+
497+ for i , server := range result {
498+ if ! reflect .DeepEqual (server , tt .expected [i ]) {
499+ t .Errorf ("ConvertToBase64PatchedServers() [%d] = %v, want %v" , i , server , tt .expected [i ])
500+ }
501+ }
502+ })
503+ }
504+ }
0 commit comments