mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-14 07:26:47 +00:00
* golangci-lint/CI: Bump versions
Fix remaining linter issues
* Specifically set AppVeyor version
* Fix the infamous typos 👀
* Add go env cmd to AppVeyor
* Add go version cmd to AppVeyor
* Specify AppVeyor image, adjust linters
* Update go get to go install due to deprecation
* Bump golangci-lint timeout time for AppVeyor
* Change NW contract to NQ
* Address nitters
* GetRandomPair -> Pair{}
* Address nits
* Address time nitterinos plus additional tweaks
* More time inception upgrades!
* Bending time and space
293 lines
6.0 KiB
Go
293 lines
6.0 KiB
Go
package log
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io/ioutil"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/thrasher-corp/gocryptotrader/common/convert"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
setupTestLoggers()
|
|
os.Exit(m.Run())
|
|
}
|
|
|
|
func setupTestLoggers() {
|
|
logTest := Config{
|
|
Enabled: convert.BoolPtr(true),
|
|
SubLoggerConfig: SubLoggerConfig{
|
|
Output: "console",
|
|
Level: "INFO|WARN|DEBUG|ERROR",
|
|
},
|
|
AdvancedSettings: advancedSettings{
|
|
ShowLogSystemName: convert.BoolPtr(true),
|
|
Spacer: " | ",
|
|
TimeStampFormat: timestampFormat,
|
|
Headers: headers{
|
|
Info: "[INFO]",
|
|
Warn: "[WARN]",
|
|
Debug: "[DEBUG]",
|
|
Error: "[ERROR]",
|
|
},
|
|
},
|
|
SubLoggers: []SubLoggerConfig{
|
|
{
|
|
Name: "TEST",
|
|
Level: "INFO|DEBUG|WARN|ERROR",
|
|
Output: "stdout",
|
|
}},
|
|
}
|
|
RWM.Lock()
|
|
GlobalLogConfig = &logTest
|
|
RWM.Unlock()
|
|
SetupGlobalLogger()
|
|
SetupSubLoggers(logTest.SubLoggers)
|
|
}
|
|
|
|
func SetupDisabled() {
|
|
logTest := Config{
|
|
Enabled: convert.BoolPtr(false),
|
|
}
|
|
RWM.Lock()
|
|
GlobalLogConfig = &logTest
|
|
RWM.Unlock()
|
|
|
|
SetupGlobalLogger()
|
|
SetupSubLoggers(logTest.SubLoggers)
|
|
}
|
|
|
|
func BenchmarkInfo(b *testing.B) {
|
|
b.ResetTimer()
|
|
for n := 0; n < b.N; n++ {
|
|
Info(Global, "Hello this is an info benchmark")
|
|
}
|
|
}
|
|
|
|
func SetupTestDisabled(t *testing.T) {
|
|
t.Helper()
|
|
SetupDisabled()
|
|
}
|
|
|
|
func TestAddWriter(t *testing.T) {
|
|
mw := MultiWriter()
|
|
m := mw.(*multiWriter) // nolint // type assert not required
|
|
|
|
m.Add(ioutil.Discard)
|
|
m.Add(os.Stdin)
|
|
m.Add(os.Stdout)
|
|
|
|
if total := len(m.writers); total != 3 {
|
|
t.Errorf("expected m.Writers to be 3 %v", total)
|
|
}
|
|
}
|
|
|
|
func TestRemoveWriter(t *testing.T) {
|
|
mw := MultiWriter()
|
|
m := mw.(*multiWriter) // nolint // type assert not required
|
|
|
|
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) {
|
|
_, 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) {
|
|
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) {
|
|
if err := CloseLogger(); 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) {
|
|
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) {
|
|
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{}
|
|
err := logger.newLogEvent("out", "header", "SUBLOGGER", w)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
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{}
|
|
|
|
sl := registerNewSubLogger("TESTYMCTESTALOT")
|
|
sl.Levels = splitLevel("INFO|WARN|DEBUG|ERROR")
|
|
sl.output = w
|
|
|
|
Info(sl, "Hello")
|
|
|
|
if w.String() == "" {
|
|
t.Error("expected Info() to write output to buffer")
|
|
}
|
|
|
|
sl.output = nil
|
|
w.Reset()
|
|
|
|
_, err := SetLevel("TESTYMCTESTALOT", "INFO")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
Debug(sl, "HelloHello")
|
|
|
|
if w.String() != "" {
|
|
t.Error("Expected output buffer to be empty but Debug wrote to output")
|
|
}
|
|
}
|
|
|
|
func TestSubLoggerName(t *testing.T) {
|
|
w := &bytes.Buffer{}
|
|
registerNewSubLogger("sublogger")
|
|
err := logger.newLogEvent("out", "header", "SUBLOGGER", w)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !strings.Contains(w.String(), "SUBLOGGER") {
|
|
t.Error("Expected SUBLOGGER in output")
|
|
}
|
|
|
|
logger.ShowLogSystemName = false
|
|
w.Reset()
|
|
err = logger.newLogEvent("out", "header", "SUBLOGGER", w)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(w.String(), "SUBLOGGER") {
|
|
t.Error("Unexpected SUBLOGGER in output")
|
|
}
|
|
}
|
|
|
|
func TestNewSubLogger(t *testing.T) {
|
|
_, err := NewSubLogger("")
|
|
if !errors.Is(err, errEmptyLoggerName) {
|
|
t.Fatalf("received: %v but expected: %v", err, errEmptyLoggerName)
|
|
}
|
|
|
|
sl, err := NewSubLogger("TESTERINOS")
|
|
if !errors.Is(err, nil) {
|
|
t.Fatalf("received: %v but expected: %v", err, nil)
|
|
}
|
|
|
|
Debug(sl, "testerinos")
|
|
|
|
_, err = NewSubLogger("TESTERINOS")
|
|
if !errors.Is(err, errSubLoggerAlreadyregistered) {
|
|
t.Fatalf("received: %v but expected: %v", err, errSubLoggerAlreadyregistered)
|
|
}
|
|
}
|