Files
podman/pkg/api/handlers/utils/docker_device_test.go
2026-04-13 20:56:37 +02:00

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))
}
})
}
}