mirror of
				https://github.com/containers/podman.git
				synced 2025-10-31 10:00:01 +08:00 
			
		
		
		
	 b0d36f6351
			
		
	
	b0d36f6351
	
	
	
		
			
			Based on WSL2 9p support: remaps windows paths to /mnt/<drive> locations for both podman and Docker API clients. Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
		
			
				
	
	
		
			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)
 | |
| 		}
 | |
| 	}
 | |
| }
 |