aboutsummaryrefslogtreecommitdiffstats
path: root/ethlog/loggers_test.go
blob: a9b1463e7e9a923d6a94343d1b7d5f361c37da10 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package ethlog

import (
    "fmt"
    "io/ioutil"
    "os"
    "testing"
)

type TestLogSystem struct {
    Output string
    level  LogLevel
}

func (t *TestLogSystem) Println(v ...interface{}) {
    t.Output += fmt.Sprintln(v...)
}

func (t *TestLogSystem) Printf(format string, v ...interface{}) {
    t.Output += fmt.Sprintf(format, v...)
}

func (t *TestLogSystem) SetLogLevel(i LogLevel) {
    t.level = i
}

func (t *TestLogSystem) GetLogLevel() LogLevel {
    return t.level
}

func TestLoggerFlush(t *testing.T) {
    logger := NewLogger("TEST")
    testLogSystem := &TestLogSystem{level: WarnLevel}
    AddLogSystem(testLogSystem)
    for i := 0; i < 5; i++ {
        logger.Errorf(".")
    }
    Flush()
    Reset()
    output := testLogSystem.Output
    if output != "[TEST] .[TEST] .[TEST] .[TEST] .[TEST] ." {
        t.Error("Expected complete logger output '[TEST] .[TEST] .[TEST] .[TEST] .[TEST] .', got ", output)
    }
}

func TestLoggerPrintln(t *testing.T) {
    logger := NewLogger("TEST")
    testLogSystem := &TestLogSystem{level: WarnLevel}
    AddLogSystem(testLogSystem)
    logger.Errorln("error")
    logger.Warnln("warn")
    logger.Infoln("info")
    logger.Debugln("debug")
    Flush()
    Reset()
    output := testLogSystem.Output
    fmt.Println(quote(output))
    if output != "[TEST] error\n[TEST] warn\n" {
        t.Error("Expected logger output '[TEST] error\\n[TEST] warn\\n', got ", output)
    }
}

func TestLoggerPrintf(t *testing.T) {
    logger := NewLogger("TEST")
    testLogSystem := &TestLogSystem{level: WarnLevel}
    AddLogSystem(testLogSystem)
    logger.Errorf("error to %v\n", *testLogSystem)
    logger.Warnf("warn")
    logger.Infof("info")
    logger.Debugf("debug")
    Flush()
    Reset()
    output := testLogSystem.Output
    if output != "[TEST] error to { 2}\n[TEST] warn" {
        t.Error("Expected logger output '[TEST] error to { 2}\\n[TEST] warn', got ", output)
    }
}

func TestMultipleLogSystems(t *testing.T) {
    logger := NewLogger("TEST")
    testLogSystem0 := &TestLogSystem{level: ErrorLevel}
    testLogSystem1 := &TestLogSystem{level: WarnLevel}
    AddLogSystem(testLogSystem0)
    AddLogSystem(testLogSystem1)
    logger.Errorln("error")
    logger.Warnln("warn")
    Flush()
    Reset()
    output0 := testLogSystem0.Output
    output1 := testLogSystem1.Output
    if output0 != "[TEST] error\n" {
        t.Error("Expected logger 0 output '[TEST] error\\n', got ", output0)
    }
    if output1 != "[TEST] error\n[TEST] warn\n" {
        t.Error("Expected logger 1 output '[TEST] error\\n[TEST] warn\\n', got ", output1)
    }
}

func TestFileLogSystem(t *testing.T) {
    logger := NewLogger("TEST")
    filename := "test.log"
    file, _ := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, os.ModePerm)
    testLogSystem := NewStdLogSystem(file, 0, WarnLevel)
    AddLogSystem(testLogSystem)
    logger.Errorf("error to %s\n", filename)
    logger.Warnln("warn")
    Flush()
    contents, _ := ioutil.ReadFile(filename)
    output := string(contents)
    if output != "[TEST] error to test.log\n[TEST] warn\n" {
        t.Error("Expected contents of file 'test.log': '[TEST] error to test.log\\n[TEST] warn\\n', got ", output)
    } else {
        os.Remove(filename)
    }
}

func TestNoLogSystem(t *testing.T) {
    logger := NewLogger("TEST")
    logger.Warnln("warn")
    Flush()
}