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 }