github.com/evdatsion/aphelion-dpos-bft@v0.32.1/libs/log/filter_test.go (about)

     1  package log_test
     2  
     3  import (
     4  	"bytes"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/evdatsion/aphelion-dpos-bft/libs/log"
     9  )
    10  
    11  func TestVariousLevels(t *testing.T) {
    12  	testCases := []struct {
    13  		name    string
    14  		allowed log.Option
    15  		want    string
    16  	}{
    17  		{
    18  			"AllowAll",
    19  			log.AllowAll(),
    20  			strings.Join([]string{
    21  				`{"_msg":"here","level":"debug","this is":"debug log"}`,
    22  				`{"_msg":"here","level":"info","this is":"info log"}`,
    23  				`{"_msg":"here","level":"error","this is":"error log"}`,
    24  			}, "\n"),
    25  		},
    26  		{
    27  			"AllowDebug",
    28  			log.AllowDebug(),
    29  			strings.Join([]string{
    30  				`{"_msg":"here","level":"debug","this is":"debug log"}`,
    31  				`{"_msg":"here","level":"info","this is":"info log"}`,
    32  				`{"_msg":"here","level":"error","this is":"error log"}`,
    33  			}, "\n"),
    34  		},
    35  		{
    36  			"AllowInfo",
    37  			log.AllowInfo(),
    38  			strings.Join([]string{
    39  				`{"_msg":"here","level":"info","this is":"info log"}`,
    40  				`{"_msg":"here","level":"error","this is":"error log"}`,
    41  			}, "\n"),
    42  		},
    43  		{
    44  			"AllowError",
    45  			log.AllowError(),
    46  			strings.Join([]string{
    47  				`{"_msg":"here","level":"error","this is":"error log"}`,
    48  			}, "\n"),
    49  		},
    50  		{
    51  			"AllowNone",
    52  			log.AllowNone(),
    53  			``,
    54  		},
    55  	}
    56  
    57  	for _, tc := range testCases {
    58  		t.Run(tc.name, func(t *testing.T) {
    59  			var buf bytes.Buffer
    60  			logger := log.NewFilter(log.NewTMJSONLogger(&buf), tc.allowed)
    61  
    62  			logger.Debug("here", "this is", "debug log")
    63  			logger.Info("here", "this is", "info log")
    64  			logger.Error("here", "this is", "error log")
    65  
    66  			if want, have := tc.want, strings.TrimSpace(buf.String()); want != have {
    67  				t.Errorf("\nwant:\n%s\nhave:\n%s", want, have)
    68  			}
    69  		})
    70  	}
    71  }
    72  
    73  func TestLevelContext(t *testing.T) {
    74  	var buf bytes.Buffer
    75  
    76  	logger := log.NewTMJSONLogger(&buf)
    77  	logger = log.NewFilter(logger, log.AllowError())
    78  	logger = logger.With("context", "value")
    79  
    80  	logger.Error("foo", "bar", "baz")
    81  	if want, have := `{"_msg":"foo","bar":"baz","context":"value","level":"error"}`, strings.TrimSpace(buf.String()); want != have {
    82  		t.Errorf("\nwant '%s'\nhave '%s'", want, have)
    83  	}
    84  
    85  	buf.Reset()
    86  	logger.Info("foo", "bar", "baz")
    87  	if want, have := ``, strings.TrimSpace(buf.String()); want != have {
    88  		t.Errorf("\nwant '%s'\nhave '%s'", want, have)
    89  	}
    90  }
    91  
    92  func TestVariousAllowWith(t *testing.T) {
    93  	var buf bytes.Buffer
    94  
    95  	logger := log.NewTMJSONLogger(&buf)
    96  
    97  	logger1 := log.NewFilter(logger, log.AllowError(), log.AllowInfoWith("context", "value"))
    98  	logger1.With("context", "value").Info("foo", "bar", "baz")
    99  	if want, have := `{"_msg":"foo","bar":"baz","context":"value","level":"info"}`, strings.TrimSpace(buf.String()); want != have {
   100  		t.Errorf("\nwant '%s'\nhave '%s'", want, have)
   101  	}
   102  
   103  	buf.Reset()
   104  
   105  	logger2 := log.NewFilter(logger, log.AllowError(), log.AllowInfoWith("context", "value"), log.AllowNoneWith("user", "Sam"))
   106  	logger2.With("context", "value", "user", "Sam").Info("foo", "bar", "baz")
   107  	if want, have := ``, strings.TrimSpace(buf.String()); want != have {
   108  		t.Errorf("\nwant '%s'\nhave '%s'", want, have)
   109  	}
   110  
   111  	buf.Reset()
   112  
   113  	logger3 := log.NewFilter(logger, log.AllowError(), log.AllowInfoWith("context", "value"), log.AllowNoneWith("user", "Sam"))
   114  	logger3.With("user", "Sam").With("context", "value").Info("foo", "bar", "baz")
   115  	if want, have := `{"_msg":"foo","bar":"baz","context":"value","level":"info","user":"Sam"}`, strings.TrimSpace(buf.String()); want != have {
   116  		t.Errorf("\nwant '%s'\nhave '%s'", want, have)
   117  	}
   118  }