Skip to content

Commit f145139

Browse files
committed
add soci convert feature tests
Signed-off-by: Arjun Raja Yogidas <[email protected]>
1 parent e676c3f commit f145139

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

cmd/nerdctl/image/image_convert_linux_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ func TestImageConvert(t *testing.T) {
9393
Require: require.All(
9494
require.Not(nerdtest.Docker),
9595
nerdtest.Soci,
96+
nerdtest.SociVersion("0.10.0"),
9697
),
9798
Cleanup: func(data test.Data, helpers test.Helpers) {
9899
helpers.Anyhow("rmi", "-f", data.Identifier("converted-image"))

pkg/testutil/nerdtest/requirements.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
422469
func ContainerdVersion(v string) *test.Requirement {
423470
return &test.Requirement{
424471
Check: func(data test.Data, helpers test.Helpers) (bool, string) {

0 commit comments

Comments
 (0)