Skip to content

Commit 78f738a

Browse files
committed
verify that logging is present on rotation test cases
Signed-off-by: ChrsMark <[email protected]>
1 parent c1699fc commit 78f738a

File tree

3 files changed

+67
-11
lines changed

3 files changed

+67
-11
lines changed

pkg/stanza/fileconsumer/design.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,10 @@ The net effect of the shut down routine is that all files are checkpointed in a
211211
#### Supported cases
212212

213213
A) When a file is moved within the pattern with unread logs on the end, then the original is created again,
214-
we get the unread logs on the moved as well as any new logs written to the newly created file.
214+
we get the unread logs on the moved as well as any new logs written to the newly created file.
215215

216216
B) When a file is copied within the pattern with unread logs on the end, then the original is truncated,
217-
we get the unread logs on the copy as well as any new logs written to the truncated file.
217+
we get the unread logs on the copy as well as any new logs written to the truncated file.
218218

219219
C) When a file it rotated out of pattern via move/create, we detect that
220220
our old handle is still valid and we attempt to read from it.

pkg/stanza/fileconsumer/file.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -231,19 +231,16 @@ func (m *Manager) newReader(ctx context.Context, file *os.File, fp *fingerprint.
231231
// Check previous poll cycle for match
232232
if oldReader := m.tracker.GetOpenFile(fp); oldReader != nil {
233233
if oldReader.GetFileName() != file.Name() {
234-
m.set.Logger.Debug(
235-
"File has been rotated",
236-
zap.String("original_path", oldReader.GetFileName()),
237-
zap.String("rotated_path", file.Name()))
238-
239234
if !oldReader.Validate() {
240235
m.set.Logger.Debug(
241-
"File has been truncated",
242-
zap.String("path", oldReader.GetFileName()))
236+
"File has been rotated(truncated)",
237+
zap.String("original_path", oldReader.GetFileName()),
238+
zap.String("rotated_path", file.Name()))
243239
} else {
244240
m.set.Logger.Debug(
245-
"File has been moved",
246-
zap.String("path", oldReader.GetFileName()))
241+
"File has been rotated(moved)",
242+
zap.String("original_path", oldReader.GetFileName()),
243+
zap.String("rotated_path", file.Name()))
247244
}
248245
}
249246
return m.readerFactory.NewReaderFromMetadata(file, oldReader.Close())

