github.com/shuguocloud/go-zero@v1.3.0/core/logx/rotatelogger_test.go (about)

     1  package logx
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"syscall"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/shuguocloud/go-zero/core/fs"
    12  )
    13  
    14  func TestDailyRotateRuleMarkRotated(t *testing.T) {
    15  	var rule DailyRotateRule
    16  	rule.MarkRotated()
    17  	assert.Equal(t, getNowDate(), rule.rotatedTime)
    18  }
    19  
    20  func TestDailyRotateRuleOutdatedFiles(t *testing.T) {
    21  	var rule DailyRotateRule
    22  	assert.Empty(t, rule.OutdatedFiles())
    23  	rule.days = 1
    24  	assert.Empty(t, rule.OutdatedFiles())
    25  	rule.gzip = true
    26  	assert.Empty(t, rule.OutdatedFiles())
    27  }
    28  
    29  func TestDailyRotateRuleShallRotate(t *testing.T) {
    30  	var rule DailyRotateRule
    31  	rule.rotatedTime = time.Now().Add(time.Hour * 24).Format(dateFormat)
    32  	assert.True(t, rule.ShallRotate())
    33  }
    34  
    35  func TestRotateLoggerClose(t *testing.T) {
    36  	filename, err := fs.TempFilenameWithText("foo")
    37  	assert.Nil(t, err)
    38  	if len(filename) > 0 {
    39  		defer os.Remove(filename)
    40  	}
    41  	logger, err := NewLogger(filename, new(DailyRotateRule), false)
    42  	assert.Nil(t, err)
    43  	assert.Nil(t, logger.Close())
    44  }
    45  
    46  func TestRotateLoggerGetBackupFilename(t *testing.T) {
    47  	filename, err := fs.TempFilenameWithText("foo")
    48  	assert.Nil(t, err)
    49  	if len(filename) > 0 {
    50  		defer os.Remove(filename)
    51  	}
    52  	logger, err := NewLogger(filename, new(DailyRotateRule), false)
    53  	assert.Nil(t, err)
    54  	assert.True(t, len(logger.getBackupFilename()) > 0)
    55  	logger.backup = ""
    56  	assert.True(t, len(logger.getBackupFilename()) > 0)
    57  }
    58  
    59  func TestRotateLoggerMayCompressFile(t *testing.T) {
    60  	filename, err := fs.TempFilenameWithText("foo")
    61  	assert.Nil(t, err)
    62  	if len(filename) > 0 {
    63  		defer os.Remove(filename)
    64  	}
    65  	logger, err := NewLogger(filename, new(DailyRotateRule), false)
    66  	assert.Nil(t, err)
    67  	logger.maybeCompressFile(filename)
    68  	_, err = os.Stat(filename)
    69  	assert.Nil(t, err)
    70  }
    71  
    72  func TestRotateLoggerMayCompressFileTrue(t *testing.T) {
    73  	filename, err := fs.TempFilenameWithText("foo")
    74  	assert.Nil(t, err)
    75  	logger, err := NewLogger(filename, new(DailyRotateRule), true)
    76  	assert.Nil(t, err)
    77  	if len(filename) > 0 {
    78  		defer func() {
    79  			os.Remove(filename)
    80  			os.Remove(filepath.Base(logger.getBackupFilename()) + ".gz")
    81  		}()
    82  	}
    83  	logger.maybeCompressFile(filename)
    84  	_, err = os.Stat(filename)
    85  	assert.NotNil(t, err)
    86  }
    87  
    88  func TestRotateLoggerRotate(t *testing.T) {
    89  	filename, err := fs.TempFilenameWithText("foo")
    90  	assert.Nil(t, err)
    91  	logger, err := NewLogger(filename, new(DailyRotateRule), true)
    92  	assert.Nil(t, err)
    93  	if len(filename) > 0 {
    94  		defer func() {
    95  			os.Remove(filename)
    96  			os.Remove(logger.getBackupFilename())
    97  			os.Remove(filepath.Base(logger.getBackupFilename()) + ".gz")
    98  		}()
    99  	}
   100  	err = logger.rotate()
   101  	switch v := err.(type) {
   102  	case *os.LinkError:
   103  		// avoid rename error on docker container
   104  		assert.Equal(t, syscall.EXDEV, v.Err)
   105  	default:
   106  		assert.Nil(t, err)
   107  	}
   108  }
   109  
   110  func TestRotateLoggerWrite(t *testing.T) {
   111  	filename, err := fs.TempFilenameWithText("foo")
   112  	assert.Nil(t, err)
   113  	rule := new(DailyRotateRule)
   114  	logger, err := NewLogger(filename, rule, true)
   115  	assert.Nil(t, err)
   116  	if len(filename) > 0 {
   117  		defer func() {
   118  			os.Remove(filename)
   119  			os.Remove(logger.getBackupFilename())
   120  			os.Remove(filepath.Base(logger.getBackupFilename()) + ".gz")
   121  		}()
   122  	}
   123  	logger.write([]byte(`foo`))
   124  	rule.rotatedTime = time.Now().Add(-time.Hour * 24).Format(dateFormat)
   125  	logger.write([]byte(`bar`))
   126  }