Files
nomad/command/agent/log_file_test.go
James Rasell 753f752cdd agent: remove unused log filter and unrequired library. (#24873)
The Nomad agent used a log filter to ensure logs were written at
the expected level. Since the use of hclog this is not required,
as hclog acts as the gate keeper and filter for logging. All log
writers accept messages from hclog which has already done the
filtering.
2025-01-17 07:51:27 +00:00

149 lines
3.2 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package agent
import (
"os"
"path/filepath"
"testing"
"time"
"github.com/hashicorp/nomad/ci"
"github.com/shoenig/test/must"
)
const (
testFileName = "Nomad.log"
testDuration = 2 * time.Second
testBytes = 10
)
func TestLogFile_timeRotation(t *testing.T) {
ci.Parallel(t)
tempDir := t.TempDir()
logFile := logFile{
fileName: testFileName,
logPath: tempDir,
duration: testDuration,
}
_, err := logFile.Write([]byte("Hello World"))
must.NoError(t, err)
time.Sleep(2 * time.Second)
_, err = logFile.Write([]byte("Second File"))
must.NoError(t, err)
numEntries, err := os.ReadDir(tempDir)
must.NoError(t, err)
must.Len(t, 2, numEntries)
}
func TestLogFile_openNew(t *testing.T) {
ci.Parallel(t)
tempDir := t.TempDir()
logFile := logFile{
fileName: testFileName,
logPath: tempDir,
MaxBytes: testBytes,
duration: 24 * time.Hour,
}
must.NoError(t, logFile.openNew())
_, err := os.ReadFile(logFile.FileInfo.Name())
must.NoError(t, err)
must.Eq(t, logFile.FileInfo.Name(), filepath.Join(tempDir, testFileName))
// Check if create time and bytes written are kept when opening the active
// log file again.
bytesWritten, err := logFile.Write([]byte("test"))
must.NoError(t, err)
time.Sleep(2 * time.Second)
must.NoError(t, err)
timeDelta := time.Now().Sub(logFile.LastCreated)
must.Greater(t, 2*time.Second, timeDelta)
must.Eq(t, logFile.BytesWritten, int64(bytesWritten))
}
func TestLogFile_byteRotation(t *testing.T) {
ci.Parallel(t)
tempDir := t.TempDir()
logFile := logFile{
fileName: testFileName,
logPath: tempDir,
MaxBytes: testBytes,
duration: 24 * time.Hour,
}
_, err := logFile.Write([]byte("Hello World"))
must.NoError(t, err)
_, err = logFile.Write([]byte("Second File"))
must.NoError(t, err)
tempFiles, err := os.ReadDir(tempDir)
must.NoError(t, err)
must.Len(t, 2, tempFiles)
}
func TestLogFile_deleteArchives(t *testing.T) {
ci.Parallel(t)
tempDir := t.TempDir()
logFile := logFile{
fileName: testFileName,
logPath: tempDir,
MaxBytes: testBytes,
duration: 24 * time.Hour,
MaxFiles: 1,
}
_, err := logFile.Write([]byte("[INFO] Hello World"))
must.NoError(t, err)
_, err = logFile.Write([]byte("[INFO] Second File"))
must.NoError(t, err)
_, err = logFile.Write([]byte("[INFO] Third File"))
must.NoError(t, err)
tempFiles, err := os.ReadDir(tempDir)
must.NoError(t, err)
must.Len(t, 2, tempFiles)
for _, tempFile := range tempFiles {
bytes, err := os.ReadFile(filepath.Join(tempDir, tempFile.Name()))
must.NoError(t, err)
must.StrNotEqFold(t, "[INFO] Hello World", string(bytes))
}
}
func TestLogFile_deleteArchivesDisabled(t *testing.T) {
ci.Parallel(t)
tempDir := t.TempDir()
logFile := logFile{
fileName: testFileName,
logPath: tempDir,
MaxBytes: testBytes,
duration: 24 * time.Hour,
MaxFiles: 0,
}
_, err := logFile.Write([]byte("[INFO] Hello World"))
must.NoError(t, err)
_, err = logFile.Write([]byte("[INFO] Second File"))
must.NoError(t, err)
_, err = logFile.Write([]byte("[INFO] Third File"))
must.NoError(t, err)
tempFiles, err := os.ReadDir(tempDir)
must.NoError(t, err)
must.Len(t, 3, tempFiles)
}