diff --git a/engine/engine.go b/engine/engine.go index 623af81bd1..34b28f64db 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -3,6 +3,7 @@ package engine import ( "fmt" "github.com/dotcloud/docker/utils" + "io" "log" "os" "runtime" @@ -34,6 +35,9 @@ type Engine struct { handlers map[string]Handler hack Hack // data for temporary hackery (see hack.go) id string + Stdout io.Writer + Stderr io.Writer + Stdin io.Reader } func (eng *Engine) Root() string { @@ -82,6 +86,9 @@ func New(root string) (*Engine, error) { root: root, handlers: make(map[string]Handler), id: utils.RandomString(), + Stdout: os.Stdout, + Stderr: os.Stderr, + Stdin: os.Stdin, } // Copy existing global handlers for k, v := range globalHandlers { @@ -105,8 +112,8 @@ func (eng *Engine) Job(name string, args ...string) *Job { Stdout: NewOutput(), Stderr: NewOutput(), } - job.Stdout.Add(utils.NopWriteCloser(os.Stdout)) - job.Stderr.Add(utils.NopWriteCloser(os.Stderr)) + job.Stdout.Add(utils.NopWriteCloser(eng.Stdout)) + job.Stderr.Add(utils.NopWriteCloser(eng.Stderr)) handler, exists := eng.handlers[name] if exists { job.handler = handler @@ -116,5 +123,5 @@ func (eng *Engine) Job(name string, args ...string) *Job { func (eng *Engine) Logf(format string, args ...interface{}) (n int, err error) { prefixedFormat := fmt.Sprintf("[%s] %s\n", eng, strings.TrimRight(format, "\n")) - return fmt.Fprintf(os.Stderr, prefixedFormat, args...) + return fmt.Fprintf(eng.Stderr, prefixedFormat, args...) } diff --git a/integration/utils_test.go b/integration/utils_test.go index 2feaf25396..62ec5a51fd 100644 --- a/integration/utils_test.go +++ b/integration/utils_test.go @@ -185,6 +185,8 @@ func NewTestEngine(t utils.Fataler) *engine.Engine { if err != nil { t.Fatal(err) } + eng.Stdout = ioutil.Discard + eng.Stderr = ioutil.Discard // Load default plugins // (This is manually copied and modified from main() until we have a more generic plugin system) job := eng.Job("initapi")