github.com/alibaba/sentinel-golang@v1.0.4/logging/logging_test.go (about)

     1  // Copyright 1999-2020 Alibaba Group Holding Ltd.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package logging
    16  
    17  import (
    18  	"fmt"
    19  	"os"
    20  	"strings"
    21  	"testing"
    22  	"time"
    23  
    24  	"github.com/pkg/errors"
    25  	"github.com/stretchr/testify/assert"
    26  )
    27  
    28  const (
    29  	testErrMsg = "test error with caller stack"
    30  )
    31  
    32  func TestNewSimpleFileLogger(t *testing.T) {
    33  	fileName := "logger-test.log"
    34  	tmpDir := os.TempDir()
    35  	if !strings.HasSuffix(tmpDir, string(os.PathSeparator)) {
    36  		tmpDir = tmpDir + string(os.PathSeparator)
    37  	}
    38  	logger, err := NewSimpleFileLogger(tmpDir + fileName)
    39  	assert.NoError(t, err)
    40  
    41  	logger.Info("info test1.")
    42  	logger.Info("info test2.", "name", "sentinel")
    43  
    44  	time.Sleep(time.Second * 1)
    45  	_ = os.Remove(fileName)
    46  }
    47  
    48  func throwError() error {
    49  	return errors.New(testErrMsg)
    50  }
    51  
    52  func Test_caller_path(t *testing.T) {
    53  	Error(throwError(), "test error", "k1", "v1")
    54  }
    55  
    56  func Test_AssembleMsg(t *testing.T) {
    57  	t.Run("AssembleMsg1", func(t *testing.T) {
    58  		got := AssembleMsg(2, "ERROR", "test msg1", nil, "k1", "v1")
    59  		assert.True(t, strings.Contains(got, `"logLevel":"ERROR","msg":"test msg1","k1":"v1"}`))
    60  	})
    61  
    62  	t.Run("AssembleMsg2", func(t *testing.T) {
    63  		got := AssembleMsg(2, "INFO", "test msg2", nil, "k1", "v1", "k2", "v2")
    64  		assert.True(t, strings.Contains(got, `"logLevel":"INFO","msg":"test msg2","k1":"v1","k2":"v2"}`))
    65  	})
    66  
    67  	t.Run("AssembleMsg3", func(t *testing.T) {
    68  		got := AssembleMsg(2, "INFO", "test msg3", nil)
    69  		assert.True(t, strings.Contains(got, `"logLevel":"INFO","msg":"test msg3"}`))
    70  	})
    71  
    72  	t.Run("AssembleMsg4", func(t *testing.T) {
    73  		got := AssembleMsg(2, "ERROR", "test msg4", throwError(), "k1", "v1")
    74  		assert.True(t, strings.Contains(got, `"logLevel":"ERROR","msg":"test msg4","k1":"v1"}`))
    75  		assert.True(t, strings.Contains(got, testErrMsg))
    76  	})
    77  
    78  	t.Run("AssembleMsg5", func(t *testing.T) {
    79  		got := AssembleMsg(2, "WARN", "test msg5", nil, "reason", throwError())
    80  		assert.True(t, strings.Contains(got, fmt.Sprintf(`"logLevel":"WARN","msg":"test msg5","reason":"%s"`, testErrMsg)))
    81  	})
    82  
    83  	t.Run("AssembleMsg6", func(t *testing.T) {
    84  		got := AssembleMsg(2, "INFO", "test msg6", nil, "num", 123)
    85  		assert.True(t, strings.Contains(got, `"logLevel":"INFO","msg":"test msg6","num":123`))
    86  	})
    87  
    88  	t.Run("AssembleMsg7", func(t *testing.T) {
    89  		got := AssembleMsg(2, "INFO", "test msg7", nil, "num", 123.456)
    90  		assert.True(t, strings.Contains(got, `"logLevel":"INFO","msg":"test msg7","num":123.456`))
    91  	})
    92  
    93  	t.Run("AssembleMsg8", func(t *testing.T) {
    94  		got := AssembleMsg(2, "INFO", "test msg8", nil, "flag", true)
    95  		assert.True(t, strings.Contains(got, `"logLevel":"INFO","msg":"test msg8","flag":true`))
    96  	})
    97  
    98  	t.Run("AssembleMsg8", func(t *testing.T) {
    99  		got := AssembleMsg(2, "INFO", "test msg8", nil, "flag", true)
   100  		assert.True(t, strings.Contains(got, `"logLevel":"INFO","msg":"test msg8","flag":true`))
   101  	})
   102  
   103  	t.Run("AssembleMsg9", func(t *testing.T) {
   104  		got := AssembleMsg(2, "INFO", "test msg9", nil, "object", nil)
   105  		assert.True(t, strings.Contains(got, `"logLevel":"INFO","msg":"test msg9","object":null`))
   106  	})
   107  
   108  	t.Run("AssembleMsg10", func(t *testing.T) {
   109  		got := AssembleMsg(2, "INFO", "test msg10", nil, `k1\n\t`, `v1\n\t`)
   110  		assert.True(t, strings.Contains(got, `"logLevel":"INFO","msg":"test msg10","k1\n\t":"v1\n\t"`))
   111  	})
   112  
   113  	t.Run("AssembleMsg11", func(t *testing.T) {
   114  		got := AssembleMsg(2, "INFO", "test msg11", nil, `json`, "{\"abc\":\"xyz\"}")
   115  		assert.True(t, strings.Contains(got, `"logLevel":"INFO","msg":"test msg11","json":{"abc":"xyz"}`))
   116  	})
   117  
   118  }
   119  
   120  func Test_caller(t *testing.T) {
   121  	t.Run("caller1", func(t *testing.T) {
   122  		file, _ := caller(1)
   123  		assert.True(t, strings.Contains(file, "logging_test.go"))
   124  	})
   125  }
   126  
   127  func TestLogLevelEnabled(t *testing.T) {
   128  	ResetGlobalLoggerLevel(DebugLevel)
   129  	assert.True(t, DebugEnabled(), "Debug should be enabled when log level is DebugLevel")
   130  	assert.True(t, InfoEnabled(), "Info should be enabled when log level is DebugLevel")
   131  	assert.True(t, WarnEnabled(), "Warn should be enabled when log level is DebugLevel")
   132  	assert.True(t, ErrorEnabled(), "Error should be enabled when log level is DebugLevel")
   133  
   134  	ResetGlobalLoggerLevel(InfoLevel)
   135  	assert.False(t, DebugEnabled(), "Debug should be disabled when log level is InfoLevel")
   136  	assert.True(t, InfoEnabled(), "Info should be enabled when log level is InfoLevel")
   137  	assert.True(t, WarnEnabled(), "Warn should be enabled when log level is InfoLevel")
   138  	assert.True(t, ErrorEnabled(), "Error should be enabled when log level is InfoLevel")
   139  
   140  	ResetGlobalLoggerLevel(WarnLevel)
   141  	assert.False(t, DebugEnabled(), "Debug should be disabled when log level is WarnLevel")
   142  	assert.False(t, InfoEnabled(), "Info should be disabled when log level is WarnLevel")
   143  	assert.True(t, WarnEnabled(), "Warn should be enabled when log level is WarnLevel")
   144  	assert.True(t, ErrorEnabled(), "Error should be enabled when log level is WarnLevel")
   145  
   146  	ResetGlobalLoggerLevel(ErrorLevel)
   147  	assert.False(t, DebugEnabled(), "Debug should be disabled when log level is ErrorLevel")
   148  	assert.False(t, InfoEnabled(), "Info should be disabled when log level is ErrorLevel")
   149  	assert.False(t, WarnEnabled(), "Warn should be disabled when log level is ErrorLevel")
   150  	assert.True(t, ErrorEnabled(), "Error should be enabled when log level is ErrorLevel")
   151  }
   152  
   153  func Benchmark_LoggingDebug_Without_Precheck(b *testing.B) {
   154  	b.ReportAllocs()
   155  	b.ResetTimer()
   156  	ResetGlobalLoggerLevel(InfoLevel)
   157  	for i := 0; i < b.N; i++ {
   158  		Debug("log test", "k1", "v1", "k2", "v2")
   159  	}
   160  }
   161  
   162  func Benchmark_LoggingDebug_With_Precheck(b *testing.B) {
   163  	b.ReportAllocs()
   164  	b.ResetTimer()
   165  	ResetGlobalLoggerLevel(InfoLevel)
   166  	for i := 0; i < b.N; i++ {
   167  		if DebugEnabled() {
   168  			Debug("log test", "k1", "v1", "k2", "v2")
   169  		}
   170  	}
   171  }
   172  
   173  func BenchmarkAssembleMsg(b *testing.B) {
   174  	b.ReportAllocs()
   175  	for i := 0; i < b.N; i++ {
   176  		AssembleMsg(1, "INFO", "test msg", nil, "k1", "v1", "k2", "v2")
   177  	}
   178  }