github.com/supragya/TendermintConnector@v0.0.0-20210619045051-113e32b84fb1/_deprecated_chains/cosmos/libs/log/tmfmt_logger_test.go (about)

     1  package log_test
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"io/ioutil"
     7  	"math"
     8  	"regexp"
     9  	"testing"
    10  
    11  	kitlog "github.com/go-kit/kit/log"
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/tendermint/tendermint/libs/log"
    14  )
    15  
    16  func TestTMFmtLogger(t *testing.T) {
    17  	t.Parallel()
    18  	buf := &bytes.Buffer{}
    19  	logger := log.NewTMFmtLogger(buf)
    20  
    21  	if err := logger.Log("hello", "world"); err != nil {
    22  		t.Fatal(err)
    23  	}
    24  	assert.Regexp(t, regexp.MustCompile(`N\[.+\] unknown \s+ hello=world\n$`), buf.String())
    25  
    26  	buf.Reset()
    27  	if err := logger.Log("a", 1, "err", errors.New("error")); err != nil {
    28  		t.Fatal(err)
    29  	}
    30  	assert.Regexp(t, regexp.MustCompile(`N\[.+\] unknown \s+ a=1 err=error\n$`), buf.String())
    31  
    32  	buf.Reset()
    33  	if err := logger.Log("std_map", map[int]int{1: 2}, "my_map", mymap{0: 0}); err != nil {
    34  		t.Fatal(err)
    35  	}
    36  	assert.Regexp(t, regexp.MustCompile(`N\[.+\] unknown \s+ std_map=map\[1:2\] my_map=special_behavior\n$`), buf.String())
    37  
    38  	buf.Reset()
    39  	if err := logger.Log("level", "error"); err != nil {
    40  		t.Fatal(err)
    41  	}
    42  	assert.Regexp(t, regexp.MustCompile(`E\[.+\] unknown \s+\n$`), buf.String())
    43  
    44  	buf.Reset()
    45  	if err := logger.Log("_msg", "Hello"); err != nil {
    46  		t.Fatal(err)
    47  	}
    48  	assert.Regexp(t, regexp.MustCompile(`N\[.+\] Hello \s+\n$`), buf.String())
    49  
    50  	buf.Reset()
    51  	if err := logger.Log("module", "main", "module", "crypto", "module", "wire"); err != nil {
    52  		t.Fatal(err)
    53  	}
    54  	assert.Regexp(t, regexp.MustCompile(`N\[.+\] unknown \s+module=wire\s+\n$`), buf.String())
    55  }
    56  
    57  func BenchmarkTMFmtLoggerSimple(b *testing.B) {
    58  	benchmarkRunnerKitlog(b, log.NewTMFmtLogger(ioutil.Discard), baseMessage)
    59  }
    60  
    61  func BenchmarkTMFmtLoggerContextual(b *testing.B) {
    62  	benchmarkRunnerKitlog(b, log.NewTMFmtLogger(ioutil.Discard), withMessage)
    63  }
    64  
    65  func TestTMFmtLoggerConcurrency(t *testing.T) {
    66  	t.Parallel()
    67  	testConcurrency(t, log.NewTMFmtLogger(ioutil.Discard), 10000)
    68  }
    69  
    70  func benchmarkRunnerKitlog(b *testing.B, logger kitlog.Logger, f func(kitlog.Logger)) {
    71  	lc := kitlog.With(logger, "common_key", "common_value")
    72  	b.ReportAllocs()
    73  	b.ResetTimer()
    74  	for i := 0; i < b.N; i++ {
    75  		f(lc)
    76  	}
    77  }
    78  
    79  var (
    80  	baseMessage = func(logger kitlog.Logger) { logger.Log("foo_key", "foo_value") }
    81  	withMessage = func(logger kitlog.Logger) { kitlog.With(logger, "a", "b").Log("d", "f") }
    82  )
    83  
    84  // These test are designed to be run with the race detector.
    85  
    86  func testConcurrency(t *testing.T, logger kitlog.Logger, total int) {
    87  	n := int(math.Sqrt(float64(total)))
    88  	share := total / n
    89  
    90  	errC := make(chan error, n)
    91  
    92  	for i := 0; i < n; i++ {
    93  		go func() {
    94  			errC <- spam(logger, share)
    95  		}()
    96  	}
    97  
    98  	for i := 0; i < n; i++ {
    99  		err := <-errC
   100  		if err != nil {
   101  			t.Fatalf("concurrent logging error: %v", err)
   102  		}
   103  	}
   104  }
   105  
   106  func spam(logger kitlog.Logger, count int) error {
   107  	for i := 0; i < count; i++ {
   108  		err := logger.Log("key", i)
   109  		if err != nil {
   110  			return err
   111  		}
   112  	}
   113  	return nil
   114  }
   115  
   116  type mymap map[int]int
   117  
   118  func (m mymap) String() string { return "special_behavior" }