mirror of https://github.com/containers/podman.git
78 lines
2.2 KiB
Go
78 lines
2.2 KiB
Go
//go:build linux
|
|
// +build linux
|
|
|
|
package specgenutil
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/containers/common/pkg/machine"
|
|
"github.com/containers/podman/v4/pkg/domain/entities"
|
|
"github.com/containers/podman/v4/pkg/specgen"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestWinPath(t *testing.T) {
|
|
const (
|
|
fail = false
|
|
pass = true
|
|
)
|
|
tests := []struct {
|
|
vol string
|
|
source string
|
|
dest string
|
|
isN bool
|
|
outcome bool
|
|
mach string
|
|
}{
|
|
{`C:\Foo:/blah`, "/mnt/c/Foo", "/blah", false, pass, "wsl"},
|
|
{`C:\Foo:/blah`, "/mnt/c/Foo", "/blah", false, fail, ""},
|
|
{`\\?\C:\Foo:/blah`, "/mnt/c/Foo", "/blah", false, pass, "wsl"},
|
|
{`/c/bar:/blah`, "/mnt/c/bar", "/blah", false, pass, "wsl"},
|
|
{`/c/bar:/blah`, "/c/bar", "/blah", false, pass, ""},
|
|
{`/test/this:/blah`, "/test/this", "/blah", false, pass, "wsl"},
|
|
{`c:/bar/something:/other`, "/mnt/c/bar/something", "/other", false, pass, "wsl"},
|
|
{`c:/foo:ro`, "c", "/foo", true, pass, ""},
|
|
{`\\computer\loc:/dest`, "", "", false, fail, "wsl"},
|
|
{`\\.\drive\loc:/target`, "/mnt/wsl/drive/loc", "/target", false, pass, "wsl"},
|
|
}
|
|
|
|
f := func(vol string, mach string) (*specgen.SpecGenerator, error) {
|
|
machine := machine.GetMachineMarker()
|
|
oldEnable, oldType := machine.Enabled, machine.Type
|
|
machine.Enabled, machine.Type = len(mach) > 0, mach
|
|
sg := specgen.NewSpecGenerator("nothing", false)
|
|
err := FillOutSpecGen(sg, &entities.ContainerCreateOptions{
|
|
ImageVolume: "ignore",
|
|
Volume: []string{vol}}, []string{},
|
|
)
|
|
machine.Enabled, machine.Type = oldEnable, oldType
|
|
return sg, err
|
|
}
|
|
|
|
for _, test := range tests {
|
|
msg := "Checking: " + test.vol
|
|
sg, err := f(test.vol, test.mach)
|
|
if test.outcome == fail {
|
|
assert.NotNil(t, err, msg)
|
|
continue
|
|
}
|
|
if !assert.Nil(t, err, msg) {
|
|
continue
|
|
}
|
|
if test.isN {
|
|
if !assert.Equal(t, 1, len(sg.Volumes), msg) {
|
|
continue
|
|
}
|
|
assert.Equal(t, test.source, sg.Volumes[0].Name, msg)
|
|
assert.Equal(t, test.dest, sg.Volumes[0].Dest, msg)
|
|
} else {
|
|
if !assert.Equal(t, 1, len(sg.Mounts), msg) {
|
|
continue
|
|
}
|
|
assert.Equal(t, test.source, sg.Mounts[0].Source, msg)
|
|
assert.Equal(t, test.dest, sg.Mounts[0].Destination, msg)
|
|
}
|
|
}
|
|
}
|