Files
gocryptotrader/logger/logger_test.go
Scott f8ef6da93d Logger: Add support for toggling sub logger name output for log events (#407)
* Adds new optional log field. Adds padding to the fields to make it have a consistent output

* Line space and correct err message

* Removes padding code

* Moves `ShowLogSystemName` to advanced settings

* Uppers the names. Prevents pointer crash. Adds to config_example.json

* Adds test scenario for nil and true ShowLogSystemName

* buffer reset
2020-01-03 14:12:23 +11:00

271 lines
5.2 KiB
Go

package logger
import (
"bytes"
"io/ioutil"
"os"
"strings"
"testing"
)
var (
trueptr = func(b bool) *bool { return &b }(true)
falseptr = func(b bool) *bool { return &b }(false)
)
func SetupTest() {
logTest := Config{
Enabled: trueptr,
SubLoggerConfig: SubLoggerConfig{
Output: "console",
Level: "INFO|WARN|DEBUG|ERROR",
},
AdvancedSettings: advancedSettings{
ShowLogSystemName: trueptr,
Spacer: " | ",
TimeStampFormat: timestampFormat,
Headers: headers{
Info: "[INFO]",
Warn: "[WARN]",
Debug: "[DEBUG]",
Error: "[ERROR]",
},
},
SubLoggers: []SubLoggerConfig{
{
Name: "TEST",
Level: "INFO|DEBUG|WARN|ERROR",
Output: "stdout",
}},
}
GlobalLogConfig = &logTest
SetupGlobalLogger()
SetupSubLoggers(logTest.SubLoggers)
}
func SetupDisabled() {
logTest := Config{
Enabled: falseptr,
}
GlobalLogConfig = &logTest
SetupGlobalLogger()
SetupSubLoggers(logTest.SubLoggers)
}
func BenchmarkInfo(b *testing.B) {
SetupTest()
b.ResetTimer()
for n := 0; n < b.N; n++ {
Info(Global, "Hello this is an info benchmark")
}
}
func SetupTestDisabled(t *testing.T) {
SetupDisabled()
}
func TestAddWriter(t *testing.T) {
mw := MultiWriter()
m := mw.(*multiWriter)
m.Add(ioutil.Discard)
m.Add(os.Stdin)
m.Add(os.Stdout)
total := len(m.writers)
if total != 3 {
t.Errorf("expected m.Writers to be 3 %v", total)
}
}
func TestRemoveWriter(t *testing.T) {
mw := MultiWriter()
m := mw.(*multiWriter)
m.Add(ioutil.Discard)
m.Add(os.Stdin)
m.Add(os.Stdout)
total := len(m.writers)
m.Remove(os.Stdin)
m.Remove(os.Stdout)
if len(m.writers) != total-2 {
t.Errorf("expected m.Writers to be %v got %v", total-2, len(m.writers))
}
}
func TestLevel(t *testing.T) {
SetupTest()
_, err := Level("LOG")
if err != nil {
t.Errorf("Failed to get log %s levels skipping", err)
}
_, err = Level("totallyinvalidlogger")
if err == nil {
t.Error("Expected error on invalid logger")
}
}
func TestSetLevel(t *testing.T) {
SetupTest()
newLevel, err := SetLevel("LOG", "ERROR")
if err != nil {
t.Skipf("Failed to get log %s levels skipping", err)
}
if newLevel.Info || newLevel.Debug || newLevel.Warn {
t.Error("failed to set level correctly")
}
if !newLevel.Error {
t.Error("failed to set level correctly")
}
_, err = SetLevel("abc12345556665", "ERROR")
if err == nil {
t.Error("SetLevel() Should return error on invalid logger")
}
}
func TestValidSubLogger(t *testing.T) {
b, logPtr := validSubLogger("LOG")
if !b {
t.Skip("validSubLogger() should return found, pointer if valid logger found")
}
if logPtr == nil {
t.Error("validSubLogger() should return a pointer and not nil")
}
}
func TestCloseLogger(t *testing.T) {
err := CloseLogger()
if err != nil {
t.Errorf("CloseLogger() failed %v", err)
}
}
func TestConfigureSubLogger(t *testing.T) {
err := configureSubLogger("log", "INFO", os.Stdin)
if err != nil {
t.Skipf("configureSubLogger() returned unexpected error %v", err)
}
if (Global.Levels != Levels{
Info: true,
Debug: false,
}) {
t.Error("configureSubLogger() incorrectly configure subLogger")
}
if Global.name != "LOG" {
t.Error("configureSubLogger() Failed to uppercase name")
}
}
func TestSplitLevel(t *testing.T) {
levelsInfoDebug := splitLevel("INFO|DEBUG")
expected := Levels{
Info: true,
Debug: true,
Warn: false,
Error: false,
}
if levelsInfoDebug != expected {
t.Errorf("splitLevel() returned invalid data expected: %+v got: %+v", expected, levelsInfoDebug)
}
}
func BenchmarkInfoDisabled(b *testing.B) {
SetupDisabled()
b.ResetTimer()
for n := 0; n < b.N; n++ {
Info(Global, "Hello this is an info benchmark")
}
}
func BenchmarkInfof(b *testing.B) {
SetupTest()
b.ResetTimer()
for n := 0; n < b.N; n++ {
Infof(Global, "Hello this is an infof benchmark %v %v %v\n", n, 1, 2)
}
}
func BenchmarkInfoln(b *testing.B) {
SetupTest()
b.ResetTimer()
for n := 0; n < b.N; n++ {
Infoln(Global, "Hello this is an infoln benchmark")
}
}
func TestNewLogEvent(t *testing.T) {
w := &bytes.Buffer{}
logger.newLogEvent("out", "header", "SUBLOGGER", w)
if w.String() == "" {
t.Error("newLogEvent() failed expected output got empty string")
}
err := logger.newLogEvent("out", "header", "SUBLOGGER", nil)
if err == nil {
t.Error("Error expected with output is set to nil")
}
}
func TestInfo(t *testing.T) {
w := &bytes.Buffer{}
tempSL := subLogger{
"TESTYMCTESTALOT",
splitLevel("INFO|WARN|DEBUG|ERROR"),
w,
}
Info(&tempSL, "Hello")
if w.String() == "" {
t.Error("expected Info() to write output to buffer")
}
tempSL.output = nil
w.Reset()
SetLevel("TESTYMCTESTALOT", "INFO")
Debug(&tempSL, "HelloHello")
if w.String() != "" {
t.Error("Expected output buffer to be empty but Debug wrote to output")
}
}
func TestSubLoggerName(t *testing.T) {
SetupTest()
w := &bytes.Buffer{}
registerNewSubLogger("sublogger")
logger.newLogEvent("out", "header", "SUBLOGGER", w)
if !strings.Contains(w.String(), "SUBLOGGER") {
t.Error("Expected SUBLOGGER in output")
}
logger.ShowLogSystemName = false
w.Reset()
logger.newLogEvent("out", "header", "SUBLOGGER", w)
if strings.Contains(w.String(), "SUBLOGGER") {
t.Error("Unexpected SUBLOGGER in output")
}
}