mirror of
https://github.com/kemko/nomad.git
synced 2026-01-01 16:05:42 +03:00
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.
149 lines
3.2 KiB
Go
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)
|
|
}
|