rclone/vendor/github.com/pengsrc/go-shared/logger/logger_test.go

218 lines
5.5 KiB
Go

package logger
import (
"fmt"
"io/ioutil"
"os"
"path"
"strings"
"syscall"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestCheckLevel(t *testing.T) {
assert.NoError(t, CheckLevel("warn"))
assert.Error(t, CheckLevel("invalid"))
}
func TestSetAndGetLevel(t *testing.T) {
l, err := NewTerminalLogger()
assert.NoError(t, err)
l.SetLevel("error")
assert.Equal(t, "error", l.GetLevel())
}
func TestNewFileLogger(t *testing.T) {
logFile := "/tmp/logger-test/test.log"
dir := path.Dir(logFile)
err := os.MkdirAll(dir, 0775)
assert.NoError(t, err)
defer os.RemoveAll(dir)
l, err := NewFileLogger(logFile, "debug")
assert.NoError(t, err)
l.Debug("file - debug")
l.Info("file - info")
l.Warn("file - warn")
l.Error("file - error")
log, err := ioutil.ReadFile(logFile)
assert.NoError(t, err)
assert.Equal(t, 5, len(strings.Split(string(log), "\n")))
// Move log file.
movedLogFile := fmt.Sprintf(`%s.move`, logFile)
os.Rename(logFile, movedLogFile)
l.Error("file - error")
log, err = ioutil.ReadFile(movedLogFile)
assert.NoError(t, err)
assert.Equal(t, 6, len(strings.Split(string(log), "\n")))
// Reopen.
syscall.Kill(syscall.Getpid(), syscall.SIGHUP)
time.Sleep(10 * time.Millisecond)
l.Warn("file - warn")
l.Error("file - error")
log, err = ioutil.ReadFile(logFile)
assert.NoError(t, err)
assert.Equal(t, 3, len(strings.Split(string(log), "\n")))
}
func TestNewFileLoggerWithWf(t *testing.T) {
logFile := "/tmp/logger-test/test.log"
errLogFile := "/tmp/logger-test/test.log.wf"
dir := path.Dir(logFile)
err := os.MkdirAll(dir, 0775)
assert.NoError(t, err)
defer os.RemoveAll(dir)
l, err := NewFileLoggerWithErr(logFile, errLogFile, "debug")
assert.NoError(t, err)
l.Debug("file - debug")
l.Info("file - info")
l.Warn("file - warn")
l.Error("file - error")
log, err := ioutil.ReadFile(logFile)
assert.NoError(t, err)
assert.Equal(t, 5, len(strings.Split(string(log), "\n")))
errLog, err := ioutil.ReadFile(errLogFile)
assert.NoError(t, err)
assert.Equal(t, 3, len(strings.Split(string(errLog), "\n")))
// Move log file.
movedLogFile := fmt.Sprintf(`%s.move`, logFile)
os.Rename(logFile, movedLogFile)
movedErrLogFile := fmt.Sprintf(`%s.move`, errLogFile)
os.Rename(errLogFile, movedErrLogFile)
l.Error("file - error")
log, err = ioutil.ReadFile(movedLogFile)
assert.NoError(t, err)
assert.Equal(t, 6, len(strings.Split(string(log), "\n")))
errLog, err = ioutil.ReadFile(movedErrLogFile)
assert.NoError(t, err)
assert.Equal(t, 4, len(strings.Split(string(errLog), "\n")))
// Reopen.
syscall.Kill(syscall.Getpid(), syscall.SIGHUP)
time.Sleep(10 * time.Millisecond)
l.Warn("file - warn")
l.Error("file - error")
log, err = ioutil.ReadFile(logFile)
assert.NoError(t, err)
assert.Equal(t, 3, len(strings.Split(string(log), "\n")))
errLog, err = ioutil.ReadFile(errLogFile)
assert.NoError(t, err)
assert.Equal(t, 3, len(strings.Split(string(errLog), "\n")))
}
func TestBufferedFileLogger(t *testing.T) {
logFile := "/tmp/logger-test/test.log"
dir := path.Dir(logFile)
err := os.MkdirAll(dir, 0775)
assert.NoError(t, err)
defer os.RemoveAll(dir)
l, err := NewBufferedFileLogger(logFile, "debug")
assert.NoError(t, err)
l.Debug("file - debug")
l.Info("file - info")
l.Warn("file - warn")
l.Error("file - error")
log, err := ioutil.ReadFile(logFile)
assert.NoError(t, err)
assert.Equal(t, 1, len(strings.Split(string(log), "\n")))
// Wait timeout.
//time.Sleep(10*time.Second + 10*time.Millisecond)
//
//log, err = ioutil.ReadFile(logFile)
//assert.NoError(t, err)
//assert.Equal(t, 5, len(strings.Split(string(log), "\n")))
}
func TestBufferedFileLoggerWithErr(t *testing.T) {
logFile := "/tmp/logger-test/test.log"
errLogFile := "/tmp/logger-test/test.log.wf"
dir := path.Dir(logFile)
err := os.MkdirAll(dir, 0775)
assert.NoError(t, err)
defer os.RemoveAll(dir)
errL, err := NewBufferedFileLoggerWithErr(logFile, errLogFile, "debug")
assert.NoError(t, err)
errL.Debug("file - debug")
errL.Info("file - info")
errL.Warn("file - warn")
errL.Error("file - error")
log, err := ioutil.ReadFile(logFile)
assert.NoError(t, err)
assert.Equal(t, 1, len(strings.Split(string(log), "\n")))
errLog, err := ioutil.ReadFile(errLogFile)
assert.NoError(t, err)
assert.Equal(t, 1, len(strings.Split(string(errLog), "\n")))
// Wait timeout.
//time.Sleep(10*time.Second + 10*time.Millisecond)
//
//log, err = ioutil.ReadFile(logFile)
//assert.NoError(t, err)
//assert.Equal(t, 5, len(strings.Split(string(log), "\n")))
//
//errLog, err = ioutil.ReadFile(errLogFile)
//assert.NoError(t, err)
//assert.Equal(t, 3, len(strings.Split(string(errLog), "\n")))
}
func TestTerminalLogger(t *testing.T) {
l, err := NewTerminalLogger("debug")
assert.NoError(t, err)
l.Debug("terminal - debug")
l.Info("terminal - info")
l.Warn("terminal - warn")
l.Error("terminal - error")
l.Debugf("terminal - debug - %d", time.Now().Unix())
l.Infof("terminal - info - %d", time.Now().Unix())
l.Warnf("terminal - warn - %d", time.Now().Unix())
l.Errorf("terminal - error - %d", time.Now().Unix())
}
func TestTerminalLoggerWithErr(t *testing.T) {
errL, err := NewTerminalLoggerWithErr("debug")
assert.NoError(t, err)
errL.Debug("terminal - debug - err")
errL.Info("terminal - info - err")
errL.Warn("terminal - warn - err")
errL.Error("terminal - error - err")
errL.Debugf("terminal - debug - err - %d", time.Now().Unix())
errL.Infof("terminal - info - err - %d", time.Now().Unix())
errL.Warnf("terminal - warn - err - %d", time.Now().Unix())
errL.Errorf("terminal - error - err - %d", time.Now().Unix())
}