github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/ngaut/log/log_test.go (about) 1 package log 2 3 import ( 4 "bufio" 5 "fmt" 6 "io" 7 "os" 8 "strings" 9 "testing" 10 "time" 11 ) 12 13 func isFileExists(name string) bool { 14 f, err := os.Stat(name) 15 if err != nil { 16 if os.IsNotExist(err) { 17 return false 18 } 19 } 20 21 if f.IsDir() { 22 return false 23 } 24 25 return true 26 } 27 28 func parseDate(value string, format string) (time.Time, error) { 29 tt, err := time.ParseInLocation(format, value, time.Local) 30 if err != nil { 31 fmt.Println("[Error]" + err.Error()) 32 return tt, err 33 } 34 35 return tt, nil 36 } 37 38 func checkLogData(fileName string, containData string, num int64) error { 39 input, err := os.OpenFile(fileName, os.O_RDONLY, 0) 40 if err != nil { 41 return err 42 } 43 defer input.Close() 44 45 var lineNum int64 46 br := bufio.NewReader(input) 47 for { 48 line, err := br.ReadString('\n') 49 if err == io.EOF { 50 break 51 } 52 53 realLine := strings.TrimRight(line, "\n") 54 if strings.Contains(realLine, containData) { 55 lineNum += 1 56 } 57 } 58 59 // check whether num is equal to lineNum 60 if lineNum != num { 61 return fmt.Errorf("checkLogData fail - %d vs %d", lineNum, num) 62 } 63 64 return nil 65 } 66 67 func TestDayRotateCase(t *testing.T) { 68 _log = New() 69 70 logName := "example_day_test.log" 71 if isFileExists(logName) { 72 err := os.Remove(logName) 73 if err != nil { 74 t.Errorf("Remove old log file fail - %s, %s\n", err.Error(), logName) 75 } 76 } 77 78 SetRotateByDay() 79 err := SetOutputByName(logName) 80 if err != nil { 81 t.Errorf("SetOutputByName fail - %s, %s\n", err.Error(), logName) 82 } 83 84 if _log.logSuffix == "" { 85 t.Errorf("bad log suffix fail - %s\n", _log.logSuffix) 86 } 87 88 day, err := parseDate(_log.logSuffix, FORMAT_TIME_DAY) 89 if err != nil { 90 t.Errorf("parseDate fail - %s, %s\n", err.Error(), _log.logSuffix) 91 } 92 93 _log.Info("Test data") 94 _log.Infof("Test data - %s", day.String()) 95 96 // mock log suffix to check rotate 97 lastDay := day.AddDate(0, 0, -1) 98 _log.logSuffix = genDayTime(lastDay) 99 oldLogSuffix := _log.logSuffix 100 101 _log.Info("Test new data") 102 _log.Infof("Test new data - %s", day.String()) 103 104 err = _log.fd.Close() 105 if err != nil { 106 t.Errorf("close log fd fail - %s, %s\n", err.Error(), _log.fileName) 107 } 108 109 // check both old and new log file datas 110 oldLogName := logName + "." + oldLogSuffix 111 err = checkLogData(oldLogName, "Test data", 2) 112 if err != nil { 113 t.Errorf("old log file checkLogData fail - %s, %s\n", err.Error(), oldLogName) 114 } 115 116 err = checkLogData(logName, "Test new data", 2) 117 if err != nil { 118 t.Errorf("new log file checkLogData fail - %s, %s\n", err.Error(), logName) 119 } 120 121 // remove test log files 122 err = os.Remove(oldLogName) 123 if err != nil { 124 t.Errorf("Remove final old log file fail - %s, %s\n", err.Error(), oldLogName) 125 } 126 127 err = os.Remove(logName) 128 if err != nil { 129 t.Errorf("Remove final new log file fail - %s, %s\n", err.Error(), logName) 130 } 131 } 132 133 func TestHourRotateCase(t *testing.T) { 134 _log = New() 135 136 logName := "example_hour_test.log" 137 if isFileExists(logName) { 138 err := os.Remove(logName) 139 if err != nil { 140 t.Errorf("Remove old log file fail - %s, %s\n", err.Error(), logName) 141 } 142 } 143 144 SetRotateByHour() 145 err := SetOutputByName(logName) 146 if err != nil { 147 t.Errorf("SetOutputByName fail - %s, %s\n", err.Error(), logName) 148 } 149 150 if _log.logSuffix == "" { 151 t.Errorf("bad log suffix fail - %s\n", _log.logSuffix) 152 } 153 154 hour, err := parseDate(_log.logSuffix, FORMAT_TIME_HOUR) 155 if err != nil { 156 t.Errorf("parseDate fail - %s, %s\n", err.Error(), _log.logSuffix) 157 } 158 159 _log.Info("Test data") 160 _log.Infof("Test data - %s", hour.String()) 161 162 // mock log suffix to check rotate 163 lastHour := hour.Add(time.Duration(-1 * time.Hour)) 164 _log.logSuffix = genHourTime(lastHour) 165 oldLogSuffix := _log.logSuffix 166 167 _log.Info("Test new data") 168 _log.Infof("Test new data - %s", hour.String()) 169 170 err = _log.fd.Close() 171 if err != nil { 172 t.Errorf("close log fd fail - %s, %s\n", err.Error(), _log.fileName) 173 } 174 175 // check both old and new log file datas 176 oldLogName := logName + "." + oldLogSuffix 177 err = checkLogData(oldLogName, "Test data", 2) 178 if err != nil { 179 t.Errorf("old log file checkLogData fail - %s, %s\n", err.Error(), oldLogName) 180 } 181 182 err = checkLogData(logName, "Test new data", 2) 183 if err != nil { 184 t.Errorf("new log file checkLogData fail - %s, %s\n", err.Error(), logName) 185 } 186 187 // remove test log files 188 err = os.Remove(oldLogName) 189 if err != nil { 190 t.Errorf("Remove final old log file fail - %s, %s\n", err.Error(), oldLogName) 191 } 192 193 err = os.Remove(logName) 194 if err != nil { 195 t.Errorf("Remove final new log file fail - %s, %s\n", err.Error(), logName) 196 } 197 }