|
4 | 4 | package fileconsumer
|
5 | 5 |
|
6 | 6 | import (
|
| 7 | + "bytes" |
7 | 8 | "context"
|
| 9 | + "encoding/json" |
8 | 10 | "testing"
|
9 | 11 | "time"
|
10 | 12 |
|
@@ -239,3 +241,54 @@ func TestMapCopy(t *testing.T) {
|
239 | 241 | assert.Equal(t, 1, initMap["intVal"])
|
240 | 242 | assert.Equal(t, "OrigStr", initMap["strVal"])
|
241 | 243 | }
|
| 244 | + |
| 245 | +func TestEncodingDecode(t *testing.T) { |
| 246 | + testFile := openTemp(t, t.TempDir()) |
| 247 | + testToken := tokenWithLength(2 * DefaultFingerprintSize) |
| 248 | + _, err := testFile.Write(testToken) |
| 249 | + require.NoError(t, err) |
| 250 | + fp, err := NewFingerprint(testFile, DefaultFingerprintSize) |
| 251 | + require.NoError(t, err) |
| 252 | + |
| 253 | + f := readerFactory{ |
| 254 | + SugaredLogger: testutil.Logger(t), |
| 255 | + readerConfig: &readerConfig{ |
| 256 | + fingerprintSize: DefaultFingerprintSize, |
| 257 | + maxLogSize: defaultMaxLogSize, |
| 258 | + }, |
| 259 | + splitterFactory: newMultilineSplitterFactory(helper.NewSplitterConfig()), |
| 260 | + fromBeginning: false, |
| 261 | + } |
| 262 | + r, err := f.newReader(testFile, fp) |
| 263 | + require.NoError(t, err) |
| 264 | + |
| 265 | + // Just faking out these properties |
| 266 | + r.HeaderFinalized = true |
| 267 | + r.FileAttributes.HeaderAttributes = map[string]any{"foo": "bar"} |
| 268 | + |
| 269 | + assert.Equal(t, testToken[:DefaultFingerprintSize], r.Fingerprint.FirstBytes) |
| 270 | + assert.Equal(t, int64(2*DefaultFingerprintSize), r.Offset) |
| 271 | + |
| 272 | + // Encode |
| 273 | + var buf bytes.Buffer |
| 274 | + enc := json.NewEncoder(&buf) |
| 275 | + require.NoError(t, enc.Encode(r)) |
| 276 | + |
| 277 | + // Decode |
| 278 | + dec := json.NewDecoder(bytes.NewReader(buf.Bytes())) |
| 279 | + decodedReader, err := f.unsafeReader() |
| 280 | + require.NoError(t, err) |
| 281 | + require.NoError(t, dec.Decode(decodedReader)) |
| 282 | + |
| 283 | + // Assert decoded reader has values persisted |
| 284 | + assert.Equal(t, testToken[:DefaultFingerprintSize], decodedReader.Fingerprint.FirstBytes) |
| 285 | + assert.Equal(t, int64(2*DefaultFingerprintSize), decodedReader.Offset) |
| 286 | + assert.True(t, decodedReader.HeaderFinalized) |
| 287 | + assert.Equal(t, map[string]any{"foo": "bar"}, decodedReader.FileAttributes.HeaderAttributes) |
| 288 | + |
| 289 | + // These fields are intentionally excluded, as they may have changed |
| 290 | + assert.Empty(t, decodedReader.FileAttributes.Name) |
| 291 | + assert.Empty(t, decodedReader.FileAttributes.Path) |
| 292 | + assert.Empty(t, decodedReader.FileAttributes.NameResolved) |
| 293 | + assert.Empty(t, decodedReader.FileAttributes.PathResolved) |
| 294 | +} |
0 commit comments