mirror of
https://github.com/containers/podman.git
synced 2026-06-01 20:37:26 -04:00
120 lines
2.8 KiB
Go
120 lines
2.8 KiB
Go
//go:build !remote
|
|
|
|
package utils
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/moby/moby/api/types/container"
|
|
"github.com/stretchr/testify/assert"
|
|
"tags.cncf.io/container-device-interface/pkg/parser"
|
|
)
|
|
|
|
func TestDockerDeviceMappingString(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
dev container.DeviceMapping
|
|
want string
|
|
}{
|
|
{
|
|
name: "compose style CDI single token",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "nvidia.com/gpu=all",
|
|
PathInContainer: "",
|
|
CgroupPermissions: "",
|
|
},
|
|
want: "nvidia.com/gpu=all",
|
|
},
|
|
{
|
|
name: "CDI host only with cgroup perms still single token",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "nvidia.com/gpu=all",
|
|
PathInContainer: "",
|
|
CgroupPermissions: "rwm",
|
|
},
|
|
want: "nvidia.com/gpu=all",
|
|
},
|
|
{
|
|
name: "duplicate CDI host and container path",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "nvidia.com/gpu=all",
|
|
PathInContainer: "nvidia.com/gpu=all",
|
|
CgroupPermissions: "rwm",
|
|
},
|
|
want: "nvidia.com/gpu=all",
|
|
},
|
|
{
|
|
name: "duplicate CDI host and container empty cgroup",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "nvidia.com/gpu=all",
|
|
PathInContainer: "nvidia.com/gpu=all",
|
|
CgroupPermissions: "",
|
|
},
|
|
want: "nvidia.com/gpu=all",
|
|
},
|
|
{
|
|
name: "classic bind triple",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "/dev/null",
|
|
PathInContainer: "/dev/zero",
|
|
CgroupPermissions: "rwm",
|
|
},
|
|
want: "/dev/null:/dev/zero:rwm",
|
|
},
|
|
{
|
|
name: "bind different paths empty cgroup defaults rwm",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "/dev/null",
|
|
PathInContainer: "/dev/zero",
|
|
CgroupPermissions: "",
|
|
},
|
|
want: "/dev/null:/dev/zero:rwm",
|
|
},
|
|
{
|
|
name: "same bind path non-CDI empty cgroup",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "/dev/null",
|
|
PathInContainer: "/dev/null",
|
|
CgroupPermissions: "",
|
|
},
|
|
want: "/dev/null",
|
|
},
|
|
{
|
|
name: "same bind path non-CDI explicit cgroup",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "/dev/null",
|
|
PathInContainer: "/dev/null",
|
|
CgroupPermissions: "r",
|
|
},
|
|
want: "/dev/null:/dev/null:r",
|
|
},
|
|
{
|
|
name: "host path only empty container cgroup",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "/dev/foo",
|
|
PathInContainer: "",
|
|
CgroupPermissions: "",
|
|
},
|
|
want: "/dev/foo",
|
|
},
|
|
{
|
|
name: "host path only with cgroup uses host::perm form",
|
|
dev: container.DeviceMapping{
|
|
PathOnHost: "/dev/foo",
|
|
PathInContainer: "",
|
|
CgroupPermissions: "rwm",
|
|
},
|
|
want: "/dev/foo::rwm",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := DockerDeviceMappingString(tt.dev)
|
|
assert.Equal(t, tt.want, got)
|
|
if parser.IsQualifiedName(tt.want) {
|
|
assert.True(t, parser.IsQualifiedName(got))
|
|
}
|
|
})
|
|
}
|
|
}
|