mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-11-02 03:08:15 +00:00
Support PluginWatcher in Windows
Signed-off-by: Deep Debroy <ddebroy@docker.com>
This commit is contained in:
@@ -19,8 +19,14 @@ limitations under the License.
|
||||
package util
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"net"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
winio "github.com/Microsoft/go-winio"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@@ -90,3 +96,100 @@ func TestParseEndpoint(t *testing.T) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func testPipe(t *testing.T, label string) {
|
||||
generatePipeName := func(suffixlen int) string {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
letter := []rune("abcdef0123456789")
|
||||
b := make([]rune, suffixlen)
|
||||
for i := range b {
|
||||
b[i] = letter[rand.Intn(len(letter))]
|
||||
}
|
||||
return "\\\\.\\pipe\\test-pipe" + string(b)
|
||||
}
|
||||
testFile := generatePipeName(4)
|
||||
pipeln, err := winio.ListenPipe(testFile, &winio.PipeConfig{SecurityDescriptor: "D:P(A;;GA;;;BA)(A;;GA;;;SY)"})
|
||||
defer pipeln.Close()
|
||||
|
||||
require.NoErrorf(t, err, "Failed to listen on named pipe for test purposes: %v while setting up: %s", err, label)
|
||||
result, err := IsUnixDomainSocket(testFile)
|
||||
assert.Nil(t, err, "Unexpected error: %v from IsUnixDomainSocket for %s", err, label)
|
||||
assert.False(t, result, "Unexpected result: true from IsUnixDomainSocket: %v for %s", result, label)
|
||||
}
|
||||
|
||||
func testRegularFile(t *testing.T, label string, exists bool) {
|
||||
f, err := ioutil.TempFile("", "test-file")
|
||||
require.NoErrorf(t, err, "Failed to create file for test purposes: %v while setting up: %s", err, label)
|
||||
testFile := f.Name()
|
||||
if !exists {
|
||||
testFile = testFile + ".absent"
|
||||
}
|
||||
f.Close()
|
||||
result, err := IsUnixDomainSocket(testFile)
|
||||
os.Remove(f.Name())
|
||||
assert.Nil(t, err, "Unexpected error: %v from IsUnixDomainSocket for %s", err, label)
|
||||
assert.False(t, result, "Unexpected result: true from IsUnixDomainSocket: %v for %s", result, label)
|
||||
}
|
||||
|
||||
func testUnixDomainSocket(t *testing.T, label string) {
|
||||
f, err := ioutil.TempFile("", "test-domain-socket")
|
||||
require.NoErrorf(t, err, "Failed to create file for test purposes: %v while setting up: %s", err, label)
|
||||
testFile := f.Name()
|
||||
f.Close()
|
||||
os.Remove(testFile)
|
||||
ta, err := net.ResolveUnixAddr("unix", testFile)
|
||||
require.NoErrorf(t, err, "Failed to ResolveUnixAddr: %v while setting up: %s", err, label)
|
||||
unixln, err := net.ListenUnix("unix", ta)
|
||||
require.NoErrorf(t, err, "Failed to ListenUnix: %v while setting up: %s", err, label)
|
||||
result, err := IsUnixDomainSocket(testFile)
|
||||
unixln.Close()
|
||||
assert.Nil(t, err, "Unexpected error: %v from IsUnixDomainSocket for %s", err, label)
|
||||
assert.True(t, result, "Unexpected result: false from IsUnixDomainSocket: %v for %s", result, label)
|
||||
}
|
||||
|
||||
func TestIsUnixDomainSocket(t *testing.T) {
|
||||
testPipe(t, "Named Pipe")
|
||||
testRegularFile(t, "Regular File that Exists", true)
|
||||
testRegularFile(t, "Regular File that Does Not Exist", false)
|
||||
testUnixDomainSocket(t, "Unix Domain Socket File")
|
||||
}
|
||||
|
||||
func TestNormalizePath(t *testing.T) {
|
||||
tests := []struct {
|
||||
originalpath string
|
||||
normalizedPath string
|
||||
}{
|
||||
{
|
||||
originalpath: "\\path\\to\\file",
|
||||
normalizedPath: "c:\\path\\to\\file",
|
||||
},
|
||||
{
|
||||
originalpath: "/path/to/file",
|
||||
normalizedPath: "c:\\path\\to\\file",
|
||||
},
|
||||
{
|
||||
originalpath: "/path/to/dir/",
|
||||
normalizedPath: "c:\\path\\to\\dir\\",
|
||||
},
|
||||
{
|
||||
originalpath: "\\path\\to\\dir\\",
|
||||
normalizedPath: "c:\\path\\to\\dir\\",
|
||||
},
|
||||
{
|
||||
originalpath: "/file",
|
||||
normalizedPath: "c:\\file",
|
||||
},
|
||||
{
|
||||
originalpath: "\\file",
|
||||
normalizedPath: "c:\\file",
|
||||
},
|
||||
{
|
||||
originalpath: "fileonly",
|
||||
normalizedPath: "fileonly",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
assert.Equal(t, test.normalizedPath, NormalizePath(test.originalpath))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user