github.com/go-kit/log@v0.2.1/term/colorlogger_test.go (about) 1 package term_test 2 3 import ( 4 "bytes" 5 "io" 6 "io/ioutil" 7 "strconv" 8 "sync" 9 "testing" 10 11 "github.com/go-kit/log" 12 "github.com/go-kit/log/term" 13 ) 14 15 func TestColorLogger(t *testing.T) { 16 var buf bytes.Buffer 17 logger := newColorLogger(&buf) 18 19 if err := logger.Log("hello", "world"); err != nil { 20 t.Fatal(err) 21 } 22 if want, have := "hello=world\n", buf.String(); want != have { 23 t.Errorf("\nwant %#v\nhave %#v", want, have) 24 } 25 26 buf.Reset() 27 if err := logger.Log("a", 1); err != nil { 28 t.Fatal(err) 29 } 30 if want, have := "\x1b[32;1m\x1b[47;1ma=1\n\x1b[39;49;22m", buf.String(); want != have { 31 t.Errorf("\nwant %#v\nhave %#v", want, have) 32 } 33 } 34 35 func newColorLogger(w io.Writer) log.Logger { 36 return term.NewColorLogger(w, log.NewLogfmtLogger, 37 func(keyvals ...interface{}) term.FgBgColor { 38 if keyvals[0] == "a" { 39 return term.FgBgColor{Fg: term.Green, Bg: term.White} 40 } 41 return term.FgBgColor{} 42 }) 43 } 44 45 func BenchmarkColorLoggerSimple(b *testing.B) { 46 benchmarkRunner(b, newColorLogger(ioutil.Discard), baseMessage) 47 } 48 49 func BenchmarkColorLoggerContextual(b *testing.B) { 50 benchmarkRunner(b, newColorLogger(ioutil.Discard), withMessage) 51 } 52 53 func TestColorLoggerConcurrency(t *testing.T) { 54 testConcurrency(t, newColorLogger(ioutil.Discard)) 55 } 56 57 // copied from log/benchmark_test.go 58 func benchmarkRunner(b *testing.B, logger log.Logger, f func(log.Logger)) { 59 lc := log.With(logger, "common_key", "common_value") 60 b.ReportAllocs() 61 b.ResetTimer() 62 for i := 0; i < b.N; i++ { 63 f(lc) 64 } 65 } 66 67 var ( 68 baseMessage = func(logger log.Logger) { logger.Log("foo_key", "foo_value") } 69 withMessage = func(logger log.Logger) { log.With(logger, "a", "b").Log("c", "d") } 70 ) 71 72 // copied from log/concurrency_test.go 73 func testConcurrency(t *testing.T, logger log.Logger) { 74 for _, n := range []int{10, 100, 500} { 75 wg := sync.WaitGroup{} 76 wg.Add(n) 77 for i := 0; i < n; i++ { 78 go func() { spam(logger); wg.Done() }() 79 } 80 wg.Wait() 81 } 82 } 83 84 func spam(logger log.Logger) { 85 for i := 0; i < 100; i++ { 86 logger.Log("a", strconv.FormatInt(int64(i), 10)) 87 } 88 }