149 lines
4.4 KiB
Go
149 lines
4.4 KiB
Go
package rotate
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFileWriter_NoRotation(t *testing.T) {
|
|
tempDir, err := ioutil.TempDir("", "RotationNo")
|
|
require.NoError(t, err)
|
|
writer, err := NewFileWriter(filepath.Join(tempDir, "test"), 0, 0, 0)
|
|
require.NoError(t, err)
|
|
defer func() { writer.Close(); os.RemoveAll(tempDir) }()
|
|
|
|
_, err = writer.Write([]byte("Hello World"))
|
|
require.NoError(t, err)
|
|
_, err = writer.Write([]byte("Hello World 2"))
|
|
require.NoError(t, err)
|
|
files, _ := ioutil.ReadDir(tempDir)
|
|
assert.Equal(t, 1, len(files))
|
|
}
|
|
|
|
func TestFileWriter_TimeRotation(t *testing.T) {
|
|
tempDir, err := ioutil.TempDir("", "RotationTime")
|
|
require.NoError(t, err)
|
|
interval, _ := time.ParseDuration("1s")
|
|
writer, err := NewFileWriter(filepath.Join(tempDir, "test"), interval, 0, -1)
|
|
require.NoError(t, err)
|
|
defer func() { writer.Close(); os.RemoveAll(tempDir) }()
|
|
|
|
_, err = writer.Write([]byte("Hello World"))
|
|
require.NoError(t, err)
|
|
time.Sleep(1 * time.Second)
|
|
_, err = writer.Write([]byte("Hello World 2"))
|
|
require.NoError(t, err)
|
|
files, _ := ioutil.ReadDir(tempDir)
|
|
assert.Equal(t, 2, len(files))
|
|
}
|
|
|
|
func TestFileWriter_ReopenTimeRotation(t *testing.T) {
|
|
tempDir, err := ioutil.TempDir("", "RotationTime")
|
|
require.NoError(t, err)
|
|
interval, _ := time.ParseDuration("1s")
|
|
filePath := filepath.Join(tempDir, "test.log")
|
|
err = ioutil.WriteFile(filePath, []byte("Hello World"), 0644)
|
|
time.Sleep(1 * time.Second)
|
|
assert.NoError(t, err)
|
|
writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), interval, 0, -1)
|
|
require.NoError(t, err)
|
|
defer func() { writer.Close(); os.RemoveAll(tempDir) }()
|
|
|
|
files, _ := ioutil.ReadDir(tempDir)
|
|
assert.Equal(t, 2, len(files))
|
|
}
|
|
|
|
func TestFileWriter_SizeRotation(t *testing.T) {
|
|
tempDir, err := ioutil.TempDir("", "RotationSize")
|
|
require.NoError(t, err)
|
|
maxSize := int64(9)
|
|
writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), 0, maxSize, -1)
|
|
require.NoError(t, err)
|
|
defer func() { writer.Close(); os.RemoveAll(tempDir) }()
|
|
|
|
_, err = writer.Write([]byte("Hello World"))
|
|
require.NoError(t, err)
|
|
_, err = writer.Write([]byte("World 2"))
|
|
require.NoError(t, err)
|
|
files, _ := ioutil.ReadDir(tempDir)
|
|
assert.Equal(t, 2, len(files))
|
|
}
|
|
|
|
func TestFileWriter_ReopenSizeRotation(t *testing.T) {
|
|
tempDir, err := ioutil.TempDir("", "RotationSize")
|
|
require.NoError(t, err)
|
|
maxSize := int64(12)
|
|
filePath := filepath.Join(tempDir, "test.log")
|
|
err = ioutil.WriteFile(filePath, []byte("Hello World"), 0644)
|
|
assert.NoError(t, err)
|
|
writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), 0, maxSize, -1)
|
|
require.NoError(t, err)
|
|
defer func() { writer.Close(); os.RemoveAll(tempDir) }()
|
|
|
|
_, err = writer.Write([]byte("Hello World Again"))
|
|
require.NoError(t, err)
|
|
files, _ := ioutil.ReadDir(tempDir)
|
|
assert.Equal(t, 2, len(files))
|
|
}
|
|
|
|
func TestFileWriter_DeleteArchives(t *testing.T) {
|
|
tempDir, err := ioutil.TempDir("", "RotationDeleteArchives")
|
|
require.NoError(t, err)
|
|
maxSize := int64(5)
|
|
writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), 0, maxSize, 2)
|
|
require.NoError(t, err)
|
|
defer func() { writer.Close(); os.RemoveAll(tempDir) }()
|
|
|
|
_, err = writer.Write([]byte("First file"))
|
|
require.NoError(t, err)
|
|
// File names include the date with second precision
|
|
// So, to force rotation with different file names
|
|
// we need to wait
|
|
time.Sleep(1 * time.Second)
|
|
_, err = writer.Write([]byte("Second file"))
|
|
require.NoError(t, err)
|
|
time.Sleep(1 * time.Second)
|
|
_, err = writer.Write([]byte("Third file"))
|
|
require.NoError(t, err)
|
|
|
|
files, _ := ioutil.ReadDir(tempDir)
|
|
assert.Equal(t, 3, len(files))
|
|
|
|
for _, tempFile := range files {
|
|
var bytes []byte
|
|
var err error
|
|
path := filepath.Join(tempDir, tempFile.Name())
|
|
if bytes, err = ioutil.ReadFile(path); err != nil {
|
|
t.Error(err.Error())
|
|
return
|
|
}
|
|
contents := string(bytes)
|
|
|
|
if contents != "" && contents != "Second file" && contents != "Third file" {
|
|
t.Error("Should have deleted the eldest log file")
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFileWriter_CloseRotates(t *testing.T) {
|
|
tempDir, err := ioutil.TempDir("", "RotationClose")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(tempDir)
|
|
maxSize := int64(9)
|
|
writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), 0, maxSize, -1)
|
|
require.NoError(t, err)
|
|
|
|
writer.Close()
|
|
|
|
files, _ := ioutil.ReadDir(tempDir)
|
|
assert.Equal(t, 1, len(files))
|
|
assert.Regexp(t, "^test\\.[^\\.]+\\.log$", files[0].Name())
|
|
}
|