github.com/ranjib/nomad@v0.1.1-0.20160225204057-97751b02f70b/client/driver/logging/rotator_test.go (about) 1 package logging 2 3 import ( 4 "io/ioutil" 5 "log" 6 "os" 7 "path/filepath" 8 "testing" 9 "time" 10 ) 11 12 var ( 13 logger = log.New(os.Stdout, "", log.LstdFlags) 14 pathPrefix = "logrotator" 15 baseFileName = "redis.stdout" 16 ) 17 18 func TestFileRotator_IncorrectPath(t *testing.T) { 19 if _, err := NewFileRotator("/foo", baseFileName, 10, 10, logger); err == nil { 20 t.Fatalf("expected error") 21 } 22 } 23 24 func TestFileRotator_CreateNewFile(t *testing.T) { 25 var path string 26 var err error 27 if path, err = ioutil.TempDir("", pathPrefix); err != nil { 28 t.Fatalf("test setup err: %v", err) 29 } 30 defer os.RemoveAll(path) 31 32 _, err = NewFileRotator(path, baseFileName, 10, 10, logger) 33 if err != nil { 34 t.Fatalf("test setup err: %v", err) 35 } 36 37 if _, err := os.Stat(filepath.Join(path, "redis.stdout.0")); err != nil { 38 t.Fatalf("expected file") 39 } 40 } 41 42 func TestFileRotator_OpenLastFile(t *testing.T) { 43 var path string 44 var err error 45 if path, err = ioutil.TempDir("", pathPrefix); err != nil { 46 t.Fatalf("test setup err: %v", err) 47 } 48 defer os.RemoveAll(path) 49 50 fname1 := filepath.Join(path, "redis.stdout.0") 51 fname2 := filepath.Join(path, "redis.stdout.2") 52 if _, err := os.Create(fname1); err != nil { 53 t.Fatalf("test setup failure: %v", err) 54 } 55 if _, err := os.Create(fname2); err != nil { 56 t.Fatalf("test setup failure: %v", err) 57 } 58 59 fr, err := NewFileRotator(path, baseFileName, 10, 10, logger) 60 if err != nil { 61 t.Fatalf("test setup err: %v", err) 62 } 63 64 if fr.currentFile.Name() != fname2 { 65 t.Fatalf("expected current file: %v, got: %v", fname2, fr.currentFile.Name()) 66 } 67 } 68 69 func TestFileRotator_WriteToCurrentFile(t *testing.T) { 70 var path string 71 var err error 72 if path, err = ioutil.TempDir("", pathPrefix); err != nil { 73 t.Fatalf("test setup err: %v", err) 74 } 75 defer os.RemoveAll(path) 76 77 fname1 := filepath.Join(path, "redis.stdout.0") 78 if _, err := os.Create(fname1); err != nil { 79 t.Fatalf("test setup failure: %v", err) 80 } 81 82 fr, err := NewFileRotator(path, baseFileName, 10, 5, logger) 83 if err != nil { 84 t.Fatalf("test setup err: %v", err) 85 } 86 87 fr.Write([]byte("abcde")) 88 time.Sleep(200 * time.Millisecond) 89 fi, err := os.Stat(fname1) 90 if err != nil { 91 t.Fatalf("error getting the file info: %v", err) 92 } 93 if fi.Size() != 5 { 94 t.Fatalf("expected size: %v, actual: %v", 5, fi.Size()) 95 } 96 } 97 98 func TestFileRotator_RotateFiles(t *testing.T) { 99 var path string 100 var err error 101 if path, err = ioutil.TempDir("", pathPrefix); err != nil { 102 t.Fatalf("test setup err: %v", err) 103 } 104 defer os.RemoveAll(path) 105 106 fr, err := NewFileRotator(path, baseFileName, 10, 5, logger) 107 if err != nil { 108 t.Fatalf("test setup err: %v", err) 109 } 110 111 str := "abcdefgh" 112 nw, err := fr.Write([]byte(str)) 113 time.Sleep(200 * time.Millisecond) 114 if err != nil { 115 t.Fatalf("got error while writing: %v", err) 116 } 117 if nw != len(str) { 118 t.Fatalf("expected %v, got %v", len(str), nw) 119 } 120 fname1 := filepath.Join(path, "redis.stdout.0") 121 fi, err := os.Stat(fname1) 122 if err != nil { 123 t.Fatalf("error getting the file info: %v", err) 124 } 125 if fi.Size() != 5 { 126 t.Fatalf("expected size: %v, actual: %v", 5, fi.Size()) 127 } 128 129 fname2 := filepath.Join(path, "redis.stdout.1") 130 if _, err := os.Stat(fname2); err != nil { 131 t.Fatalf("expected file %v to exist", fname2) 132 } 133 134 if fi2, err := os.Stat(fname2); err == nil { 135 if fi2.Size() != 3 { 136 t.Fatalf("expected size: %v, actual: %v", 3, fi2.Size()) 137 } 138 } else { 139 t.Fatalf("error getting the file info: %v", err) 140 } 141 } 142 143 func TestFileRotator_WriteRemaining(t *testing.T) { 144 var path string 145 var err error 146 if path, err = ioutil.TempDir("", pathPrefix); err != nil { 147 t.Fatalf("test setup err: %v", err) 148 } 149 defer os.RemoveAll(path) 150 151 fname1 := filepath.Join(path, "redis.stdout.0") 152 if f, err := os.Create(fname1); err == nil { 153 f.Write([]byte("abcd")) 154 } else { 155 t.Fatalf("test setup failure: %v", err) 156 } 157 158 fr, err := NewFileRotator(path, baseFileName, 10, 5, logger) 159 if err != nil { 160 t.Fatalf("test setup err: %v", err) 161 } 162 163 str := "efghijkl" 164 nw, err := fr.Write([]byte(str)) 165 if err != nil { 166 t.Fatalf("got error while writing: %v", err) 167 } 168 time.Sleep(200 * time.Millisecond) 169 if nw != len(str) { 170 t.Fatalf("expected %v, got %v", len(str), nw) 171 } 172 fi, err := os.Stat(fname1) 173 if err != nil { 174 t.Fatalf("error getting the file info: %v", err) 175 } 176 if fi.Size() != 5 { 177 t.Fatalf("expected size: %v, actual: %v", 5, fi.Size()) 178 } 179 180 fname2 := filepath.Join(path, "redis.stdout.1") 181 if _, err := os.Stat(fname2); err != nil { 182 t.Fatalf("expected file %v to exist", fname2) 183 } 184 185 if fi2, err := os.Stat(fname2); err == nil { 186 if fi2.Size() != 5 { 187 t.Fatalf("expected size: %v, actual: %v", 5, fi2.Size()) 188 } 189 } else { 190 t.Fatalf("error getting the file info: %v", err) 191 } 192 193 fname3 := filepath.Join(path, "redis.stdout.2") 194 if _, err := os.Stat(fname3); err != nil { 195 t.Fatalf("expected file %v to exist", fname3) 196 } 197 198 if fi3, err := os.Stat(fname3); err == nil { 199 if fi3.Size() != 2 { 200 t.Fatalf("expected size: %v, actual: %v", 2, fi3.Size()) 201 } 202 } else { 203 t.Fatalf("error getting the file info: %v", err) 204 } 205 206 } 207 208 func TestFileRotator_PurgeOldFiles(t *testing.T) { 209 var path string 210 var err error 211 if path, err = ioutil.TempDir("", pathPrefix); err != nil { 212 t.Fatalf("test setup err: %v", err) 213 } 214 defer os.RemoveAll(path) 215 216 fr, err := NewFileRotator(path, baseFileName, 2, 2, logger) 217 if err != nil { 218 t.Fatalf("test setup err: %v", err) 219 } 220 221 str := "abcdeghijklmn" 222 nw, err := fr.Write([]byte(str)) 223 if err != nil { 224 t.Fatalf("got error while writing: %v", err) 225 } 226 if nw != len(str) { 227 t.Fatalf("expected %v, got %v", len(str), nw) 228 } 229 230 time.Sleep(1 * time.Second) 231 f, err := ioutil.ReadDir(path) 232 if err != nil { 233 t.Fatalf("test error: %v", err) 234 } 235 236 if len(f) != 2 { 237 t.Fatalf("expected number of files: %v, got: %v", 2, len(f)) 238 } 239 }