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  }