@@ -5,6 +5,7 @@ package limayaml
55
66import  (
77	"errors" 
8+ 	"runtime" 
89	"testing" 
910
1011	"gotest.tools/v3/assert" 
@@ -388,3 +389,168 @@ 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 {"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