go_study/fabric-main/common/flogging/metrics/observer_test.go

75 lines
2.0 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package metrics_test
import (
"testing"
"github.com/hyperledger/fabric/common/flogging/metrics"
commonmetrics "github.com/hyperledger/fabric/common/metrics"
"github.com/hyperledger/fabric/common/metrics/metricsfakes"
"github.com/stretchr/testify/require"
"go.uber.org/zap/zapcore"
)
func TestNewObserver(t *testing.T) {
provider := &metricsfakes.Provider{}
checkedCounter := &metricsfakes.Counter{}
writtenCounter := &metricsfakes.Counter{}
provider.NewCounterStub = func(c commonmetrics.CounterOpts) commonmetrics.Counter {
switch c.Name {
case "entries_checked":
require.Equal(t, metrics.CheckedCountOpts, c)
return checkedCounter
case "entries_written":
require.Equal(t, metrics.WriteCountOpts, c)
return writtenCounter
default:
return nil
}
}
expectedObserver := &metrics.Observer{
CheckedCounter: checkedCounter,
WrittenCounter: writtenCounter,
}
m := metrics.NewObserver(provider)
require.Equal(t, expectedObserver, m)
require.Equal(t, 2, provider.NewCounterCallCount())
}
func TestCheck(t *testing.T) {
counter := &metricsfakes.Counter{}
counter.WithReturns(counter)
m := metrics.Observer{CheckedCounter: counter}
entry := zapcore.Entry{Level: zapcore.DebugLevel}
checkedEntry := &zapcore.CheckedEntry{}
m.Check(entry, checkedEntry)
require.Equal(t, 1, counter.WithCallCount())
require.Equal(t, []string{"level", "debug"}, counter.WithArgsForCall(0))
require.Equal(t, 1, counter.AddCallCount())
require.Equal(t, float64(1), counter.AddArgsForCall(0))
}
func TestWrite(t *testing.T) {
counter := &metricsfakes.Counter{}
counter.WithReturns(counter)
m := metrics.Observer{WrittenCounter: counter}
entry := zapcore.Entry{Level: zapcore.DebugLevel}
m.WriteEntry(entry, nil)
require.Equal(t, 1, counter.WithCallCount())
require.Equal(t, []string{"level", "debug"}, counter.WithArgsForCall(0))
require.Equal(t, 1, counter.AddCallCount())
require.Equal(t, float64(1), counter.AddArgsForCall(0))
}