github.com/sereiner/library@v0.0.0-20200518095232-1fa3e640cc5f/log/appender.file_test.go (about)

     1  package log
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"os"
     8  
     9  	"bufio"
    10  
    11  	"io"
    12  
    13  	"strings"
    14  
    15  	"github.com/sereiner/library/file"
    16  )
    17  
    18  // TestNewFailAppender 测试构建一个日志输出对象appender
    19  func TestNewFailAppender(t *testing.T) {
    20  	// 创建日志输出对象,创建文件成功
    21  	path := "../logs/test.log"
    22  	layout := &Appender{Type: "file", Level: "All"}
    23  	_, err := NewFileAppender(path, layout)
    24  	if err != nil {
    25  		t.Errorf("test fail:%v", err)
    26  	}
    27  
    28  	// 创建日志输出对象,创建文件失败
    29  	path = "/root/test.log"
    30  	layout = &Appender{Type: "file", Level: "All"}
    31  	_, err = NewFileAppender(path, layout)
    32  	if err == nil {
    33  		t.Error("test fail")
    34  	}
    35  }
    36  
    37  // TestWrite 测试写日志到buffer
    38  func TestWrite(t *testing.T) {
    39  	path := "../logs/test.log"
    40  	layout := &Appender{Type: "file", Level: "All"}
    41  	f, err := NewFileAppender(path, layout)
    42  	if err != nil {
    43  		t.Errorf("test fail:%v", err)
    44  	}
    45  
    46  	event := &LogEvent{Level: "All", Output: "output"}
    47  	f.Write(event)
    48  
    49  	// 不能写日志
    50  	f.Level = GetLevel("Off")
    51  	f.Write(event)
    52  }
    53  
    54  // TestWriteToFileAndReadCheck 测试写入buffer的内容和最后在文件中读取到的内容是否一致
    55  func TestWriteToFileAndReadCheck(tx *testing.T) {
    56  	// 写入文件中
    57  	t, err := time.Parse("2006/01/02 15:04:05", "2016/11/28 16:38:27")
    58  	if err != nil {
    59  		tx.Errorf("test fail, %+v", err)
    60  	}
    61  	path := "../logs/20161128.log"
    62  	// layout := &Appender{Type: "file", Level: "All", Path: path}
    63  	layout := &Appender{Type: "file", Level: "All"}
    64  	fa, err := NewFileAppender(path, layout)
    65  	if err != nil {
    66  		tx.Errorf("test fail:%v", err)
    67  	}
    68  
    69  	events := []*LogEvent{
    70  		&LogEvent{Level: "Debug", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output1"},
    71  		&LogEvent{Level: "Debug", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output2"},
    72  		&LogEvent{Level: "Info", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output3"},
    73  		&LogEvent{Level: "Fatal", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output4"},
    74  		&LogEvent{Level: "Error", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output5"},
    75  		&LogEvent{Level: "Error", Now: t, Name: "test", Session: "12345678", Content: "content", Output: "output6"},
    76  	}
    77  	for _, event := range events {
    78  		fa.Write(event)
    79  	}
    80  	fa.Close()
    81  
    82  	// 读取文件,进行校验
    83  	filePath, _ := file.GetAbs(path)
    84  	f, err := os.Open(filePath)
    85  	if err != nil {
    86  		tx.Errorf("test fail:%v", err)
    87  	}
    88  	defer f.Close()
    89  	rd := bufio.NewReader(f)
    90  	for {
    91  		line, err := rd.ReadString('\n')
    92  		if err != nil || io.EOF == err {
    93  			tx.Errorf("test fail: %v", err)
    94  			break
    95  		}
    96  		if strings.Contains(line, "output1output2output3output4output5output6") {
    97  			tx.Log("test success!")
    98  			break
    99  		}
   100  	}
   101  
   102  	// 删除文件
   103  	f.Close()
   104  	err = os.Remove(filePath)
   105  	if err != nil {
   106  		tx.Errorf("test fail:%v", err)
   107  	}
   108  }