2024-02-11 13:50:27 -06:00
|
|
|
package files
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"os"
|
|
|
|
|
"testing"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"codeberg.org/danjones000/my-log/config"
|
|
|
|
|
"codeberg.org/danjones000/my-log/models"
|
|
|
|
|
"github.com/stretchr/testify/suite"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestAppend(t *testing.T) {
|
|
|
|
|
suite.Run(t, new(AppendTestSuite))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type AppendTestSuite struct {
|
|
|
|
|
suite.Suite
|
|
|
|
|
dir string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *AppendTestSuite) SetupSuite() {
|
|
|
|
|
s.dir, _ = os.MkdirTemp("", "append-test")
|
|
|
|
|
config.Overrides["input.path"] = s.dir
|
|
|
|
|
config.Overrides["input.ext"] = "log"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *AppendTestSuite) TearDownSuite() {
|
|
|
|
|
os.RemoveAll(s.dir)
|
|
|
|
|
delete(config.Overrides, "input.path")
|
|
|
|
|
delete(config.Overrides, "input.ext")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *AppendTestSuite) TestSuccess() {
|
2024-03-09 15:38:34 -06:00
|
|
|
defer os.Remove(s.dir + "/test.log")
|
2024-02-11 13:50:27 -06:00
|
|
|
when := time.Now().Local()
|
|
|
|
|
e := models.Entry{
|
|
|
|
|
Title: "Jimmy",
|
|
|
|
|
Date: when,
|
|
|
|
|
Fields: []models.Meta{
|
|
|
|
|
{"foo", 42},
|
|
|
|
|
{"bar", true},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
l := models.Log{
|
|
|
|
|
Name: "test",
|
|
|
|
|
Entries: []models.Entry{e},
|
|
|
|
|
}
|
|
|
|
|
err := Append(l)
|
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
s.Require().FileExists(s.dir + "/test.log")
|
2024-02-11 17:24:50 -06:00
|
|
|
by, err := os.ReadFile(s.dir + "/test.log")
|
|
|
|
|
st := string(by)
|
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
s.Assert().Contains(st, "Jimmy\n")
|
|
|
|
|
s.Assert().Contains(st, "\n@foo 42")
|
|
|
|
|
s.Assert().Contains(st, "\n@bar true")
|
2024-02-11 13:50:27 -06:00
|
|
|
}
|
|
|
|
|
|
2024-03-09 15:38:34 -06:00
|
|
|
func (s *AppendTestSuite) TestTwoEntries() {
|
|
|
|
|
defer os.Remove(s.dir + "/test.log")
|
|
|
|
|
when := time.Now().Local()
|
|
|
|
|
whens := when.Format(models.DateFormat)
|
|
|
|
|
e := []models.Entry{
|
|
|
|
|
{Title: "one", Date: when},
|
|
|
|
|
{Title: "two", Date: when},
|
|
|
|
|
}
|
|
|
|
|
l := models.Log{
|
|
|
|
|
Name: "test",
|
|
|
|
|
Entries: e,
|
|
|
|
|
}
|
|
|
|
|
err := Append(l)
|
|
|
|
|
s.Assert().NoError(err)
|
|
|
|
|
s.Require().FileExists(s.dir + "/test.log")
|
|
|
|
|
by, _ := os.ReadFile(s.dir + "/test.log")
|
|
|
|
|
exp := fmt.Sprintf("@begin %s - one @end\n@begin %s - two @end\n", whens, whens)
|
|
|
|
|
s.Assert().Equal(exp, string(by))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *AppendTestSuite) TestAddNewLine() {
|
|
|
|
|
defer os.Remove(s.dir + "/test.log")
|
|
|
|
|
os.WriteFile(s.dir+"/test.log", []byte("foo"), 0644)
|
|
|
|
|
when := time.Now().Local()
|
|
|
|
|
whens := when.Format(models.DateFormat)
|
|
|
|
|
e := []models.Entry{
|
|
|
|
|
{Title: "one", Date: when},
|
|
|
|
|
}
|
|
|
|
|
l := models.Log{
|
|
|
|
|
Name: "test",
|
|
|
|
|
Entries: e,
|
|
|
|
|
}
|
|
|
|
|
err := Append(l)
|
|
|
|
|
s.Assert().NoError(err)
|
|
|
|
|
s.Require().FileExists(s.dir + "/test.log")
|
|
|
|
|
by, _ := os.ReadFile(s.dir + "/test.log")
|
|
|
|
|
exp := fmt.Sprintf("foo\n@begin %s - one @end\n", whens)
|
|
|
|
|
s.Assert().Equal(exp, string(by))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *AppendTestSuite) TestDontAddNewLine() {
|
|
|
|
|
defer os.Remove(s.dir + "/test.log")
|
|
|
|
|
os.WriteFile(s.dir+"/test.log", []byte("foo\n"), 0644)
|
|
|
|
|
when := time.Now().Local()
|
|
|
|
|
whens := when.Format(models.DateFormat)
|
|
|
|
|
e := []models.Entry{
|
|
|
|
|
{Title: "one", Date: when},
|
|
|
|
|
}
|
|
|
|
|
l := models.Log{
|
|
|
|
|
Name: "test",
|
|
|
|
|
Entries: e,
|
|
|
|
|
}
|
|
|
|
|
err := Append(l)
|
|
|
|
|
s.Assert().NoError(err)
|
|
|
|
|
s.Require().FileExists(s.dir + "/test.log")
|
|
|
|
|
by, _ := os.ReadFile(s.dir + "/test.log")
|
|
|
|
|
exp := fmt.Sprintf("foo\n@begin %s - one @end\n", whens)
|
|
|
|
|
s.Assert().Equal(exp, string(by))
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-07 21:50:51 -06:00
|
|
|
func (s *AppendTestSuite) TestFailEntry() {
|
2024-03-09 15:38:34 -06:00
|
|
|
defer os.Remove(s.dir + "/test.log")
|
2024-03-07 21:50:51 -06:00
|
|
|
e := models.Entry{
|
|
|
|
|
Title: "Jimmy",
|
|
|
|
|
}
|
|
|
|
|
l := models.Log{
|
|
|
|
|
Name: "test",
|
|
|
|
|
Entries: []models.Entry{e},
|
|
|
|
|
}
|
|
|
|
|
err := Append(l)
|
|
|
|
|
s.Assert().NoError(err)
|
|
|
|
|
s.Require().FileExists(s.dir + "/test.log")
|
|
|
|
|
by, _ := os.ReadFile(s.dir + "/test.log")
|
|
|
|
|
s.Assert().Equal([]byte{}, by)
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-26 19:30:32 -06:00
|
|
|
func (s *AppendTestSuite) TestDotFolder() {
|
|
|
|
|
config.Overrides["input.dotFolder"] = "true"
|
|
|
|
|
e := models.Entry{
|
|
|
|
|
Title: "something",
|
|
|
|
|
Date: time.Now(),
|
|
|
|
|
}
|
|
|
|
|
l := models.Log{
|
|
|
|
|
Name: "sub.test",
|
|
|
|
|
Entries: []models.Entry{e},
|
|
|
|
|
}
|
|
|
|
|
err := Append(l)
|
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
s.Require().FileExists(s.dir + "/sub/test.log")
|
|
|
|
|
by, err := os.ReadFile(s.dir + "/sub/test.log")
|
|
|
|
|
st := string(by)
|
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
s.Assert().Contains(st, "something @end")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *AppendTestSuite) TestDotFolderNo() {
|
|
|
|
|
config.Overrides["input.dotFolder"] = "false"
|
|
|
|
|
e := models.Entry{
|
|
|
|
|
Title: "another",
|
|
|
|
|
Date: time.Now(),
|
|
|
|
|
}
|
|
|
|
|
l := models.Log{
|
|
|
|
|
Name: "sub.test",
|
|
|
|
|
Entries: []models.Entry{e},
|
|
|
|
|
}
|
|
|
|
|
err := Append(l)
|
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
s.Require().FileExists(s.dir + "/sub.test.log")
|
|
|
|
|
by, err := os.ReadFile(s.dir + "/sub.test.log")
|
|
|
|
|
st := string(by)
|
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
s.Assert().Contains(st, "another @end")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *AppendTestSuite) TestNoExt() {
|
|
|
|
|
config.Overrides["input.ext"] = ""
|
|
|
|
|
defer func() {
|
|
|
|
|
config.Overrides["input.ext"] = "log"
|
|
|
|
|
}()
|
|
|
|
|
e := models.Entry{
|
|
|
|
|
Title: "baz",
|
|
|
|
|
Date: time.Now(),
|
|
|
|
|
}
|
|
|
|
|
l := models.Log{
|
|
|
|
|
Name: "foobar",
|
|
|
|
|
Entries: []models.Entry{e},
|
|
|
|
|
}
|
|
|
|
|
err := Append(l)
|
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
s.Require().FileExists(s.dir + "/foobar")
|
|
|
|
|
by, err := os.ReadFile(s.dir + "/foobar")
|
|
|
|
|
st := string(by)
|
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
s.Assert().Contains(st, "baz @end")
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-11 13:50:27 -06:00
|
|
|
func (s *AppendTestSuite) TestConfLoadErr() {
|
|
|
|
|
currConf := config.ConfigPath
|
|
|
|
|
tmp, _ := os.CreateTemp("", "app-conf-*.toml")
|
|
|
|
|
fname := tmp.Name()
|
|
|
|
|
defer tmp.Close()
|
|
|
|
|
defer os.Remove(fname)
|
|
|
|
|
fmt.Fprintln(tmp, `{"not":"toml"}`)
|
|
|
|
|
config.ConfigPath = fname
|
|
|
|
|
defer func(path string) {
|
|
|
|
|
config.ConfigPath = path
|
|
|
|
|
}(currConf)
|
|
|
|
|
err := Append(models.Log{})
|
|
|
|
|
s.Assert().ErrorContains(err, "toml")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *AppendTestSuite) TestMkdirErr() {
|
|
|
|
|
// Don't run this test as root
|
2024-10-09 15:08:37 -05:00
|
|
|
config.Overrides["input.path"] = "/var/my-logs-test"
|
2024-02-11 13:50:27 -06:00
|
|
|
defer func(path string) {
|
|
|
|
|
config.Overrides["input.path"] = path
|
|
|
|
|
}(s.dir)
|
|
|
|
|
err := Append(models.Log{})
|
|
|
|
|
s.Assert().ErrorContains(err, "permission denied")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *AppendTestSuite) TestOpenErr() {
|
|
|
|
|
l := models.Log{
|
|
|
|
|
Name: "test-open-err",
|
|
|
|
|
}
|
|
|
|
|
fname := s.dir + "/test-open-err.log"
|
|
|
|
|
os.MkdirAll(s.dir, 0750)
|
|
|
|
|
f, _ := os.Create(fname)
|
|
|
|
|
f.Close()
|
|
|
|
|
os.Chmod(fname, 0400) // read only
|
|
|
|
|
err := Append(l)
|
|
|
|
|
s.Assert().ErrorContains(err, "permission denied")
|
|
|
|
|
}
|