|
4 | 4 | "bytes" |
5 | 5 | "fmt" |
6 | 6 | "io" |
| 7 | + "strings" |
7 | 8 | "testing" |
8 | 9 | "time" |
9 | 10 |
|
@@ -179,3 +180,57 @@ func TestMasker_WriteError(t *testing.T) { |
179 | 180 | err = m.Stop() |
180 | 181 | assert.Equal(t, err, expectedErr) |
181 | 182 | } |
| 183 | + |
| 184 | +func TestMasker_MultipleStreams(t *testing.T) { |
| 185 | + sequences := [][]byte{ |
| 186 | + []byte("Gandalf"), |
| 187 | + []byte("uruk-hai army"), |
| 188 | + []byte("Aragorn, son of Arathorn"), |
| 189 | + []byte("hobbit"), |
| 190 | + } |
| 191 | + |
| 192 | + input := [][]byte{ |
| 193 | + []byte("line 1 "), |
| 194 | + []byte("line 2 "), |
| 195 | + []byte("line 3 "), |
| 196 | + []byte("message from Gandalf the Grey "), |
| 197 | + []byte("line 5 "), |
| 198 | + []byte("an uruk-hai army appears "), |
| 199 | + []byte("say hobbit hobbit hobbit "), |
| 200 | + } |
| 201 | + |
| 202 | + bufferDelay := 10 * time.Millisecond |
| 203 | + |
| 204 | + m := New(sequences, &Options{ |
| 205 | + BufferDelay: bufferDelay, |
| 206 | + }) |
| 207 | + |
| 208 | + var outputBuffer bytes.Buffer |
| 209 | + var streams [3]io.Writer |
| 210 | + |
| 211 | + for i := range streams { |
| 212 | + streams[i] = m.AddStream(&outputBuffer) |
| 213 | + } |
| 214 | + |
| 215 | + go m.Start() |
| 216 | + |
| 217 | + expected := "" |
| 218 | + |
| 219 | + for i, b := range input { |
| 220 | + n, err := streams[i%3].Write(b) |
| 221 | + assert.OK(t, err) |
| 222 | + assert.Equal(t, n, len(b)) |
| 223 | + |
| 224 | + expected += string(b) |
| 225 | + } |
| 226 | + |
| 227 | + assert.Equal(t, outputBuffer.String(), "") |
| 228 | + |
| 229 | + err := m.Stop() |
| 230 | + assert.OK(t, err) |
| 231 | + |
| 232 | + for _, sequence := range sequences { |
| 233 | + expected = strings.ReplaceAll(expected, string(sequence), maskString) |
| 234 | + } |
| 235 | + assert.Equal(t, outputBuffer.String(), expected) |
| 236 | +} |
0 commit comments