github.com/go-spring/spring-base@v1.1.3/log/plugin_filter_test.go (about) 1 /* 2 * Copyright 2012-2019 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package log_test 18 19 import ( 20 "context" 21 "errors" 22 "testing" 23 "time" 24 25 "github.com/go-spring/spring-base/assert" 26 "github.com/go-spring/spring-base/clock" 27 "github.com/go-spring/spring-base/knife" 28 "github.com/go-spring/spring-base/log" 29 ) 30 31 type mockFilter struct { 32 start func() error 33 result log.Result 34 } 35 36 func (f *mockFilter) Start() error { 37 if f.start != nil { 38 return f.start() 39 } 40 return nil 41 } 42 43 func (f *mockFilter) Stop(ctx context.Context) { 44 45 } 46 47 func (f *mockFilter) Filter(e *log.Event) log.Result { 48 return f.result 49 } 50 51 func TestCompositeFilter(t *testing.T) { 52 t.Run("error", func(t *testing.T) { 53 filter := log.CompositeFilter{ 54 Filters: []log.Filter{ 55 &mockFilter{start: func() error { 56 return errors.New("start failed") 57 }}, 58 }, 59 } 60 err := filter.Start() 61 assert.Error(t, err, "start failed") 62 }) 63 //t.Run("success", func(t *testing.T) { 64 // filter := log.CompositeFilter{ 65 // Filters: []log.Filter{ 66 // &log.LevelRangeFilter{ 67 // Min: log.DebugLevel, 68 // Max: log.InfoLevel, 69 // }, 70 // &log.LevelMatchFilter{ 71 // Level: log.PanicLevel, 72 // }, 73 // }, 74 // } 75 // err := filter.Start() 76 // assert.Nil(t, err) 77 // filter.Stop(context.Background()) 78 // v := filter.Filter(&log.Event{Level: log.TraceLevel}) 79 // assert.Equal(t, v, log.ResultDeny) 80 // v = filter.Filter(&log.Event{Level: log.DebugLevel}) 81 // assert.Equal(t, v, log.ResultAccept) 82 // v = filter.Filter(&log.Event{Level: log.InfoLevel}) 83 // assert.Equal(t, v, log.ResultAccept) 84 // v = filter.Filter(&log.Event{Level: log.WarnLevel}) 85 // assert.Equal(t, v, log.ResultDeny) 86 // v = filter.Filter(&log.Event{Level: log.ErrorLevel}) 87 // assert.Equal(t, v, log.ResultDeny) 88 // v = filter.Filter(&log.Event{Level: log.PanicLevel}) 89 // assert.Equal(t, v, log.ResultAccept) 90 // v = filter.Filter(&log.Event{Level: log.FatalLevel}) 91 // assert.Equal(t, v, log.ResultDeny) 92 //}) 93 } 94 95 func TestDenyAllFilter(t *testing.T) { 96 f := log.DenyAllFilter{} 97 assert.Equal(t, f.Filter(nil), log.ResultDeny) 98 } 99 100 func TestLevelFilter(t *testing.T) { 101 f := log.LevelFilter{Level: log.InfoLevel} 102 assert.Equal(t, f.Filter(&log.Event{Level: log.TraceLevel}), log.ResultDeny) 103 assert.Equal(t, f.Filter(&log.Event{Level: log.DebugLevel}), log.ResultDeny) 104 assert.Equal(t, f.Filter(&log.Event{Level: log.InfoLevel}), log.ResultAccept) 105 assert.Equal(t, f.Filter(&log.Event{Level: log.WarnLevel}), log.ResultAccept) 106 assert.Equal(t, f.Filter(&log.Event{Level: log.ErrorLevel}), log.ResultAccept) 107 assert.Equal(t, f.Filter(&log.Event{Level: log.PanicLevel}), log.ResultAccept) 108 assert.Equal(t, f.Filter(&log.Event{Level: log.FatalLevel}), log.ResultAccept) 109 } 110 111 func TestLevelMatchFilter(t *testing.T) { 112 f := log.LevelMatchFilter{Level: log.InfoLevel} 113 assert.Equal(t, f.Filter(&log.Event{Level: log.TraceLevel}), log.ResultDeny) 114 assert.Equal(t, f.Filter(&log.Event{Level: log.DebugLevel}), log.ResultDeny) 115 assert.Equal(t, f.Filter(&log.Event{Level: log.InfoLevel}), log.ResultAccept) 116 assert.Equal(t, f.Filter(&log.Event{Level: log.WarnLevel}), log.ResultDeny) 117 assert.Equal(t, f.Filter(&log.Event{Level: log.ErrorLevel}), log.ResultDeny) 118 assert.Equal(t, f.Filter(&log.Event{Level: log.PanicLevel}), log.ResultDeny) 119 assert.Equal(t, f.Filter(&log.Event{Level: log.FatalLevel}), log.ResultDeny) 120 } 121 122 func TestLevelRangeFilter(t *testing.T) { 123 f := log.LevelRangeFilter{Min: log.InfoLevel, Max: log.ErrorLevel} 124 assert.Equal(t, f.Filter(&log.Event{Level: log.TraceLevel}), log.ResultDeny) 125 assert.Equal(t, f.Filter(&log.Event{Level: log.DebugLevel}), log.ResultDeny) 126 assert.Equal(t, f.Filter(&log.Event{Level: log.InfoLevel}), log.ResultAccept) 127 assert.Equal(t, f.Filter(&log.Event{Level: log.WarnLevel}), log.ResultAccept) 128 assert.Equal(t, f.Filter(&log.Event{Level: log.ErrorLevel}), log.ResultAccept) 129 assert.Equal(t, f.Filter(&log.Event{Level: log.PanicLevel}), log.ResultDeny) 130 assert.Equal(t, f.Filter(&log.Event{Level: log.FatalLevel}), log.ResultDeny) 131 } 132 133 func TestTimeFilter(t *testing.T) { 134 f := &log.TimeFilter{ 135 Timezone: "Local", 136 Start: "11:00:00", 137 End: "18:00:00", 138 } 139 if err := f.Init(); err != nil { 140 t.Fatal(err) 141 } 142 testcases := []struct { 143 time []int 144 expect log.Result 145 }{ 146 { 147 time: []int{10, 59, 59}, 148 expect: log.ResultDeny, 149 }, 150 { 151 time: []int{11, 00, 00}, 152 expect: log.ResultAccept, 153 }, 154 { 155 time: []int{18, 00, 00}, 156 expect: log.ResultAccept, 157 }, 158 { 159 time: []int{18, 00, 01}, 160 expect: log.ResultDeny, 161 }, 162 } 163 for _, c := range testcases { 164 ctx, _ := knife.New(context.Background()) 165 year, month, day := time.Now().Date() 166 date := time.Date(year, month, day, c.time[0], c.time[1], c.time[2], 0, time.Local) 167 _ = clock.SetFixedTime(ctx, date) 168 //entry := new(log.Entry).WithContext(ctx) 169 //assert.Equal(t, f.Filter(nil), c.expect) 170 } 171 }