Browse code

add tests for long log-lines and trailing lines

this adds new tests to test logging of long log-lines
(without newlines), and trailing log-lines.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2016/05/02 20:50:08
Showing 1 changed files
... ...
@@ -6,6 +6,7 @@ import (
6 6
 	"fmt"
7 7
 	"io"
8 8
 	"os"
9
+	"strings"
9 10
 	"sync"
10 11
 	"testing"
11 12
 	"time"
... ...
@@ -33,6 +34,9 @@ func (l *TestLoggerJSON) Name() string { return "json" }
33 33
 func TestCopier(t *testing.T) {
34 34
 	stdoutLine := "Line that thinks that it is log line from docker stdout"
35 35
 	stderrLine := "Line that thinks that it is log line from docker stderr"
36
+	stdoutTrailingLine := "stdout trailing line"
37
+	stderrTrailingLine := "stderr trailing line"
38
+
36 39
 	var stdout bytes.Buffer
37 40
 	var stderr bytes.Buffer
38 41
 	for i := 0; i < 30; i++ {
... ...
@@ -44,6 +48,88 @@ func TestCopier(t *testing.T) {
44 44
 		}
45 45
 	}
46 46
 
47
+	// Test remaining lines without line-endings
48
+	if _, err := stdout.WriteString(stdoutTrailingLine); err != nil {
49
+		t.Fatal(err)
50
+	}
51
+	if _, err := stderr.WriteString(stderrTrailingLine); err != nil {
52
+		t.Fatal(err)
53
+	}
54
+
55
+	var jsonBuf bytes.Buffer
56
+
57
+	jsonLog := &TestLoggerJSON{Encoder: json.NewEncoder(&jsonBuf)}
58
+
59
+	c := NewCopier(
60
+		map[string]io.Reader{
61
+			"stdout": &stdout,
62
+			"stderr": &stderr,
63
+		},
64
+		jsonLog)
65
+	c.Run()
66
+	wait := make(chan struct{})
67
+	go func() {
68
+		c.Wait()
69
+		close(wait)
70
+	}()
71
+	select {
72
+	case <-time.After(1 * time.Second):
73
+		t.Fatal("Copier failed to do its work in 1 second")
74
+	case <-wait:
75
+	}
76
+	dec := json.NewDecoder(&jsonBuf)
77
+	for {
78
+		var msg Message
79
+		if err := dec.Decode(&msg); err != nil {
80
+			if err == io.EOF {
81
+				break
82
+			}
83
+			t.Fatal(err)
84
+		}
85
+		if msg.Source != "stdout" && msg.Source != "stderr" {
86
+			t.Fatalf("Wrong Source: %q, should be %q or %q", msg.Source, "stdout", "stderr")
87
+		}
88
+		if msg.Source == "stdout" {
89
+			if string(msg.Line) != stdoutLine && string(msg.Line) != stdoutTrailingLine {
90
+				t.Fatalf("Wrong Line: %q, expected %q or %q", msg.Line, stdoutLine, stdoutTrailingLine)
91
+			}
92
+		}
93
+		if msg.Source == "stderr" {
94
+			if string(msg.Line) != stderrLine && string(msg.Line) != stderrTrailingLine {
95
+				t.Fatalf("Wrong Line: %q, expected %q or %q", msg.Line, stderrLine, stderrTrailingLine)
96
+			}
97
+		}
98
+	}
99
+}
100
+
101
+// TestCopierLongLines tests long lines without line breaks
102
+func TestCopierLongLines(t *testing.T) {
103
+	// Long lines (should be split at "bufSize")
104
+	const bufSize = 16 * 1024
105
+	stdoutLongLine := strings.Repeat("a", bufSize)
106
+	stderrLongLine := strings.Repeat("b", bufSize)
107
+	stdoutTrailingLine := "stdout trailing line"
108
+	stderrTrailingLine := "stderr trailing line"
109
+
110
+	var stdout bytes.Buffer
111
+	var stderr bytes.Buffer
112
+
113
+	for i := 0; i < 3; i++ {
114
+		if _, err := stdout.WriteString(stdoutLongLine); err != nil {
115
+			t.Fatal(err)
116
+		}
117
+		if _, err := stderr.WriteString(stderrLongLine); err != nil {
118
+			t.Fatal(err)
119
+		}
120
+	}
121
+
122
+	if _, err := stdout.WriteString(stdoutTrailingLine); err != nil {
123
+		t.Fatal(err)
124
+	}
125
+	if _, err := stderr.WriteString(stderrTrailingLine); err != nil {
126
+		t.Fatal(err)
127
+	}
128
+
47 129
 	var jsonBuf bytes.Buffer
48 130
 
49 131
 	jsonLog := &TestLoggerJSON{Encoder: json.NewEncoder(&jsonBuf)}
... ...
@@ -78,13 +164,13 @@ func TestCopier(t *testing.T) {
78 78
 			t.Fatalf("Wrong Source: %q, should be %q or %q", msg.Source, "stdout", "stderr")
79 79
 		}
80 80
 		if msg.Source == "stdout" {
81
-			if string(msg.Line) != stdoutLine {
82
-				t.Fatalf("Wrong Line: %q, expected %q", msg.Line, stdoutLine)
81
+			if string(msg.Line) != stdoutLongLine && string(msg.Line) != stdoutTrailingLine {
82
+				t.Fatalf("Wrong Line: %q, expected 'stdoutLongLine' or 'stdoutTrailingLine'", msg.Line)
83 83
 			}
84 84
 		}
85 85
 		if msg.Source == "stderr" {
86
-			if string(msg.Line) != stderrLine {
87
-				t.Fatalf("Wrong Line: %q, expected %q", msg.Line, stderrLine)
86
+			if string(msg.Line) != stderrLongLine && string(msg.Line) != stderrTrailingLine {
87
+				t.Fatalf("Wrong Line: %q, expected 'stderrLongLine' or 'stderrTrailingLine'", msg.Line)
88 88
 			}
89 89
 		}
90 90
 	}