@@ -5,6 +5,7 @@ package limayaml
55
66import (
77 "errors"
8+ "runtime"
89 "testing"
910
1011 "gotest.tools/v3/assert"
@@ -388,3 +389,165 @@ func TestValidateAgainstLatestConfig(t *testing.T) {
388389 })
389390 }
390391}
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 {"reverse-sshfs" , "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"; got "` + mountType + `"` )
545+ }
546+
547+ validMountTypeWindows := `mountType: "wsl2"`
548+ y , err := Load ([]byte (validMountTypeWindows + "\n " + images ), "lima.yaml" )
549+ assert .NilError (t , err )
550+
551+ err = Validate (y , false )
552+ assert .NilError (t , err )
553+ }
0 commit comments