gopkg.in/essentialkaos/ek.v3@v3.5.1/log/log_test.go (about)

     1  package log
     2  
     3  // ////////////////////////////////////////////////////////////////////////////////// //
     4  //                                                                                    //
     5  //                     Copyright (c) 2009-2016 Essential Kaos                         //
     6  //      Essential Kaos Open Source License <http://essentialkaos.com/ekol?en>         //
     7  //                                                                                    //
     8  // ////////////////////////////////////////////////////////////////////////////////// //
     9  
    10  import (
    11  	"io/ioutil"
    12  	"os"
    13  	"strings"
    14  	"testing"
    15  	"time"
    16  
    17  	. "pkg.re/check.v1"
    18  
    19  	"pkg.re/essentialkaos/ek.v3/fsutil"
    20  )
    21  
    22  // ////////////////////////////////////////////////////////////////////////////////// //
    23  
    24  type LogSuite struct {
    25  	TempDir string
    26  }
    27  
    28  // ////////////////////////////////////////////////////////////////////////////////// //
    29  
    30  func Test(t *testing.T) { TestingT(t) }
    31  
    32  // ////////////////////////////////////////////////////////////////////////////////// //
    33  
    34  var _ = Suite(&LogSuite{})
    35  
    36  // ////////////////////////////////////////////////////////////////////////////////// //
    37  
    38  func (ls *LogSuite) SetUpSuite(c *C) {
    39  	ls.TempDir = c.MkDir()
    40  }
    41  
    42  func (ls *LogSuite) SetUpTest(c *C) {
    43  	Global = &Logger{
    44  		PrefixWarn:  true,
    45  		PrefixError: true,
    46  		PrefixCrit:  true,
    47  
    48  		level: INFO,
    49  	}
    50  }
    51  
    52  // ////////////////////////////////////////////////////////////////////////////////// //
    53  
    54  func (ls *LogSuite) TestErrors(c *C) {
    55  	var l *Logger
    56  
    57  	l.MinLevel(DEBUG)
    58  
    59  	err := l.Flush()
    60  
    61  	c.Assert(err, NotNil)
    62  	c.Assert(err.Error(), Equals, "Logger is nil")
    63  
    64  	err = l.Reopen()
    65  
    66  	c.Assert(err, NotNil)
    67  	c.Assert(err.Error(), Equals, "Logger is nil")
    68  
    69  	_, err = l.Print(DEBUG, "test")
    70  
    71  	c.Assert(err, NotNil)
    72  	c.Assert(err.Error(), Equals, "Logger is nil")
    73  
    74  	_, err = l.Debug("test")
    75  
    76  	c.Assert(err, NotNil)
    77  	c.Assert(err.Error(), Equals, "Logger is nil")
    78  
    79  	_, err = l.Info("test")
    80  
    81  	c.Assert(err, NotNil)
    82  	c.Assert(err.Error(), Equals, "Logger is nil")
    83  
    84  	_, err = l.Warn("test")
    85  
    86  	c.Assert(err, NotNil)
    87  	c.Assert(err.Error(), Equals, "Logger is nil")
    88  
    89  	_, err = l.Error("test")
    90  
    91  	c.Assert(err, NotNil)
    92  	c.Assert(err.Error(), Equals, "Logger is nil")
    93  
    94  	_, err = l.Crit("test")
    95  
    96  	c.Assert(err, NotNil)
    97  	c.Assert(err.Error(), Equals, "Logger is nil")
    98  
    99  	_, err = l.Aux("test")
   100  
   101  	c.Assert(err, NotNil)
   102  	c.Assert(err.Error(), Equals, "Logger is nil")
   103  
   104  	_, err = New("/_not_exist_", 0644)
   105  
   106  	c.Assert(err, NotNil)
   107  	c.Assert(err.Error(), Equals, "open /_not_exist_: permission denied")
   108  
   109  	err = Reopen()
   110  
   111  	c.Assert(err, NotNil)
   112  	c.Assert(err.Error(), Equals, "Output file is not set")
   113  }
   114  
   115  func (ls *LogSuite) TestLevel(c *C) {
   116  	l := &Logger{level: WARN}
   117  
   118  	c.Assert(l.MinLevel(-1), IsNil)
   119  	c.Assert(l.MinLevel(6), IsNil)
   120  	c.Assert(l.MinLevel("debug"), IsNil)
   121  	c.Assert(l.MinLevel("info"), IsNil)
   122  	c.Assert(l.MinLevel("warn"), IsNil)
   123  	c.Assert(l.MinLevel("warning"), IsNil)
   124  	c.Assert(l.MinLevel("error"), IsNil)
   125  	c.Assert(l.MinLevel("crit"), IsNil)
   126  	c.Assert(l.MinLevel("critical"), IsNil)
   127  	c.Assert(l.MinLevel(int8(1)), IsNil)
   128  	c.Assert(l.MinLevel(int16(1)), IsNil)
   129  	c.Assert(l.MinLevel(int32(1)), IsNil)
   130  	c.Assert(l.MinLevel(int64(1)), IsNil)
   131  	c.Assert(l.MinLevel(uint(1)), IsNil)
   132  	c.Assert(l.MinLevel(uint8(1)), IsNil)
   133  	c.Assert(l.MinLevel(uint16(1)), IsNil)
   134  	c.Assert(l.MinLevel(uint32(1)), IsNil)
   135  	c.Assert(l.MinLevel(uint64(1)), IsNil)
   136  	c.Assert(l.MinLevel(float32(1)), IsNil)
   137  	c.Assert(l.MinLevel(float64(1)), IsNil)
   138  
   139  	c.Assert(l.MinLevel("abcd"), NotNil)
   140  	c.Assert(l.MinLevel(time.Now()), NotNil)
   141  
   142  	l.MinLevel("crit")
   143  
   144  	_, err := l.Print(ERROR, "error")
   145  
   146  	c.Assert(err, IsNil)
   147  }
   148  
   149  func (ls *LogSuite) TestFlush(c *C) {
   150  	l := &Logger{}
   151  
   152  	err := l.Flush()
   153  
   154  	c.Assert(err, IsNil)
   155  }
   156  
   157  func (ls *LogSuite) TestReopenAndSet(c *C) {
   158  	l, err := New(ls.TempDir+"/set-test.log", 0644)
   159  
   160  	c.Assert(err, IsNil)
   161  
   162  	err = l.Set(ls.TempDir+"/set-test-2.log", 0644)
   163  
   164  	c.Assert(err, IsNil)
   165  
   166  	err = l.Reopen()
   167  
   168  	c.Assert(err, IsNil)
   169  }
   170  
   171  func (ls *LogSuite) TestStdOutput(c *C) {
   172  	var err error
   173  
   174  	l := &Logger{}
   175  
   176  	_, err = l.Print(INFO, "info")
   177  
   178  	c.Assert(err, IsNil)
   179  
   180  	_, err = l.Print(ERROR, "error")
   181  
   182  	c.Assert(err, IsNil)
   183  }
   184  
   185  func (ls *LogSuite) TestWithoutPrefixes(c *C) {
   186  	logfile := ls.TempDir + "/file1.log"
   187  	l, err := New(logfile, 0644)
   188  
   189  	l.MinLevel(DEBUG)
   190  
   191  	c.Assert(l, Not(IsNil))
   192  	c.Assert(err, IsNil)
   193  
   194  	l.PrefixDebug = false
   195  	l.PrefixInfo = false
   196  	l.PrefixWarn = false
   197  	l.PrefixError = false
   198  	l.PrefixCrit = false
   199  
   200  	c.Assert(fsutil.GetPerm(logfile), Equals, os.FileMode(0644))
   201  
   202  	l.Print(DEBUG, "Test debug %d", DEBUG)
   203  	l.Print(INFO, "Test info %d", INFO)
   204  	l.Print(WARN, "Test warn %d", WARN)
   205  	l.Print(ERROR, "Test error %d", ERROR)
   206  	l.Print(CRIT, "Test crit %d", CRIT)
   207  
   208  	l.Print(DEBUG, "Test debug")
   209  	l.Print(INFO, "Test info")
   210  	l.Print(WARN, "Test warn")
   211  	l.Print(ERROR, "Test error")
   212  	l.Print(CRIT, "Test crit")
   213  
   214  	l.Debug("Test debug %d\n", DEBUG)
   215  	l.Info("Test info %d\n", INFO)
   216  	l.Warn("Test warn %d\n", WARN)
   217  	l.Error("Test error %d\n", ERROR)
   218  	l.Crit("Test crit %d\n", CRIT)
   219  
   220  	l.Print(DEBUG, "")
   221  
   222  	data, err := ioutil.ReadFile(logfile)
   223  
   224  	c.Assert(len(data), Not(Equals), 0)
   225  	c.Assert(err, IsNil)
   226  
   227  	dataSlice := strings.Split(string(data[:]), "\n")
   228  
   229  	c.Assert(len(dataSlice), Equals, 17)
   230  
   231  	c.Assert(dataSlice[0][28:], Equals, "Test debug 0")
   232  	c.Assert(dataSlice[1][28:], Equals, "Test info 1")
   233  	c.Assert(dataSlice[2][28:], Equals, "Test warn 2")
   234  	c.Assert(dataSlice[3][28:], Equals, "Test error 3")
   235  	c.Assert(dataSlice[4][28:], Equals, "Test crit 4")
   236  
   237  	c.Assert(dataSlice[5][28:], Equals, "Test debug")
   238  	c.Assert(dataSlice[6][28:], Equals, "Test info")
   239  	c.Assert(dataSlice[7][28:], Equals, "Test warn")
   240  	c.Assert(dataSlice[8][28:], Equals, "Test error")
   241  	c.Assert(dataSlice[9][28:], Equals, "Test crit")
   242  
   243  	c.Assert(dataSlice[10][28:], Equals, "Test debug 0")
   244  	c.Assert(dataSlice[11][28:], Equals, "Test info 1")
   245  	c.Assert(dataSlice[12][28:], Equals, "Test warn 2")
   246  	c.Assert(dataSlice[13][28:], Equals, "Test error 3")
   247  	c.Assert(dataSlice[14][28:], Equals, "Test crit 4")
   248  
   249  	c.Assert(dataSlice[15][28:], Equals, "")
   250  }
   251  
   252  func (ls *LogSuite) TestWithPrefixes(c *C) {
   253  	logfile := ls.TempDir + "/file2.log"
   254  	err := Set(logfile, 0644)
   255  
   256  	MinLevel(DEBUG)
   257  
   258  	c.Assert(Global, Not(IsNil))
   259  	c.Assert(err, IsNil)
   260  
   261  	Global.PrefixDebug = true
   262  	Global.PrefixInfo = true
   263  	Global.PrefixWarn = true
   264  	Global.PrefixError = true
   265  	Global.PrefixCrit = true
   266  
   267  	c.Assert(fsutil.GetPerm(logfile), Equals, os.FileMode(0644))
   268  
   269  	Print(DEBUG, "Test debug %d", DEBUG)
   270  	Print(INFO, "Test info %d", INFO)
   271  	Print(WARN, "Test warn %d", WARN)
   272  	Print(ERROR, "Test error %d", ERROR)
   273  	Print(CRIT, "Test crit %d", CRIT)
   274  	Print(AUX, "Test aux %d", AUX)
   275  
   276  	Print(DEBUG, "Test debug")
   277  	Print(INFO, "Test info")
   278  	Print(WARN, "Test warn")
   279  	Print(ERROR, "Test error")
   280  	Print(CRIT, "Test crit")
   281  	Print(AUX, "Test aux")
   282  
   283  	Debug("Test debug %d", DEBUG)
   284  	Info("Test info %d", INFO)
   285  	Warn("Test warn %d", WARN)
   286  	Error("Test error %d", ERROR)
   287  	Crit("Test crit %d", CRIT)
   288  	Aux("Test aux %d", AUX)
   289  
   290  	data, err := ioutil.ReadFile(logfile)
   291  
   292  	c.Assert(len(data), Not(Equals), 0)
   293  	c.Assert(err, IsNil)
   294  
   295  	dataSlice := strings.Split(string(data[:]), "\n")
   296  
   297  	c.Assert(len(dataSlice), Equals, 19)
   298  
   299  	c.Assert(dataSlice[0][28:], Equals, "[DEBUG] Test debug 0")
   300  	c.Assert(dataSlice[1][28:], Equals, "[INFO] Test info 1")
   301  	c.Assert(dataSlice[2][28:], Equals, "[WARNING] Test warn 2")
   302  	c.Assert(dataSlice[3][28:], Equals, "[ERROR] Test error 3")
   303  	c.Assert(dataSlice[4][28:], Equals, "[CRITICAL] Test crit 4")
   304  	c.Assert(dataSlice[5][28:], Equals, "Test aux 99")
   305  
   306  	c.Assert(dataSlice[6][28:], Equals, "[DEBUG] Test debug")
   307  	c.Assert(dataSlice[7][28:], Equals, "[INFO] Test info")
   308  	c.Assert(dataSlice[8][28:], Equals, "[WARNING] Test warn")
   309  	c.Assert(dataSlice[9][28:], Equals, "[ERROR] Test error")
   310  	c.Assert(dataSlice[10][28:], Equals, "[CRITICAL] Test crit")
   311  	c.Assert(dataSlice[11][28:], Equals, "Test aux")
   312  
   313  	c.Assert(dataSlice[12][28:], Equals, "[DEBUG] Test debug 0")
   314  	c.Assert(dataSlice[13][28:], Equals, "[INFO] Test info 1")
   315  	c.Assert(dataSlice[14][28:], Equals, "[WARNING] Test warn 2")
   316  	c.Assert(dataSlice[15][28:], Equals, "[ERROR] Test error 3")
   317  	c.Assert(dataSlice[16][28:], Equals, "[CRITICAL] Test crit 4")
   318  	c.Assert(dataSlice[17][28:], Equals, "Test aux 99")
   319  }
   320  
   321  func (ls *LogSuite) TestBufIODaemon(c *C) {
   322  	logfile := ls.TempDir + "/file3.log"
   323  	err := Set(logfile, 0644)
   324  
   325  	MinLevel(DEBUG)
   326  
   327  	c.Assert(Global, Not(IsNil))
   328  	c.Assert(err, IsNil)
   329  
   330  	Global.PrefixDebug = true
   331  	Global.PrefixInfo = true
   332  	Global.PrefixWarn = true
   333  	Global.PrefixError = true
   334  	Global.PrefixCrit = true
   335  
   336  	c.Assert(fsutil.GetPerm(logfile), Equals, os.FileMode(0644))
   337  
   338  	EnableBufIO(250 * time.Millisecond)
   339  
   340  	Print(DEBUG, "Test debug %d", DEBUG)
   341  	Print(INFO, "Test info %d", INFO)
   342  	Print(WARN, "Test warn %d", WARN)
   343  	Print(ERROR, "Test error %d", ERROR)
   344  	Print(CRIT, "Test crit %d", CRIT)
   345  	Print(AUX, "Test aux %d", AUX)
   346  
   347  	Print(DEBUG, "Test debug")
   348  	Print(INFO, "Test info")
   349  	Print(WARN, "Test warn")
   350  	Print(ERROR, "Test error")
   351  	Print(CRIT, "Test crit")
   352  	Print(AUX, "Test aux")
   353  
   354  	Debug("Test debug %d", DEBUG)
   355  	Info("Test info %d", INFO)
   356  	Warn("Test warn %d", WARN)
   357  	Error("Test error %d", ERROR)
   358  	Crit("Test crit %d", CRIT)
   359  	Aux("Test aux %d", AUX)
   360  
   361  	c.Assert(fsutil.GetSize(logfile), Equals, int64(0))
   362  
   363  	time.Sleep(2 * time.Second)
   364  
   365  	c.Assert(fsutil.GetSize(logfile), Not(Equals), int64(0))
   366  
   367  	data, err := ioutil.ReadFile(logfile)
   368  
   369  	c.Assert(len(data), Not(Equals), 0)
   370  	c.Assert(err, IsNil)
   371  
   372  	dataSlice := strings.Split(string(data[:]), "\n")
   373  
   374  	c.Assert(len(dataSlice), Equals, 19)
   375  
   376  	c.Assert(dataSlice[0][28:], Equals, "[DEBUG] Test debug 0")
   377  	c.Assert(dataSlice[1][28:], Equals, "[INFO] Test info 1")
   378  	c.Assert(dataSlice[2][28:], Equals, "[WARNING] Test warn 2")
   379  	c.Assert(dataSlice[3][28:], Equals, "[ERROR] Test error 3")
   380  	c.Assert(dataSlice[4][28:], Equals, "[CRITICAL] Test crit 4")
   381  	c.Assert(dataSlice[5][28:], Equals, "Test aux 99")
   382  
   383  	c.Assert(dataSlice[6][28:], Equals, "[DEBUG] Test debug")
   384  	c.Assert(dataSlice[7][28:], Equals, "[INFO] Test info")
   385  	c.Assert(dataSlice[8][28:], Equals, "[WARNING] Test warn")
   386  	c.Assert(dataSlice[9][28:], Equals, "[ERROR] Test error")
   387  	c.Assert(dataSlice[10][28:], Equals, "[CRITICAL] Test crit")
   388  	c.Assert(dataSlice[11][28:], Equals, "Test aux")
   389  
   390  	c.Assert(dataSlice[12][28:], Equals, "[DEBUG] Test debug 0")
   391  	c.Assert(dataSlice[13][28:], Equals, "[INFO] Test info 1")
   392  	c.Assert(dataSlice[14][28:], Equals, "[WARNING] Test warn 2")
   393  	c.Assert(dataSlice[15][28:], Equals, "[ERROR] Test error 3")
   394  	c.Assert(dataSlice[16][28:], Equals, "[CRITICAL] Test crit 4")
   395  	c.Assert(dataSlice[17][28:], Equals, "Test aux 99")
   396  }
   397  
   398  func (ls *LogSuite) TestBufIO(c *C) {
   399  	logfile := ls.TempDir + "/file4.log"
   400  	err := Set(logfile, 0644)
   401  
   402  	c.Assert(Global, Not(IsNil))
   403  	c.Assert(err, IsNil)
   404  
   405  	c.Assert(fsutil.GetPerm(logfile), Equals, os.FileMode(0644))
   406  
   407  	EnableBufIO(time.Minute)
   408  
   409  	Aux("Test aux %d", AUX)
   410  
   411  	fileSize := fsutil.GetSize(logfile)
   412  
   413  	c.Assert(fileSize, Equals, int64(0))
   414  
   415  	Reopen()
   416  
   417  	fileSize = fsutil.GetSize(logfile)
   418  
   419  	c.Assert(fileSize, Not(Equals), int64(0))
   420  
   421  	Aux("Test aux %d", AUX)
   422  
   423  	c.Assert(fsutil.GetSize(logfile), Equals, fileSize)
   424  
   425  	Flush()
   426  
   427  	c.Assert(fsutil.GetSize(logfile), Not(Equals), fileSize)
   428  }