...

Source file src/github.com/go-kit/log/term/colorlogger_test.go

Documentation: github.com/go-kit/log/term

     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  }
    89  

View as plain text