@@ -5,6 +5,7 @@ package limayaml
5
5
6
6
import (
7
7
"errors"
8
+ "runtime"
8
9
"testing"
9
10
10
11
"gotest.tools/v3/assert"
@@ -388,3 +389,168 @@ func TestValidateAgainstLatestConfig(t *testing.T) {
388
389
})
389
390
}
390
391
}
392
+
393
+ func TestValidateRosetta (t * testing.T ) {
394
+ if runtime .GOOS != "darwin" {
395
+ t .Skip ("Skipping Rosetta validation test on non-macOS platform" )
396
+ }
397
+
398
+ images := `images: [{"location": "/"}]`
399
+
400
+ nilData := ``
401
+ y , err := Load ([]byte (nilData + "\n " + images ), "lima.yaml" )
402
+ assert .NilError (t , err )
403
+
404
+ err = Validate (y , false )
405
+ assert .NilError (t , err )
406
+
407
+ invalidRosetta := `rosetta:
408
+ enabled: true
409
+ vmType: "qemu"
410
+ ` + images
411
+ y , err = Load ([]byte (invalidRosetta ), "lima.yaml" )
412
+ assert .NilError (t , err )
413
+
414
+ err = Validate (y , false )
415
+ if IsNativeArch (AARCH64 ) {
416
+ assert .Error (t , err , "field `rosetta.enabled` can only be enabled for VMType \" vz\" ; got \" qemu\" " )
417
+ } else {
418
+ assert .NilError (t , err )
419
+ }
420
+
421
+ validRosetta := `rosetta:
422
+ enabled: true
423
+ vmType: "vz"
424
+ ` + images
425
+ y , err = Load ([]byte (validRosetta ), "lima.yaml" )
426
+ assert .NilError (t , err )
427
+
428
+ err = Validate (y , false )
429
+ assert .NilError (t , err )
430
+
431
+ rosettaDisabled := `rosetta:
432
+ enabled: false
433
+ vmType: "qemu"
434
+ ` + images
435
+ y , err = Load ([]byte (rosettaDisabled ), "lima.yaml" )
436
+ assert .NilError (t , err )
437
+
438
+ err = Validate (y , false )
439
+ assert .NilError (t , err )
440
+ }
441
+
442
+ func TestValidateNestedVirtualization (t * testing.T ) {
443
+ if runtime .GOOS != "darwin" {
444
+ t .Skip ("Skipping nested virtualization validation test on non-macOS platform" )
445
+ }
446
+
447
+ images := `images: [{"location": "/"}]`
448
+
449
+ validYAML := `
450
+ nestedVirtualization: true
451
+ vmType: vz
452
+ ` + images
453
+
454
+ y , err := Load ([]byte (validYAML ), "lima.yaml" )
455
+ assert .NilError (t , err )
456
+
457
+ err = Validate (y , false )
458
+ assert .NilError (t , err )
459
+
460
+ invalidYAML := `
461
+ nestedVirtualization: true
462
+ vmType: qemu
463
+ ` + images
464
+
465
+ y , err = Load ([]byte (invalidYAML ), "lima.yaml" )
466
+ assert .NilError (t , err )
467
+
468
+ err = Validate (y , false )
469
+ assert .Error (t , err , "field `nestedVirtualization` can only be enabled for VMType \" vz\" ; got \" qemu\" " )
470
+ }
471
+
472
+ func TestValidateMountTypeOS (t * testing.T ) {
473
+ images := `images: [{"location": "/"}]`
474
+
475
+ nilMountConf := ``
476
+ y , err := Load ([]byte (nilMountConf + "\n " + images ), "lima.yaml" )
477
+ assert .NilError (t , err )
478
+
479
+ err = Validate (y , false )
480
+ assert .NilError (t , err )
481
+
482
+ inValidMountTypeLinux := `
483
+ mountType: "random"
484
+ `
485
+ y , err = Load ([]byte (inValidMountTypeLinux + "\n " + images ), "lima.yaml" )
486
+ assert .NilError (t , err )
487
+
488
+ err = Validate (y , true )
489
+ assert .Error (t , err , "field `mountType` must be: \" reverse-sshfs\" , \" 9p\" , \" virtiofs\" , \" wsl2\" ; got \" random\" " )
490
+
491
+ // Skip macOS-specific tests on non-macOS platforms
492
+ if runtime .GOOS != "darwin" {
493
+ return
494
+ }
495
+
496
+ validMountTypeLinux := `
497
+ mountType: "virtiofs"
498
+ `
499
+ y , err = Load ([]byte (validMountTypeLinux + "\n " + images ), "lima.yaml" )
500
+ assert .NilError (t , err )
501
+
502
+ err = Validate (y , true )
503
+ if IsNativeArch (AARCH64 ) {
504
+ assert .Error (t , err , "field `mountType` \" virtiofs\" on macOS requires vmType \" vz\" ; got \" qemu\" " )
505
+ } else {
506
+ assert .NilError (t , err )
507
+ }
508
+
509
+ validMountTypeMac := `
510
+ mountType: "virtiofs"
511
+ vmType: "vz"
512
+ `
513
+ y , err = Load ([]byte (validMountTypeMac + "\n " + images ), "lima.yaml" )
514
+ assert .NilError (t , err )
515
+
516
+ err = Validate (y , false )
517
+ assert .NilError (t , err )
518
+
519
+ invalidMountTypeMac := `
520
+ mountType: "virtiofs"
521
+ vmType: "qemu"
522
+ `
523
+ y , err = Load ([]byte (invalidMountTypeMac + "\n " + images ), "lima.yaml" )
524
+ assert .NilError (t , err )
525
+
526
+ err = Validate (y , false )
527
+ assert .Error (t , err , "field `mountType` \" virtiofs\" on macOS requires vmType \" vz\" ; got \" qemu\" " )
528
+ }
529
+
530
+ func TestValidateWindowsMountType (t * testing.T ) {
531
+ if runtime .GOOS != "windows" {
532
+ t .Skip ("Skipping Windows-specific mount type validation test on non-Windows platform" )
533
+ }
534
+
535
+ images := `images: [{"location": "/"}]`
536
+
537
+ invalidMountTypes := []string {"9p" , "virtiofs" }
538
+ for _ , mountType := range invalidMountTypes {
539
+ invalidMountTypeWindows := `mountType: "` + mountType + `"`
540
+ y , err := Load ([]byte (invalidMountTypeWindows + "\n " + images ), "lima.yaml" )
541
+ assert .NilError (t , err )
542
+
543
+ err = Validate (y , false )
544
+ assert .Error (t , err , `field ` + "`mountType`" + ` on Windows must be "wsl2" or "reverse-sshfs"; got "` + mountType + `"` )
545
+ }
546
+
547
+ validMountTypes := []string {"wsl2" , "reverse-sshfs" }
548
+ for _ , mountType := range validMountTypes {
549
+ validMountTypeWindows := `mountType: "` + mountType + `"`
550
+ y , err := Load ([]byte (validMountTypeWindows + "\n " + images ), "lima.yaml" )
551
+ assert .NilError (t , err )
552
+
553
+ err = Validate (y , false )
554
+ assert .NilError (t , err )
555
+ }
556
+ }
0 commit comments