github.com/nullne/docker@v1.13.0-rc1/integration-cli/docker_cli_service_logs_experimental_test.go (about) 1 // +build !windows 2 3 package main 4 5 import ( 6 "bufio" 7 "io" 8 "os/exec" 9 "strings" 10 11 "github.com/docker/docker/pkg/integration/checker" 12 "github.com/go-check/check" 13 ) 14 15 type logMessage struct { 16 err error 17 data []byte 18 } 19 20 func (s *DockerSwarmSuite) TestServiceLogs(c *check.C) { 21 testRequires(c, ExperimentalDaemon) 22 23 d := s.AddDaemon(c, true, true) 24 25 name := "TestServiceLogs" 26 27 out, err := d.Cmd("service", "create", "--name", name, "busybox", "sh", "-c", "while true; do echo log test; sleep 1; done") 28 c.Assert(err, checker.IsNil) 29 c.Assert(strings.TrimSpace(out), checker.Not(checker.Equals), "") 30 31 // make sure task has been deployed. 32 waitAndAssert(c, defaultReconciliationTimeout, d.checkActiveContainerCount, checker.Equals, 1) 33 34 args := []string{"service", "logs", "-f", name} 35 cmd := exec.Command(dockerBinary, d.prependHostArg(args)...) 36 r, w := io.Pipe() 37 cmd.Stdout = w 38 cmd.Stderr = w 39 c.Assert(cmd.Start(), checker.IsNil) 40 41 // Make sure pipe is written to 42 ch := make(chan *logMessage) 43 go func() { 44 reader := bufio.NewReader(r) 45 msg := &logMessage{} 46 msg.data, _, msg.err = reader.ReadLine() 47 ch <- msg 48 }() 49 50 msg := <-ch 51 c.Assert(msg.err, checker.IsNil) 52 c.Assert(string(msg.data), checker.Contains, "log test") 53 54 c.Assert(cmd.Process.Kill(), checker.IsNil) 55 }