open-nomad/drivers/docker/utils_windows_test.go
2023-04-10 15:36:59 +00:00

96 lines
2 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
//go:build windows
package docker
import (
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
)
func TestExpandPath(t *testing.T) {
cases := []struct {
base string
target string
expected string
}{
{"/tmp/alloc/task", ".", "/tmp/alloc/task"},
{"/tmp/alloc/task", "..", "/tmp/alloc"},
{"/tmp/alloc/task", "d1/d2", "/tmp/alloc/task/d1/d2"},
{"/tmp/alloc/task", "../d1/d2", "/tmp/alloc/d1/d2"},
{"/tmp/alloc/task", "../../d1/d2", "/tmp/d1/d2"},
{"/tmp/alloc/task", "c:/home/user", "c:/home/user"},
{"/tmp/alloc/task", "c:/home/user/..", "c:/home"},
{"/tmp/alloc/task", `//./pipe/named_pipe`, `//./pipe/named_pipe`},
}
for _, c := range cases {
t.Run(c.expected, func(t *testing.T) {
require.Equal(t, c.expected, filepath.ToSlash(expandPath(c.base, c.target)))
})
}
}
func TestParseVolumeSpec_Windows(t *testing.T) {
validCases := []struct {
name string
bindSpec string
hostPath string
containerPath string
mode string
}{
{
"basic mount",
`c:\windows:e:\containerpath`,
`c:\windows`,
`e:\containerpath`,
"",
},
{
"relative path",
`relativepath:e:\containerpath`,
`relativepath`,
`e:\containerpath`,
"",
},
{
"named pipe",
`//./pipe/named_pipe://./pipe/named_pipe`,
`\\.\pipe\named_pipe`,
`//./pipe/named_pipe`,
"",
},
}
for _, c := range validCases {
t.Run("valid:"+c.name, func(t *testing.T) {
hp, cp, m, err := parseVolumeSpec(c.bindSpec, "windows")
require.NoError(t, err)
require.Equal(t, c.hostPath, hp)
require.Equal(t, c.containerPath, cp)
require.Equal(t, c.mode, m)
})
}
invalidCases := []string{
// linux path
"/linux-path",
// windows single path entry
`e:\containerpath`,
}
for _, c := range invalidCases {
t.Run("invalid:"+c, func(t *testing.T) {
hp, cp, m, err := parseVolumeSpec(c, "windows")
require.Errorf(t, err, "expected error but parsed as %s:%s:%s", hp, cp, m)
})
}
}