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  }