158 lines
4.1 KiB
Go
158 lines
4.1 KiB
Go
|
// Copyright (c) HashiCorp, Inc.
|
||
|
// SPDX-License-Identifier: MPL-2.0
|
||
|
|
||
|
package logging
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"sort"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestLogFile_openNew(t *testing.T) {
|
||
|
logFile := &LogFile{
|
||
|
fileName: "vault.log",
|
||
|
logPath: t.TempDir(),
|
||
|
duration: defaultRotateDuration,
|
||
|
}
|
||
|
|
||
|
err := logFile.openNew()
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
msg := "[INFO] Something"
|
||
|
_, err = logFile.Write([]byte(msg))
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
content, err := os.ReadFile(logFile.fileInfo.Name())
|
||
|
require.NoError(t, err)
|
||
|
require.Contains(t, string(content), msg)
|
||
|
}
|
||
|
|
||
|
func TestLogFile_Rotation_MaxDuration(t *testing.T) {
|
||
|
if testing.Short() {
|
||
|
t.Skip("too slow for testing.Short")
|
||
|
}
|
||
|
|
||
|
tempDir := t.TempDir()
|
||
|
logFile := LogFile{
|
||
|
fileName: "vault.log",
|
||
|
logPath: tempDir,
|
||
|
duration: 50 * time.Millisecond,
|
||
|
}
|
||
|
|
||
|
_, err := logFile.Write([]byte("Hello World"))
|
||
|
assert.NoError(t, err, "error writing rotation max duration part 1")
|
||
|
|
||
|
time.Sleep(3 * logFile.duration)
|
||
|
|
||
|
_, err = logFile.Write([]byte("Second File"))
|
||
|
assert.NoError(t, err, "error writing rotation max duration part 2")
|
||
|
|
||
|
require.Len(t, listDir(t, tempDir), 2)
|
||
|
}
|
||
|
|
||
|
func TestLogFile_Rotation_MaxBytes(t *testing.T) {
|
||
|
tempDir := t.TempDir()
|
||
|
logFile := LogFile{
|
||
|
fileName: "somefile.log",
|
||
|
logPath: tempDir,
|
||
|
maxBytes: 10,
|
||
|
duration: defaultRotateDuration,
|
||
|
}
|
||
|
_, err := logFile.Write([]byte("Hello World"))
|
||
|
assert.NoError(t, err, "error writing rotation max bytes part 1")
|
||
|
|
||
|
_, err = logFile.Write([]byte("Second File"))
|
||
|
assert.NoError(t, err, "error writing rotation max bytes part 2")
|
||
|
|
||
|
require.Len(t, listDir(t, tempDir), 2)
|
||
|
}
|
||
|
|
||
|
func TestLogFile_PruneFiles(t *testing.T) {
|
||
|
tempDir := t.TempDir()
|
||
|
logFile := LogFile{
|
||
|
fileName: "vault.log",
|
||
|
logPath: tempDir,
|
||
|
maxBytes: 10,
|
||
|
duration: defaultRotateDuration,
|
||
|
maxArchivedFiles: 1,
|
||
|
}
|
||
|
_, err := logFile.Write([]byte("[INFO] Hello World"))
|
||
|
assert.NoError(t, err, "error writing during prune files test part 1")
|
||
|
|
||
|
_, err = logFile.Write([]byte("[INFO] Second File"))
|
||
|
assert.NoError(t, err, "error writing during prune files test part 1")
|
||
|
|
||
|
_, err = logFile.Write([]byte("[INFO] Third File"))
|
||
|
assert.NoError(t, err, "error writing during prune files test part 1")
|
||
|
|
||
|
logFiles := listDir(t, tempDir)
|
||
|
sort.Strings(logFiles)
|
||
|
require.Len(t, logFiles, 2)
|
||
|
|
||
|
content, err := os.ReadFile(filepath.Join(tempDir, logFiles[0]))
|
||
|
require.NoError(t, err)
|
||
|
require.Contains(t, string(content), "Second File")
|
||
|
|
||
|
content, err = os.ReadFile(filepath.Join(tempDir, logFiles[1]))
|
||
|
require.NoError(t, err)
|
||
|
require.Contains(t, string(content), "Third File")
|
||
|
}
|
||
|
|
||
|
func TestLogFile_PruneFiles_Disabled(t *testing.T) {
|
||
|
tempDir := t.TempDir()
|
||
|
logFile := LogFile{
|
||
|
fileName: "somename.log",
|
||
|
logPath: tempDir,
|
||
|
maxBytes: 10,
|
||
|
duration: defaultRotateDuration,
|
||
|
maxArchivedFiles: 0,
|
||
|
}
|
||
|
|
||
|
_, err := logFile.Write([]byte("[INFO] Hello World"))
|
||
|
assert.NoError(t, err, "error writing during prune files - disabled test part 1")
|
||
|
|
||
|
_, err = logFile.Write([]byte("[INFO] Second File"))
|
||
|
assert.NoError(t, err, "error writing during prune files - disabled test part 2")
|
||
|
|
||
|
_, err = logFile.Write([]byte("[INFO] Third File"))
|
||
|
assert.NoError(t, err, "error writing during prune files - disabled test part 3")
|
||
|
|
||
|
require.Len(t, listDir(t, tempDir), 3)
|
||
|
}
|
||
|
|
||
|
func TestLogFile_FileRotation_Disabled(t *testing.T) {
|
||
|
tempDir := t.TempDir()
|
||
|
logFile := LogFile{
|
||
|
fileName: "vault.log",
|
||
|
logPath: tempDir,
|
||
|
maxBytes: 10,
|
||
|
maxArchivedFiles: -1,
|
||
|
}
|
||
|
|
||
|
_, err := logFile.Write([]byte("[INFO] Hello World"))
|
||
|
assert.NoError(t, err, "error writing during rotation disabled test part 1")
|
||
|
|
||
|
_, err = logFile.Write([]byte("[INFO] Second File"))
|
||
|
assert.NoError(t, err, "error writing during rotation disabled test part 2")
|
||
|
|
||
|
_, err = logFile.Write([]byte("[INFO] Third File"))
|
||
|
assert.NoError(t, err, "error writing during rotation disabled test part 3")
|
||
|
|
||
|
require.Len(t, listDir(t, tempDir), 1)
|
||
|
}
|
||
|
|
||
|
func listDir(t *testing.T, name string) []string {
|
||
|
t.Helper()
|
||
|
fh, err := os.Open(name)
|
||
|
require.NoError(t, err)
|
||
|
files, err := fh.Readdirnames(100)
|
||
|
require.NoError(t, err)
|
||
|
return files
|
||
|
}
|