2014-02-25 11:17:48 -05:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2017-08-22 16:08:42 -04:00
|
|
|
"fmt"
|
|
|
|
"os"
|
2016-12-13 15:21:51 -05:00
|
|
|
"os/exec"
|
2017-08-22 16:08:42 -04:00
|
|
|
"path/filepath"
|
2017-08-21 19:03:58 -04:00
|
|
|
"strings"
|
|
|
|
|
2017-08-22 16:08:42 -04:00
|
|
|
"github.com/docker/docker/pkg/stringutils"
|
2017-01-13 11:23:28 -05:00
|
|
|
"github.com/docker/docker/pkg/testutil/cmd"
|
2014-02-25 11:17:48 -05:00
|
|
|
)
|
|
|
|
|
2016-02-03 09:16:00 -05:00
|
|
|
func getPrefixAndSlashFromDaemonPlatform() (prefix, slash string) {
|
2017-01-13 11:23:28 -05:00
|
|
|
if testEnv.DaemonPlatform() == "windows" {
|
2016-02-03 09:16:00 -05:00
|
|
|
return "c:", `\`
|
|
|
|
}
|
|
|
|
return "", "/"
|
|
|
|
}
|
|
|
|
|
2016-08-04 12:57:34 -04:00
|
|
|
// TODO: update code to call cmd.RunCmd directly, and remove this function
|
2017-01-05 13:08:24 -05:00
|
|
|
// Deprecated: use pkg/testutil/cmd instead
|
2016-08-04 12:57:34 -04:00
|
|
|
func runCommandWithOutput(execCmd *exec.Cmd) (string, int, error) {
|
|
|
|
result := cmd.RunCmd(transformCmd(execCmd))
|
|
|
|
return result.Combined(), result.ExitCode, result.Error
|
2014-02-25 11:17:48 -05:00
|
|
|
}
|
|
|
|
|
2016-08-04 12:57:34 -04:00
|
|
|
// Temporary shim for migrating commands to the new function
|
|
|
|
func transformCmd(execCmd *exec.Cmd) cmd.Cmd {
|
|
|
|
return cmd.Cmd{
|
|
|
|
Command: execCmd.Args,
|
|
|
|
Env: execCmd.Env,
|
|
|
|
Dir: execCmd.Dir,
|
|
|
|
Stdin: execCmd.Stdin,
|
|
|
|
Stdout: execCmd.Stdout,
|
|
|
|
}
|
2014-02-25 11:17:48 -05:00
|
|
|
}
|
2017-08-21 19:03:58 -04:00
|
|
|
|
|
|
|
// ParseCgroupPaths parses 'procCgroupData', which is output of '/proc/<pid>/cgroup', and returns
|
|
|
|
// a map which cgroup name as key and path as value.
|
|
|
|
func ParseCgroupPaths(procCgroupData string) map[string]string {
|
|
|
|
cgroupPaths := map[string]string{}
|
|
|
|
for _, line := range strings.Split(procCgroupData, "\n") {
|
|
|
|
parts := strings.Split(line, ":")
|
|
|
|
if len(parts) != 3 {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
cgroupPaths[parts[1]] = parts[2]
|
|
|
|
}
|
|
|
|
return cgroupPaths
|
|
|
|
}
|
2017-08-22 16:08:42 -04:00
|
|
|
|
|
|
|
// RandomTmpDirPath provides a temporary path with rand string appended.
|
|
|
|
// does not create or checks if it exists.
|
|
|
|
func RandomTmpDirPath(s string, platform string) string {
|
|
|
|
// TODO: why doesn't this use os.TempDir() ?
|
|
|
|
tmp := "/tmp"
|
|
|
|
if platform == "windows" {
|
|
|
|
tmp = os.Getenv("TEMP")
|
|
|
|
}
|
|
|
|
path := filepath.Join(tmp, fmt.Sprintf("%s.%s", s, stringutils.GenerateRandomAlphaOnlyString(10)))
|
|
|
|
if platform == "windows" {
|
|
|
|
return filepath.FromSlash(path) // Using \
|
|
|
|
}
|
|
|
|
return filepath.ToSlash(path) // Using /
|
|
|
|
}
|