1
1
package parallel
2
2
3
3
import (
4
+ "errors"
4
5
"testing"
5
6
)
6
7
@@ -24,7 +25,7 @@ func TestTaggerEmpty(t *testing.T) {
24
25
}
25
26
}
26
27
27
- // Test tagger prepend logic with a whole line data
28
+ // Prepend with a whole line data
28
29
func TestTaggerSimple (t * testing.T ) {
29
30
var buf testBufWriter
30
31
wtr := newTagger (& buf , []byte ("host1: " ))
@@ -66,7 +67,7 @@ func TestTaggerNoTrailingNL(t *testing.T) {
66
67
}
67
68
}
68
69
69
- // Test tagger prepend logic with partial lines
70
+ // Prepend with partial lines
70
71
func TestTaggerPartialWrites (t * testing.T ) {
71
72
var buf testBufWriter
72
73
wtr := newTagger (& buf , []byte ("host1: " ))
@@ -89,7 +90,7 @@ func TestTaggerPartialWrites(t *testing.T) {
89
90
}
90
91
}
91
92
92
- // Test tagger with zero -length writes
93
+ // Zero -length writes
93
94
func TestTaggerWriteZero (t * testing.T ) {
94
95
var buf testBufWriter
95
96
wtr := newTagger (& buf , []byte ("host1: " ))
@@ -109,3 +110,106 @@ func TestTaggerWriteZero(t *testing.T) {
109
110
t .Error ("Unexpected modification. \n Exp" , exp , "\n actual" , act )
110
111
}
111
112
}
113
+
114
+ // Data is zero length
115
+ func TestTaggerIOErrorsW0 (t * testing.T ) {
116
+ buf := & testTruncateWriter {}
117
+ wtr := newTagger (buf , []byte ("" ))
118
+ b , err := wtr .Write ([]byte {})
119
+ if b != 0 || err != nil {
120
+ t .Error ("Expected zero and nil, not" , b , err )
121
+ }
122
+ }
123
+
124
+ // Tag is zero length so return downstream write results
125
+ func TestTaggerIOErrorsW1 (t * testing.T ) {
126
+ buf := & testTruncateWriter {}
127
+ buf .append ("Error on first write" , - 1 , errors .New ("W1 error" ))
128
+ wtr := newTagger (buf , []byte ("" ))
129
+ b , err := wtr .Write ([]byte {'a' })
130
+ if b != 1 || err == nil {
131
+ t .Error ("Expected one and error, not" , b )
132
+ }
133
+ }
134
+
135
+ // Error with tag pending on first line
136
+ func TestTaggerIOErrorsW2 (t * testing.T ) {
137
+ buf := & testTruncateWriter {}
138
+ wtr := newTagger (buf , []byte ("W2Tag" ))
139
+ buf .append ("Error on first write" , 0 , errors .New ("Tag Error" ))
140
+ b , err := wtr .Write ([]byte {'a' , '\n' , 'b' , '\n' })
141
+ if b != 4 { // User bytes written is unaffected
142
+ t .Error ("Expected 4 bytes written, not" , b )
143
+ }
144
+ if err == nil || err .Error () != "Tag Error" { // But error should be present
145
+ t .Error ("Expected Tag Error return, not" , err )
146
+ }
147
+ }
148
+
149
+ // Error on writing of first line
150
+ func TestTaggerIOErrorsW3 (t * testing.T ) {
151
+ buf := & testTruncateWriter {}
152
+ wtr := newTagger (buf , []byte ("W3Tag" ))
153
+ buf .append ("W1 is good" , - 1 , nil )
154
+ buf .append ("W3 is error" , - 1 , errors .New ("W3 error" ))
155
+
156
+ data := []byte {'a' , 'b' , 'c' , 'd' , '\n' , 'A' , 'B' , '\n' }
157
+ b , err := wtr .Write (data )
158
+ if b != len (data ) {
159
+ t .Error ("Expected W3 to return" , len (data ), "not" , b )
160
+ }
161
+ if err == nil || err .Error () != "W3 error" {
162
+ t .Error ("Expected 'W3 error', not" , err )
163
+ }
164
+ }
165
+
166
+ // Error on writing NL between split lines
167
+ func TestTaggerIOErrorsW4 (t * testing.T ) {
168
+ buf := & testTruncateWriter {}
169
+ wtr := newTagger (buf , []byte ("W4Tag" ))
170
+ buf .append ("W2Tag" , - 1 , nil )
171
+ buf .append ("W3Line 1 'abcd'" , - 1 , nil )
172
+ buf .append ("W4 NL fails" , 0 , errors .New ("W4 NL failed" ))
173
+
174
+ data := []byte {'a' , 'b' , 'c' , 'd' , '\n' , 'A' , 'B' , '\n' }
175
+ b , err := wtr .Write (data )
176
+ if b != len (data )- 1 { // Minus the NL
177
+ t .Error ("Expected W4 to return" , len (data )- 1 , "not" , b )
178
+ }
179
+ if err == nil || err .Error () != "W4 NL failed" {
180
+ t .Error ("Expected 'W4 NL failed', not" , err )
181
+ }
182
+ }
183
+
184
+ // Error on writing tag on last line
185
+ func TestTaggerIOErrorsW5 (t * testing.T ) {
186
+ buf := & testTruncateWriter {}
187
+ wtr := newTagger (buf , []byte ("W5Tag" ))
188
+ buf .append ("W5 Tag fails" , 2 , errors .New ("W5 Tag failed" ))
189
+
190
+ data := []byte {'a' , 'b' , 'c' } // Last line
191
+ b , err := wtr .Write (data )
192
+ if b != 3 { // Tag write failed, but data write succeeds
193
+ t .Error ("Expected W5 to return" , 3 , "not" , b )
194
+ }
195
+ if err == nil || err .Error () != "W5 Tag failed" {
196
+ t .Error ("Expected 'W5 Tag failed', not" , err )
197
+ }
198
+ }
199
+
200
+ // Error on writing data on last line
201
+ func TestTaggerIOErrorsW6 (t * testing.T ) {
202
+ buf := & testTruncateWriter {}
203
+ wtr := newTagger (buf , []byte ("W5Tag" ))
204
+ buf .append ("W5 Tag ok" , - 1 , nil )
205
+ buf .append ("W6 LL fails" , 2 , errors .New ("W6 LL failed" ))
206
+
207
+ data := []byte {'a' , 'b' , 'c' } // Last line
208
+ b , err := wtr .Write (data )
209
+ if b != 2 { // Tag write ok, but data write failed
210
+ t .Error ("Expected W6 to return" , 2 , "not" , b )
211
+ }
212
+ if err == nil || err .Error () != "W6 LL failed" {
213
+ t .Error ("Expected 'W6 LL failed', not" , err )
214
+ }
215
+ }
0 commit comments