forked from algorand/go-algorand
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog_test.go
112 lines (85 loc) · 3.45 KB
/
log_test.go
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
// Copyright (C) 2019-2021 Algorand, Inc.
// This file is part of go-algorand
//
// go-algorand is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// go-algorand is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with go-algorand. If not, see <https://www.gnu.org/licenses/>.
package logging
import (
"bytes"
"encoding/json"
"testing"
"github.com/algorand/go-algorand/test/partitiontest"
"github.com/stretchr/testify/require"
)
/*
Since most of the functions are pure wrappers, we don't test them and trust the logrus testing coverage.
Things to test -
TestFileOutputNewLogger -- Tests the input change to Buffer works for a new Logger
TestSetLevelNewLogger -- Tests that the new level doesn't affect the base logger
TestWithFieldsNewLogger - Test functionality on a new Logger
TestSetJSONFormatter - Tests that the output results in JSON Format
*/
func isJSON(s string) bool {
var js map[string]interface{}
return json.Unmarshal([]byte(s), &js) == nil
}
func TestFileOutputNewLogger(t *testing.T) {
partitiontest.PartitionTest(t)
a := require.New(t)
// Create a buffer (mimics a file) for the output
var bufNewLogger bytes.Buffer
// Create a new logger
nl := NewLogger()
nl.SetOutput(&bufNewLogger)
nl.Info("Should show up in New logger but not in BaseLogger")
a.NotContains(bufNewLogger.String(), "Should show up in base logger but not in NewLogger")
a.Contains(bufNewLogger.String(), "Should show up in New logger but not in BaseLogger")
}
func TestSetLevelNewLogger(t *testing.T) {
partitiontest.PartitionTest(t)
a := require.New(t)
//Create a buffer (mimics a file) for the output
var bufNewLogger bytes.Buffer
//Debug level is info by default
nl := NewLogger()
nl.SetOutput(&bufNewLogger)
nl.Debug("ABC Should not show up")
nl.Info("CDF Should show up")
nl.Warn("GHI Should show up")
// Check the new logger
a.NotContains(bufNewLogger.String(), "ABC Should not show up")
a.Contains(bufNewLogger.String(), "CDF Should show up")
a.Contains(bufNewLogger.String(), "GHI Should show up")
}
func TestWithFieldsNewLogger(t *testing.T) {
partitiontest.PartitionTest(t)
a := require.New(t)
// Create a buffer (mimics a file) for the output
var bufNewLogger bytes.Buffer
nl := NewLogger()
nl.SetOutput(&bufNewLogger)
nl.WithFields(Fields{"1": 4, "2": "testNew"}).Info("ABCDEFG")
a.Regexp("time=\".*\" level=info msg=ABCDEFG 1=4 2=testNew file=log_test.go function=github.com/algorand/go-algorand/logging.TestWithFieldsNewLogger line=\\d+", bufNewLogger.String())
a.NotRegexp("time=\".*\" level=info msg=ABCDEFG 1=4 2=test file=log_test.go function=github.com/algorand/go-algorand/logging.TestWithFieldsNewLogger line=\\d+", bufNewLogger.String())
}
func TestSetJSONFormatter(t *testing.T) {
partitiontest.PartitionTest(t)
a := require.New(t)
// Create a buffer (mimics a file) for the output
var bufNewLogger bytes.Buffer
nl := NewLogger()
nl.SetOutput(&bufNewLogger)
nl.SetJSONFormatter()
nl.WithFields(Fields{"1": 4, "2": "testNew"}).Info("ABCDEFG")
a.True(isJSON(bufNewLogger.String()))
}