
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.
127 lines
3.6 KiB
Go
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()
|
|
}
|