flamenco/internal/manager/task_logs/log_rotation_test.go
Sybren A. Stüvel a9bec98fcd Fix linter warnings
Fix most linter warnings reported by 'staticcheck'. This doesn't fix all
of them, some unused functions are still there, and some generated code
also still triggers some warnings. Most issues are fixed, though.

No functional changes, except for the captialisation of some error
messages.
2024-12-01 14:49:25 +01:00

127 lines
3.6 KiB
Go

package task_logs
// SPDX-License-Identifier: GPL-3.0-or-later
import (
"errors"
"io/fs"
"os"
"path/filepath"
"testing"
"github.com/rs/zerolog"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func setUpTest(t *testing.T) string {
temppath, err := os.MkdirTemp("", "testlogs")
require.NoError(t, err)
return temppath
}
func tearDownTest(temppath string) {
os.RemoveAll(temppath)
}
func TestCreateNumberedPath(t *testing.T) {
temppath := setUpTest(t)
defer tearDownTest(temppath)
numtest := func(path string, number int, basepath string) {
result := createNumberedPath(path)
assert.Equal(t, numberedPath{path, number, basepath}, result)
}
numtest("", -1, "")
numtest(" ", -1, " ")
numtest("jemoeder.1", 1, "jemoeder")
numtest("jemoeder.", -1, "jemoeder.")
numtest("jemoeder", -1, "jemoeder")
numtest("jemoeder.abc", -1, "jemoeder.abc")
numtest("jemoeder.-4", -4, "jemoeder")
numtest("jemoeder.1.2.3", 3, "jemoeder.1.2")
numtest("jemoeder.001", 1, "jemoeder")
numtest("jemoeder.01", 1, "jemoeder")
numtest("jemoeder.010", 10, "jemoeder")
numtest("jemoeder 47 42.327", 327, "jemoeder 47 42")
numtest("/path/üničøde.327/.47", 47, "/path/üničøde.327/")
numtest("üničøde.327.what?", -1, "üničøde.327.what?")
}
func TestNoFiles(t *testing.T) {
temppath := setUpTest(t)
defer tearDownTest(temppath)
filepath := filepath.Join(temppath, "nonexisting.txt")
err := rotateLogFile(zerolog.Nop(), filepath)
require.NoError(t, err)
assert.False(t, fileExists(filepath))
}
func TestOneFile(t *testing.T) {
temppath := setUpTest(t)
defer tearDownTest(temppath)
filepath := filepath.Join(temppath, "existing.txt")
fileTouch(filepath)
err := rotateLogFile(zerolog.Nop(), filepath)
require.NoError(t, err)
assert.False(t, fileExists(filepath))
assert.True(t, fileExists(filepath+".1"))
}
func TestMultipleFilesWithHoles(t *testing.T) {
temppath := setUpTest(t)
defer tearDownTest(temppath)
filepath := filepath.Join(temppath, "existing.txt")
require.NoError(t, os.WriteFile(filepath, []byte("thefile"), 0666))
require.NoError(t, os.WriteFile(filepath+".1", []byte("file .1"), 0666))
require.NoError(t, os.WriteFile(filepath+".2", []byte("file .2"), 0666))
require.NoError(t, os.WriteFile(filepath+".3", []byte("file .3"), 0666))
require.NoError(t, os.WriteFile(filepath+".5", []byte("file .5"), 0666))
require.NoError(t, os.WriteFile(filepath+".7", []byte("file .7"), 0666))
err := rotateLogFile(zerolog.Nop(), filepath)
require.NoError(t, err)
assert.False(t, fileExists(filepath))
assert.True(t, fileExists(filepath+".1"))
assert.True(t, fileExists(filepath+".2"))
assert.True(t, fileExists(filepath+".3"))
assert.True(t, fileExists(filepath+".4"))
assert.False(t, fileExists(filepath+".5"))
assert.True(t, fileExists(filepath+".6"))
assert.False(t, fileExists(filepath+".7"))
assert.True(t, fileExists(filepath+".8"))
assert.False(t, fileExists(filepath+".9"))
read := func(filename string) string {
content, err := os.ReadFile(filename)
require.NoError(t, err)
return string(content)
}
assert.Equal(t, "thefile", read(filepath+".1"))
assert.Equal(t, "file .1", read(filepath+".2"))
assert.Equal(t, "file .2", read(filepath+".3"))
assert.Equal(t, "file .3", read(filepath+".4"))
assert.Equal(t, "file .5", read(filepath+".6"))
assert.Equal(t, "file .7", read(filepath+".8"))
}
func fileExists(filename string) bool {
_, err := os.Stat(filename)
return !errors.Is(err, fs.ErrNotExist)
}
func fileTouch(filename string) {
file, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_RDONLY, 0666)
if err != nil {
panic(err.Error())
}
file.Close()
}