1package logging 2 3import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "sort" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/require" 12 13 "github.com/hashicorp/consul/sdk/testutil" 14) 15 16func TestLogFile_Rotation_MaxDuration(t *testing.T) { 17 if testing.Short() { 18 t.Skip("too slow for testing.Short") 19 } 20 21 tempDir := testutil.TempDir(t, "") 22 logFile := LogFile{ 23 fileName: "consul.log", 24 logPath: tempDir, 25 duration: 50 * time.Millisecond, 26 } 27 28 logFile.Write([]byte("Hello World")) 29 time.Sleep(3 * logFile.duration) 30 logFile.Write([]byte("Second File")) 31 require.Len(t, listDir(t, tempDir), 2) 32} 33 34func TestLogFile_openNew(t *testing.T) { 35 logFile := LogFile{ 36 fileName: "consul.log", 37 logPath: testutil.TempDir(t, ""), 38 duration: defaultRotateDuration, 39 } 40 err := logFile.openNew() 41 require.NoError(t, err) 42 43 msg := "[INFO] Something" 44 _, err = logFile.Write([]byte(msg)) 45 require.NoError(t, err) 46 47 content, err := ioutil.ReadFile(logFile.FileInfo.Name()) 48 require.NoError(t, err) 49 require.Contains(t, string(content), msg) 50} 51 52func TestLogFile_Rotation_MaxBytes(t *testing.T) { 53 tempDir := testutil.TempDir(t, "LogWriterBytes") 54 logFile := LogFile{ 55 fileName: "somefile.log", 56 logPath: tempDir, 57 MaxBytes: 10, 58 duration: defaultRotateDuration, 59 } 60 logFile.Write([]byte("Hello World")) 61 logFile.Write([]byte("Second File")) 62 require.Len(t, listDir(t, tempDir), 2) 63} 64 65func TestLogFile_PruneFiles(t *testing.T) { 66 tempDir := testutil.TempDir(t, t.Name()) 67 logFile := LogFile{ 68 fileName: "consul.log", 69 logPath: tempDir, 70 MaxBytes: 10, 71 duration: defaultRotateDuration, 72 MaxFiles: 1, 73 } 74 logFile.Write([]byte("[INFO] Hello World")) 75 logFile.Write([]byte("[INFO] Second File")) 76 logFile.Write([]byte("[INFO] Third File")) 77 78 logFiles := listDir(t, tempDir) 79 sort.Strings(logFiles) 80 require.Len(t, logFiles, 2) 81 82 content, err := ioutil.ReadFile(filepath.Join(tempDir, logFiles[0])) 83 require.NoError(t, err) 84 require.Contains(t, string(content), "Second File") 85 86 content, err = ioutil.ReadFile(filepath.Join(tempDir, logFiles[1])) 87 require.NoError(t, err) 88 require.Contains(t, string(content), "Third File") 89} 90 91func TestLogFile_PruneFiles_Disabled(t *testing.T) { 92 tempDir := testutil.TempDir(t, t.Name()) 93 logFile := LogFile{ 94 fileName: "somename.log", 95 logPath: tempDir, 96 MaxBytes: 10, 97 duration: defaultRotateDuration, 98 MaxFiles: 0, 99 } 100 logFile.Write([]byte("[INFO] Hello World")) 101 logFile.Write([]byte("[INFO] Second File")) 102 logFile.Write([]byte("[INFO] Third File")) 103 require.Len(t, listDir(t, tempDir), 3) 104} 105 106func TestLogFile_FileRotation_Disabled(t *testing.T) { 107 tempDir := testutil.TempDir(t, t.Name()) 108 logFile := LogFile{ 109 fileName: "consul.log", 110 logPath: tempDir, 111 MaxBytes: 10, 112 MaxFiles: -1, 113 } 114 logFile.Write([]byte("[INFO] Hello World")) 115 logFile.Write([]byte("[INFO] Second File")) 116 logFile.Write([]byte("[INFO] Third File")) 117 require.Len(t, listDir(t, tempDir), 1) 118} 119 120func listDir(t *testing.T, name string) []string { 121 t.Helper() 122 fh, err := os.Open(name) 123 require.NoError(t, err) 124 files, err := fh.Readdirnames(100) 125 require.NoError(t, err) 126 return files 127} 128