@@ -419,6 +419,53 @@ var RemapIDs = &test.Requirement{
419419	},
420420}
421421
422+ // SociVersion returns a requirement that checks if the installed SOCI version 
423+ // meets the minimum required version 
424+ func  SociVersion (minVersion  string ) * test.Requirement  {
425+ 	return  & test.Requirement {
426+ 		Check : func (data  test.Data , helpers  test.Helpers ) (bool , string ) {
427+ 			sociExecutable , err  :=  exec .LookPath ("soci" )
428+ 			if  err  !=  nil  {
429+ 				return  false , fmt .Sprintf ("soci executable not found in path $PATH: %v" , err )
430+ 			}
431+ 
432+ 			cmd  :=  exec .Command (sociExecutable , "--version" )
433+ 			output , err  :=  cmd .Output ()
434+ 			if  err  !=  nil  {
435+ 				return  false , fmt .Sprintf ("failed to get soci version: %v" , err )
436+ 			}
437+ 
438+ 			// Parse version from output 
439+ 			// Example output format: "soci version v0.9.0 737f61a3db40c386f997c1f126344158aa3ad43c" 
440+ 			versionStr  :=  strings .TrimSpace (string (output ))
441+ 			parts  :=  strings .Fields (versionStr )
442+ 			if  len (parts ) <  3  {
443+ 				return  false , fmt .Sprintf ("unexpected soci version output format: %s" , versionStr )
444+ 			}
445+ 
446+ 			// Extract version number without 'v' prefix 
447+ 			installedVersion  :=  strings .TrimPrefix (parts [2 ], "v" )
448+ 
449+ 			// Compare versions 
450+ 			v1 , err  :=  semver .NewVersion (installedVersion )
451+ 			if  err  !=  nil  {
452+ 				return  false , fmt .Sprintf ("failed to parse installed version %s: %v" , installedVersion , err )
453+ 			}
454+ 
455+ 			v2 , err  :=  semver .NewVersion (minVersion )
456+ 			if  err  !=  nil  {
457+ 				return  false , fmt .Sprintf ("failed to parse minimum required version %s: %v" , minVersion , err )
458+ 			}
459+ 
460+ 			if  v1 .LessThan (v2 ) {
461+ 				return  false , fmt .Sprintf ("installed soci version %s is older than required version %s" , installedVersion , minVersion )
462+ 			}
463+ 
464+ 			return  true , fmt .Sprintf ("soci version %s meets minimum requirement %s" , installedVersion , minVersion )
465+ 		},
466+ 	}
467+ }
468+ 
422469func  ContainerdVersion (v  string ) * test.Requirement  {
423470	return  & test.Requirement {
424471		Check : func (data  test.Data , helpers  test.Helpers ) (bool , string ) {
0 commit comments