diff --git a/pkg/util/utils.go b/pkg/util/utils.go index e7952a0bc3..4e40802029 100644 --- a/pkg/util/utils.go +++ b/pkg/util/utils.go @@ -502,6 +502,19 @@ func IDtoolsToRuntimeSpec(idMaps []idtools.IDMap) (convertedIDMap []specs.LinuxI return convertedIDMap } +// RuntimeSpecToIDtoolsTo converts runtime spec to the one of the idtools ID mapping +func RuntimeSpecToIDtools(idMaps []specs.LinuxIDMapping) (convertedIDMap []idtools.IDMap) { + for _, idmap := range idMaps { + tempIDMap := idtools.IDMap{ + ContainerID: int(idmap.ContainerID), + HostID: int(idmap.HostID), + Size: int(idmap.Size), + } + convertedIDMap = append(convertedIDMap, tempIDMap) + } + return convertedIDMap +} + func LookupUser(name string) (*user.User, error) { // Assume UID lookup first, if it fails look up by username if u, err := user.LookupId(name); err == nil { diff --git a/pkg/util/utils_test.go b/pkg/util/utils_test.go index 70ecf05a24..df1722a003 100644 --- a/pkg/util/utils_test.go +++ b/pkg/util/utils_test.go @@ -5,6 +5,7 @@ import ( "testing" "time" + "github.com/opencontainers/runtime-spec/specs-go" "github.com/stretchr/testify/assert" ) @@ -88,3 +89,30 @@ func TestParseInputTime(t *testing.T) { assert.Equal(t, expected, tm) } + +func TestConvertMappings(t *testing.T) { + start := []specs.LinuxIDMapping{ + { + ContainerID: 1, + HostID: 2, + Size: 3, + }, + { + ContainerID: 4, + HostID: 5, + Size: 6, + }, + } + + converted := RuntimeSpecToIDtools(start) + + convertedBack := IDtoolsToRuntimeSpec(converted) + + assert.Equal(t, len(start), len(convertedBack)) + + for i := range start { + assert.Equal(t, start[i].ContainerID, convertedBack[i].ContainerID) + assert.Equal(t, start[i].HostID, convertedBack[i].HostID) + assert.Equal(t, start[i].Size, convertedBack[i].Size) + } +}