mirror of
https://github.com/coder/coder.git
synced 2026-06-04 05:28:20 +00:00
1069ce6e19
relates to #21335 Adds support for the agentsock and thus `coder exp sync` commands on Windows. This support was initially missing.
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package testutil
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// TempDirUnixSocket returns a temporary directory that can safely hold unix
|
|
// sockets (probably).
|
|
//
|
|
// During tests on darwin we hit the max path length limit for unix sockets
|
|
// pretty easily in the default location, so this function uses /tmp instead to
|
|
// get shorter paths.
|
|
//
|
|
// On Linux, we also hit this limit on GitHub Actions runners where TMPDIR is
|
|
// set to a long path like /home/runner/work/_temp/go-tmp/.
|
|
func TempDirUnixSocket(t *testing.T) string {
|
|
t.Helper()
|
|
// Windows doesn't have the same unix socket path length limits,
|
|
// and callers of this function are generally gated to !windows.
|
|
if runtime.GOOS == "windows" {
|
|
return t.TempDir()
|
|
}
|
|
|
|
testName := strings.ReplaceAll(t.Name(), "/", "_")
|
|
dir, err := os.MkdirTemp("/tmp", testName)
|
|
require.NoError(t, err, "create temp dir for unix socket test")
|
|
|
|
t.Cleanup(func() {
|
|
err := os.RemoveAll(dir)
|
|
assert.NoError(t, err, "remove temp dir", dir)
|
|
})
|
|
return dir
|
|
}
|
|
|
|
func AgentSocketPath(t *testing.T) string {
|
|
if runtime.GOOS == "windows" {
|
|
return fmt.Sprintf(`\\.\pipe\com.coder.agentsocket_test.%s.%s`, t.Name(), rand.Text())
|
|
}
|
|
return filepath.Join(TempDirUnixSocket(t), "test.sock")
|
|
}
|