From 3472bbc28a9149bac254fbc736cfedfe05d7a049 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Sternberg" Date: Tue, 17 Sep 2024 10:51:30 -0500 Subject: [PATCH] command: change drive to lowercase for wsl path On Windows, the drive casing doesn't matter outside of WSL. For WSL, the drives are lowercase. When we're producing a WSL path, lowercase the drive letter. Co-authored-by: Jonathan A. Sternberg Co-authored-by: Laura Brehm Signed-off-by: Jonathan A. Sternberg Signed-off-by: Laura Brehm --- cli/command/telemetry_docker.go | 2 +- cli/command/telemetry_docker_test.go | 56 +++++++++++++++++++++------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/cli/command/telemetry_docker.go b/cli/command/telemetry_docker.go index 8c50dc3ef6..c3612a7e0c 100644 --- a/cli/command/telemetry_docker.go +++ b/cli/command/telemetry_docker.go @@ -180,7 +180,7 @@ func toWslPath(s string) string { if !ok { return "" } - return fmt.Sprintf("mnt/%s%s", drive, p) + return fmt.Sprintf("mnt/%s%s", strings.ToLower(drive), p) } func parseUNCPath(s string) (drive, p string, ok bool) { diff --git a/cli/command/telemetry_docker_test.go b/cli/command/telemetry_docker_test.go index c6501e4ed9..bb0ba7c223 100644 --- a/cli/command/telemetry_docker_test.go +++ b/cli/command/telemetry_docker_test.go @@ -1,6 +1,7 @@ package command import ( + "io/fs" "net/url" "testing" "testing/fstest" @@ -9,21 +10,48 @@ import ( ) func TestWslSocketPath(t *testing.T) { - u, err := url.Parse("unix:////./c:/my/file/path") - assert.NilError(t, err) - - // Ensure host is empty. - assert.Equal(t, u.Host, "") - - // Use a filesystem where the WSL path exists. - fs := fstest.MapFS{ - "mnt/c/my/file/path": {}, + testCases := []struct { + doc string + fs fs.FS + url string + expected string + }{ + { + doc: "filesystem where WSL path does not exist", + fs: fstest.MapFS{ + "my/file/path": {}, + }, + url: "unix:////./c:/my/file/path", + expected: "", + }, + { + doc: "filesystem where WSL path exists", + fs: fstest.MapFS{ + "mnt/c/my/file/path": {}, + }, + url: "unix:////./c:/my/file/path", + expected: "/mnt/c/my/file/path", + }, + { + doc: "filesystem where WSL path exists uppercase URL", + fs: fstest.MapFS{ + "mnt/c/my/file/path": {}, + }, + url: "unix:////./C:/my/file/path", + expected: "/mnt/c/my/file/path", + }, } - assert.Equal(t, wslSocketPath(u.Path, fs), "/mnt/c/my/file/path") - // Use a filesystem where the WSL path doesn't exist. - fs = fstest.MapFS{ - "my/file/path": {}, + for _, tc := range testCases { + t.Run(tc.doc, func(t *testing.T) { + u, err := url.Parse(tc.url) + assert.NilError(t, err) + // Ensure host is empty. + assert.Equal(t, u.Host, "") + + result := wslSocketPath(u.Path, tc.fs) + + assert.Equal(t, result, tc.expected) + }) } - assert.Equal(t, wslSocketPath(u.Path, fs), "") }