| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | 
							- /*
 
-  * Public Domain Software
 
-  *
 
-  * I (Matthias Ladkau) am the author of the source code in this file.
 
-  * I have placed the source code in this file in the public domain.
 
-  *
 
-  * For further information see: http://creativecommons.org/publicdomain/zero/1.0/
 
-  */
 
- package logutil
 
- import (
 
- 	"bytes"
 
- 	"fmt"
 
- 	"strings"
 
- 	"testing"
 
- )
 
- type brokenSink struct {
 
- }
 
- func (bs *brokenSink) Write(p []byte) (n int, err error) {
 
- 	return 0, fmt.Errorf("testerror")
 
- }
 
- func TestLogging(t *testing.T) {
 
- 	if StringToLoglevel("iNfO") != Info {
 
- 		t.Error("Unexpected result")
 
- 		return
 
- 	}
 
- 	ClearLogSinks()
 
- 	sf := SimpleFormatter()
 
- 	sf.(*simpleFormatter).tsFunc = func() string {
 
- 		return "0000000000000" // Timestamp for testing is always 0
 
- 	}
 
- 	// Test straight forward case doing root logging
 
- 	rootBuf := &bytes.Buffer{}
 
- 	logger := GetLogger("")
 
- 	logger.AddLogSink(Debug, sf, rootBuf)
 
- 	logger.Info("foo")
 
- 	logger.Warning("bar")
 
- 	if rootBuf.String() != `
 
- 0000000000000 Info foo
 
- 0000000000000 Warning bar
 
- `[1:] {
 
- 		t.Error("Unexpected output:", rootBuf.String())
 
- 		return
 
- 	}
 
- 	logger.LogStackTrace(Error, "test123")
 
- 	logger.Warning("next")
 
- 	if !strings.Contains(rootBuf.String(), "logger_test.go") {
 
- 		t.Error("Unexpected output:", rootBuf.String())
 
- 		return
 
- 	}
 
- 	rootBuf.Reset()
 
- 	logger.Info("foo")
 
- 	logger.Warning("bar")
 
- 	// Add a sub package logger
 
- 	subBuf := &bytes.Buffer{}
 
- 	logger = GetLogger("foo")
 
- 	logger.AddLogSink(Info, sf, subBuf)
 
- 	logger.Debug("debugmsg")
 
- 	logger.Info("foo")
 
- 	logger.Warning("bar")
 
- 	// Debug message was handled in root logger
 
- 	if rootBuf.String() != `
 
- 0000000000000 Info foo
 
- 0000000000000 Warning bar
 
- 0000000000000 Debug foo debugmsg
 
- `[1:] {
 
- 		t.Error("Unexpected output:", rootBuf.String())
 
- 		return
 
- 	}
 
- 	// Info and warning where handled in the sub logger
 
- 	if subBuf.String() != `
 
- 0000000000000 Info foo foo
 
- 0000000000000 Warning foo bar
 
- `[1:] {
 
- 		t.Error("Unexpected output:", subBuf.String())
 
- 		return
 
- 	}
 
- 	// Add a sub sub package logger
 
- 	subsubBuf := &bytes.Buffer{}
 
- 	logger = GetLogger("foo.bar")
 
- 	//  Add the logger twice
 
- 	logger.AddLogSink(Error, sf, subsubBuf)
 
- 	logger.AddLogSink(Error, sf, subsubBuf)
 
- 	logger = GetLogger("foo.bar.bla")
 
- 	logger.Error("test1")
 
- 	logger.Info("test2")
 
- 	logger.Debug("test3")
 
- 	// Check that the messages were distributed correctly
 
- 	if rootBuf.String() != `
 
- 0000000000000 Info foo
 
- 0000000000000 Warning bar
 
- 0000000000000 Debug foo debugmsg
 
- 0000000000000 Debug foo.bar.bla test3
 
- `[1:] {
 
- 		t.Error("Unexpected output:", rootBuf.String())
 
- 		return
 
- 	}
 
- 	if subBuf.String() != `
 
- 0000000000000 Info foo foo
 
- 0000000000000 Warning foo bar
 
- 0000000000000 Info foo.bar.bla test2
 
- `[1:] {
 
- 		t.Error("Unexpected output:", subBuf.String())
 
- 		return
 
- 	}
 
- 	// Log message is duplicated as we have the same sink twice
 
- 	if subsubBuf.String() != `
 
- 0000000000000 Error foo.bar.bla test1
 
- 0000000000000 Error foo.bar.bla test1
 
- `[1:] {
 
- 		t.Error("Unexpected output:", subsubBuf.String())
 
- 		return
 
- 	}
 
- 	// Remove all log sinks and test error cases
 
- 	ClearLogSinks()
 
- 	fallbackBuf := &bytes.Buffer{}
 
- 	fallbackLogger = func(v ...interface{}) {
 
- 		fallbackBuf.WriteString(fmt.Sprint(v...))
 
- 	}
 
- 	logger = GetLogger("foo.bar.bla")
 
- 	logger.Error("test1")
 
- 	if !strings.Contains(fallbackBuf.String(), "Error foo.bar.bla test1") {
 
- 		t.Error("Unexpected output:", fallbackBuf.String())
 
- 		return
 
- 	}
 
- 	logger = GetLogger("foo.bar")
 
- 	logger.AddLogSink(Info, sf, &brokenSink{})
 
- 	logger.Info("test")
 
- 	if !strings.Contains(fallbackBuf.String(), "testerror") {
 
- 		t.Error("Unexpected output:", fallbackBuf.String())
 
- 		return
 
- 	}
 
- }
 
 
  |