pkg/stanza/fileconsumer/rotation_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ import (
1414
"testing"
1515
"time"
1616

17+
"github.com/stretchr/testify/assert"
1718
"github.com/stretchr/testify/require"
19+
"go.uber.org/zap"
20+
"go.uber.org/zap/zaptest/observer"
1821

1922
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/fileconsumer/internal/filetest"
2023
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/testutil"
@@ -215,6 +218,9 @@ func TestTrackRotatedFilesLogOrder(t *testing.T) {
215218
cfg := NewConfig().includeDir(tempDir)
216219
cfg.StartAt = "beginning"
217220
operator, sink := testManager(t, cfg)
221+
core, observedLogs := observer.New(zap.DebugLevel)
222+
logger := zap.New(core)
223+
operator.set.Logger = logger
218224

219225
originalFile := filetest.OpenTemp(t, tempDir)
220226
orginalName := originalFile.Name()
@@ -240,6 +246,16 @@ func TestTrackRotatedFilesLogOrder(t *testing.T) {
240246
filetest.WriteString(t, newFile, "testlog3\n")
241247

242248
sink.ExpectTokens(t, []byte("testlog2"), []byte("testlog3"))
249+
250+
// verify that proper logging has taken place
251+
allLogs := observedLogs.All()
252+
foundLog := false
253+
for _, actualLog := range allLogs {
254+
if actualLog.Message == "File has been rotated(moved)" {
255+
foundLog = true
256+
}
257+
}
258+
assert.True(t, foundLog)
243259
}
244260

245261
// When a file it rotated out of pattern via move/create, we should
@@ -256,6 +272,9 @@ func TestRotatedOutOfPatternMoveCreate(t *testing.T) {
256272
cfg.StartAt = "beginning"
257273
operator, sink := testManager(t, cfg)
258274
operator.persister = testutil.NewUnscopedMockPersister()
275+
core, observedLogs := observer.New(zap.DebugLevel)
276+
logger := zap.New(core)
277+
operator.set.Logger = logger
259278

260279
originalFile := filetest.OpenTempWithPattern(t, tempDir, "*.log1")
261280
originalFileName := originalFile.Name()
@@ -280,6 +299,20 @@ func TestRotatedOutOfPatternMoveCreate(t *testing.T) {
280299

281300
// expect remaining log from old file as well as all from new file
282301
sink.ExpectTokens(t, []byte("testlog2"), []byte("testlog4"), []byte("testlog5"))
302+
303+
// verify that proper logging has taken place
304+
allLogs := observedLogs.All()
305+
expectedLogs := map[string]string{
306+
"File has been rotated(moved)": "",
307+
"Reading lost file": "",
308+
}
309+
foundLogs := 0
310+
for _, actualLog := range allLogs {
311+
if _, ok := expectedLogs[actualLog.Message]; ok {
312+
foundLogs++
313+
}
314+
}
315+
assert.Equal(t, 2, foundLogs)
283316
}
284317

285318
// When a file it rotated out of pattern via copy/truncate, we should
@@ -293,6 +326,9 @@ func TestRotatedOutOfPatternCopyTruncate(t *testing.T) {
293326
cfg.StartAt = "beginning"
294327
operator, sink := testManager(t, cfg)
295328
operator.persister = testutil.NewUnscopedMockPersister()
329+
core, observedLogs := observer.New(zap.DebugLevel)
330+
logger := zap.New(core)
331+
operator.set.Logger = logger
296332

297333
originalFile := filetest.OpenTempWithPattern(t, tempDir, "*.log1")
298334
filetest.WriteString(t, originalFile, "testlog1\n")
@@ -318,6 +354,16 @@ func TestRotatedOutOfPatternCopyTruncate(t *testing.T) {
318354
operator.poll(context.Background())
319355

320356
sink.ExpectTokens(t, []byte("testlog4"), []byte("testlog5"))
357+
358+
// verify that proper logging has taken place
359+
allLogs := observedLogs.All()
360+
foundLog := false
361+
for _, actualLog := range allLogs {
362+
if actualLog.Message == "File has been rotated(truncated)" {
363+
foundLog = true
364+
}
365+
}
366+
assert.True(t, foundLog)
321367
}
322368

323369
// TruncateThenWrite tests that, after a file has been truncated,
@@ -333,6 +379,9 @@ func TestTruncateThenWrite(t *testing.T) {
333379
cfg.StartAt = "beginning"
334380
operator, sink := testManager(t, cfg)
335381
operator.persister = testutil.NewUnscopedMockPersister()
382+
core, observedLogs := observer.New(zap.DebugLevel)
383+
logger := zap.New(core)
384+
operator.set.Logger = logger
336385

337386
temp1 := filetest.OpenTemp(t, tempDir)
338387
filetest.WriteString(t, temp1, "testlog1\ntestlog2\n")
@@ -348,6 +397,16 @@ func TestTruncateThenWrite(t *testing.T) {
348397
operator.poll(context.Background())
349398
sink.ExpectToken(t, []byte("testlog3"))
350399
sink.ExpectNoCalls(t)
400+
401+
// verify that proper logging has taken place
402+
allLogs := observedLogs.All()
403+
foundLog := false
404+
for _, actualLog := range allLogs {
405+
if actualLog.Message == "File has been rotated(truncated)" {
406+
foundLog = true
407+
}
408+
}
409+
assert.True(t, foundLog)
351410
}
352411

353412
// CopyTruncateWriteBoth tests that when a file is copied

0 commit comments

Comments
 (0)