package sshlog import ( "io/ioutil" "log" "os" "path/filepath" "strings" "testing" "time" "github.com/sirupsen/logrus" ) const logFileName = "test-logger.log" func createLogger(t *testing.T) *Logger { os.Remove(logFileName) l := logrus.New() logger, err := NewLogger(logFileName, l, time.Millisecond, 1024) if err != nil { t.Fatal("couldn't create the logger!", err) } return logger } func TestWrite(t *testing.T) { testStr := "hi" logger := createLogger(t) defer func() { logger.Close() os.Remove(logFileName) }() logger.Write([]byte(testStr)) time.Sleep(2 * time.Millisecond) data, err := ioutil.ReadFile(logFileName) if err != nil { t.Fatal("couldn't read the log file!", err) } checkStr := string(data) if checkStr != testStr { t.Fatal("file data doesn't match!") } } func TestFilenameRotation(t *testing.T) { newName := rotationName("dir/bob/acoolloggername.log") dir := filepath.Dir(newName) if dir != "dir/bob" { t.Fatal("rotation name doesn't respect the directory filepath:", newName) } filename := filepath.Base(newName) if !strings.HasPrefix(filename, "acoolloggername") { t.Fatal("rotation filename is wrong:", filename) } ext := filepath.Ext(newName) if ext != ".log" { t.Fatal("rotation file extension is wrong:", ext) } } func TestRotation(t *testing.T) { logger := createLogger(t) for i := 0; i < 2000; i++ { logger.Write([]byte("a string for testing rotation\n")) } logger.Close() count := 0 filepath.Walk(".", func(path string, info os.FileInfo, err error) error { if err != nil || info.IsDir() { return nil } if strings.HasPrefix(info.Name(), "test-logger") { log.Println("deleting: ", path) os.Remove(path) count++ } return nil }) if count < 2 { t.Fatal("rotation didn't roll files:", count) } }