From 4bf2fe9fed6cc53087dba15fe06d8be75c2b92ed Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Tue, 6 Jun 2023 16:52:31 +0200 Subject: [PATCH] assume we receive logs by lines and don't ignore those without EOL Signed-off-by: Nicolas De Loof --- pkg/compose/logs_test.go | 6 +++--- pkg/utils/writer.go | 12 +++++++++--- pkg/utils/writer_test.go | 22 +++++++++++++++------- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/pkg/compose/logs_test.go b/pkg/compose/logs_test.go index 21e30f2cb..2e13547ab 100644 --- a/pkg/compose/logs_test.go +++ b/pkg/compose/logs_test.go @@ -71,9 +71,9 @@ func TestComposeService_Logs_Demux(t *testing.T) { c1Stdout := stdcopy.NewStdWriter(c1Writer, stdcopy.Stdout) c1Stderr := stdcopy.NewStdWriter(c1Writer, stdcopy.Stderr) go func() { - _, err := c1Stdout.Write([]byte("hello stdout\n")) + _, err := c1Stdout.Write([]byte("hello\n 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") _ = c1Writer.Close() }() @@ -94,7 +94,7 @@ func TestComposeService_Logs_Demux(t *testing.T) { require.Equal( t, - []string{"hello stdout", "hello stderr"}, + []string{"hello", " stdout", "hello", " stderr"}, consumer.LogsForContainer("c"), ) } diff --git a/pkg/utils/writer.go b/pkg/utils/writer.go index 83f0bf5c3..fc9547197 100644 --- a/pkg/utils/writer.go +++ b/pkg/utils/writer.go @@ -43,11 +43,17 @@ func (s *splitWriter) Write(b []byte) (int, error) { for { b = s.buffer.Bytes() 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 } - line := s.buffer.Next(index + 1) - s.consumer(string(line[:len(line)-1])) } return n, nil } diff --git a/pkg/utils/writer_test.go b/pkg/utils/writer_test.go index 7383a3e87..765cd13d9 100644 --- a/pkg/utils/writer_test.go +++ b/pkg/utils/writer_test.go @@ -28,13 +28,21 @@ func TestSplitWriter(t *testing.T) { w := GetWriter(func(line string) { lines = append(lines, line) }) - w.Write([]byte("h")) - w.Write([]byte("e")) - w.Write([]byte("l")) - w.Write([]byte("l")) - w.Write([]byte("o")) - w.Write([]byte("\n")) - w.Write([]byte("world!\n")) + w.Write([]byte("hello\n")) + w.Write([]byte("world\n")) + w.Write([]byte("!")) + assert.DeepEqual(t, lines, []string{"hello", "world", "!"}) + +} + +//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!"}) }