mirror of
https://github.com/docker/compose.git
synced 2025-07-22 21:24:38 +02:00
assume we receive logs by lines and don't ignore those without EOL
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
parent
e21a8d6293
commit
4bf2fe9fed
@ -71,9 +71,9 @@ func TestComposeService_Logs_Demux(t *testing.T) {
|
|||||||
c1Stdout := stdcopy.NewStdWriter(c1Writer, stdcopy.Stdout)
|
c1Stdout := stdcopy.NewStdWriter(c1Writer, stdcopy.Stdout)
|
||||||
c1Stderr := stdcopy.NewStdWriter(c1Writer, stdcopy.Stderr)
|
c1Stderr := stdcopy.NewStdWriter(c1Writer, stdcopy.Stderr)
|
||||||
go func() {
|
go func() {
|
||||||
_, err := c1Stdout.Write([]byte("hello stdout\n"))
|
_, err := c1Stdout.Write([]byte("hello\n stdout"))
|
||||||
assert.NoError(t, err, "Writing to fake stdout")
|
assert.NoError(t, err, "Writing to fake stdout")
|
||||||
_, err = c1Stderr.Write([]byte("hello stderr\n"))
|
_, err = c1Stderr.Write([]byte("hello\n stderr"))
|
||||||
assert.NoError(t, err, "Writing to fake stderr")
|
assert.NoError(t, err, "Writing to fake stderr")
|
||||||
_ = c1Writer.Close()
|
_ = c1Writer.Close()
|
||||||
}()
|
}()
|
||||||
@ -94,7 +94,7 @@ func TestComposeService_Logs_Demux(t *testing.T) {
|
|||||||
|
|
||||||
require.Equal(
|
require.Equal(
|
||||||
t,
|
t,
|
||||||
[]string{"hello stdout", "hello stderr"},
|
[]string{"hello", " stdout", "hello", " stderr"},
|
||||||
consumer.LogsForContainer("c"),
|
consumer.LogsForContainer("c"),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -43,11 +43,17 @@ func (s *splitWriter) Write(b []byte) (int, error) {
|
|||||||
for {
|
for {
|
||||||
b = s.buffer.Bytes()
|
b = s.buffer.Bytes()
|
||||||
index := bytes.Index(b, []byte{'\n'})
|
index := bytes.Index(b, []byte{'\n'})
|
||||||
if index < 0 {
|
if index > 0 {
|
||||||
|
line := s.buffer.Next(index + 1)
|
||||||
|
s.consumer(string(line[:len(line)-1]))
|
||||||
|
} else {
|
||||||
|
line := s.buffer.String()
|
||||||
|
s.buffer.Reset()
|
||||||
|
if len(line) > 0 {
|
||||||
|
s.consumer(line)
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
line := s.buffer.Next(index + 1)
|
|
||||||
s.consumer(string(line[:len(line)-1]))
|
|
||||||
}
|
}
|
||||||
return n, nil
|
return n, nil
|
||||||
}
|
}
|
||||||
|
@ -28,13 +28,21 @@ func TestSplitWriter(t *testing.T) {
|
|||||||
w := GetWriter(func(line string) {
|
w := GetWriter(func(line string) {
|
||||||
lines = append(lines, line)
|
lines = append(lines, line)
|
||||||
})
|
})
|
||||||
w.Write([]byte("h"))
|
w.Write([]byte("hello\n"))
|
||||||
w.Write([]byte("e"))
|
w.Write([]byte("world\n"))
|
||||||
w.Write([]byte("l"))
|
w.Write([]byte("!"))
|
||||||
w.Write([]byte("l"))
|
assert.DeepEqual(t, lines, []string{"hello", "world", "!"})
|
||||||
w.Write([]byte("o"))
|
|
||||||
w.Write([]byte("\n"))
|
}
|
||||||
w.Write([]byte("world!\n"))
|
|
||||||
|
//nolint:errcheck
|
||||||
|
func TestSplitWriterNoEOL(t *testing.T) {
|
||||||
|
var lines []string
|
||||||
|
w := GetWriter(func(line string) {
|
||||||
|
lines = append(lines, line)
|
||||||
|
})
|
||||||
|
w.Write([]byte("hello\n"))
|
||||||
|
w.Write([]byte("world!"))
|
||||||
assert.DeepEqual(t, lines, []string{"hello", "world!"})
|
assert.DeepEqual(t, lines, []string{"hello", "world!"})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user