mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-03 02:00:43 +00:00
69 lines
1.1 KiB
Go
69 lines
1.1 KiB
Go
package exec
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
"os/exec"
|
|
)
|
|
|
|
// Cmd is a hook for mocking
|
|
type Cmd interface {
|
|
StdoutPipe() (io.ReadCloser, error)
|
|
Start() error
|
|
Wait() error
|
|
Process() *os.Process
|
|
}
|
|
|
|
// Command is a hook for mocking
|
|
var Command = func(name string, args ...string) Cmd {
|
|
return &realCmd{exec.Command(name, args...)}
|
|
}
|
|
|
|
type realCmd struct {
|
|
*exec.Cmd
|
|
}
|
|
|
|
func (c *realCmd) Process() *os.Process {
|
|
return c.Cmd.Process
|
|
}
|
|
|
|
type mockCmd struct {
|
|
io.ReadCloser
|
|
}
|
|
|
|
// NewMockCmdString creates a new mock Cmd which has s on its stdout pipe
|
|
func NewMockCmdString(s string) Cmd {
|
|
return &mockCmd{
|
|
struct {
|
|
io.Reader
|
|
io.Closer
|
|
}{
|
|
bytes.NewBufferString(s),
|
|
ioutil.NopCloser(nil),
|
|
},
|
|
}
|
|
}
|
|
|
|
// NewMockCmd creates a new mock Cmd with rc as its stdout pipe
|
|
func NewMockCmd(rc io.ReadCloser) Cmd {
|
|
return &mockCmd{rc}
|
|
}
|
|
|
|
func (c *mockCmd) Start() error {
|
|
return nil
|
|
}
|
|
|
|
func (c *mockCmd) Wait() error {
|
|
return nil
|
|
}
|
|
|
|
func (c *mockCmd) StdoutPipe() (io.ReadCloser, error) {
|
|
return c.ReadCloser, nil
|
|
}
|
|
|
|
func (c *mockCmd) Process() *os.Process {
|
|
return nil
|
|
}
|