github.com/superfly/nomad@v0.10.5-fly/command/agent/log_file_test.go (about) 1 package agent 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 "time" 9 10 "github.com/hashicorp/logutils" 11 "github.com/stretchr/testify/require" 12 ) 13 14 const ( 15 testFileName = "Nomad.log" 16 testDuration = 2 * time.Second 17 testBytes = 10 18 ) 19 20 func TestLogFile_timeRotation(t *testing.T) { 21 t.Parallel() 22 require := require.New(t) 23 24 tempDir, err := ioutil.TempDir("", "LogWriterTimeTest") 25 require.NoError(err) 26 27 defer os.Remove(tempDir) 28 29 filt := LevelFilter() 30 logFile := logFile{ 31 logFilter: filt, 32 fileName: testFileName, 33 logPath: tempDir, 34 duration: testDuration, 35 } 36 logFile.Write([]byte("Hello World")) 37 time.Sleep(2 * time.Second) 38 logFile.Write([]byte("Second File")) 39 want := 2 40 if got, _ := ioutil.ReadDir(tempDir); len(got) != want { 41 t.Errorf("Expected %d files, got %v file(s)", want, len(got)) 42 } 43 } 44 45 func TestLogFile_openNew(t *testing.T) { 46 t.Parallel() 47 require := require.New(t) 48 49 tempDir, err := ioutil.TempDir("", "LogWriterOpenTest") 50 require.NoError(err) 51 defer os.Remove(tempDir) 52 53 logFile := logFile{fileName: testFileName, logPath: tempDir, duration: testDuration} 54 require.NoError(logFile.openNew()) 55 56 _, err = ioutil.ReadFile(logFile.FileInfo.Name()) 57 require.NoError(err) 58 } 59 60 func TestLogFile_byteRotation(t *testing.T) { 61 t.Parallel() 62 require := require.New(t) 63 64 tempDir, err := ioutil.TempDir("", "LogWriterByteTest") 65 require.NoError(err) 66 defer os.Remove(tempDir) 67 68 filt := LevelFilter() 69 filt.MinLevel = logutils.LogLevel("INFO") 70 logFile := logFile{ 71 logFilter: filt, 72 fileName: testFileName, 73 logPath: tempDir, 74 MaxBytes: testBytes, 75 duration: 24 * time.Hour, 76 } 77 logFile.Write([]byte("Hello World")) 78 logFile.Write([]byte("Second File")) 79 want := 2 80 tempFiles, _ := ioutil.ReadDir(tempDir) 81 require.Equal(want, len(tempFiles)) 82 } 83 84 func TestLogFile_logLevelFiltering(t *testing.T) { 85 t.Parallel() 86 require := require.New(t) 87 88 tempDir, err := ioutil.TempDir("", "LogWriterFilterTest") 89 require.NoError(err) 90 defer os.Remove(tempDir) 91 filt := LevelFilter() 92 logFile := logFile{ 93 logFilter: filt, 94 fileName: testFileName, 95 logPath: tempDir, 96 MaxBytes: testBytes, 97 duration: testDuration, 98 } 99 logFile.Write([]byte("[INFO] This is an info message")) 100 logFile.Write([]byte("[DEBUG] This is a debug message")) 101 logFile.Write([]byte("[ERR] This is an error message")) 102 want := 2 103 tempFiles, _ := ioutil.ReadDir(tempDir) 104 require.Equal(want, len(tempFiles)) 105 } 106 107 func TestLogFile_deleteArchives(t *testing.T) { 108 t.Parallel() 109 require := require.New(t) 110 111 tempDir, err := ioutil.TempDir("", "LogWriterDeleteArchivesTest") 112 require.NoError(err) 113 defer os.Remove(tempDir) 114 115 filt := LevelFilter() 116 filt.MinLevel = logutils.LogLevel("INFO") 117 logFile := logFile{ 118 logFilter: filt, 119 fileName: testFileName, 120 logPath: tempDir, 121 MaxBytes: testBytes, 122 duration: 24 * time.Hour, 123 MaxFiles: 1, 124 } 125 logFile.Write([]byte("[INFO] Hello World")) 126 logFile.Write([]byte("[INFO] Second File")) 127 logFile.Write([]byte("[INFO] Third File")) 128 want := 2 129 tempFiles, _ := ioutil.ReadDir(tempDir) 130 131 require.Equal(want, len(tempFiles)) 132 133 for _, tempFile := range tempFiles { 134 var bytes []byte 135 var err error 136 path := filepath.Join(tempDir, tempFile.Name()) 137 if bytes, err = ioutil.ReadFile(path); err != nil { 138 t.Errorf(err.Error()) 139 return 140 } 141 contents := string(bytes) 142 143 require.NotEqual("[INFO] Hello World", contents, "oldest log should have been deleted") 144 } 145 } 146 147 func TestLogFile_deleteArchivesDisabled(t *testing.T) { 148 t.Parallel() 149 150 require := require.New(t) 151 tempDir, err := ioutil.TempDir("", "LogWriterDeleteArchivesDisabledTest") 152 require.NoError(err) 153 defer os.Remove(tempDir) 154 155 filt := LevelFilter() 156 filt.MinLevel = logutils.LogLevel("INFO") 157 logFile := logFile{ 158 logFilter: filt, 159 fileName: testFileName, 160 logPath: tempDir, 161 MaxBytes: testBytes, 162 duration: 24 * time.Hour, 163 MaxFiles: 0, 164 } 165 logFile.Write([]byte("[INFO] Hello World")) 166 logFile.Write([]byte("[INFO] Second File")) 167 logFile.Write([]byte("[INFO] Third File")) 168 want := 3 169 tempFiles, _ := ioutil.ReadDir(tempDir) 170 require.Equal(want, len(tempFiles)) 171 }