go_study/fabric-main/common/flogging/fabenc/encoder_test.go

85 lines
2.5 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package fabenc_test
import (
"errors"
"fmt"
"runtime"
"testing"
"time"
"github.com/hyperledger/fabric/common/flogging/fabenc"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
"go.uber.org/zap/buffer"
"go.uber.org/zap/zapcore"
)
func TestEncodeEntry(t *testing.T) {
startTime := time.Now()
tests := []struct {
name string
spec string
fields []zapcore.Field
expected string
}{
{name: "empty spec and nil fields", spec: "", fields: nil, expected: "\n"},
{name: "empty spec with fields", spec: "", fields: []zapcore.Field{zap.String("key", "value")}, expected: "key=value\n"},
{name: "simple spec and nil fields", spec: "simple-string", expected: "simple-string\n"},
{name: "simple spec and empty fields", spec: "simple-string", fields: []zapcore.Field{}, expected: "simple-string\n"},
{name: "simple spec with fields", spec: "simple-string", fields: []zapcore.Field{zap.String("key", "value")}, expected: "simple-string key=value\n"},
{name: "duration", spec: "", fields: []zapcore.Field{zap.Duration("duration", time.Second)}, expected: "duration=1s\n"},
{name: "time", spec: "", fields: []zapcore.Field{zap.Time("time", startTime)}, expected: fmt.Sprintf("time=%s\n", startTime.Format("2006-01-02T15:04:05.999Z07:00"))},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
formatters, err := fabenc.ParseFormat(tc.spec)
require.NoError(t, err)
enc := fabenc.NewFormatEncoder(formatters...)
pc, file, l, ok := runtime.Caller(0)
line, err := enc.EncodeEntry(
zapcore.Entry{
// The entry information should be completely omitted
Level: zapcore.InfoLevel,
Time: startTime,
LoggerName: "logger-name",
Message: "message",
Caller: zapcore.NewEntryCaller(pc, file, l, ok),
Stack: "stack",
},
tc.fields,
)
require.NoError(t, err)
require.Equal(t, tc.expected, line.String())
})
}
}
type brokenEncoder struct{ zapcore.Encoder }
func (b *brokenEncoder) EncodeEntry(zapcore.Entry, []zapcore.Field) (*buffer.Buffer, error) {
return nil, errors.New("broken encoder")
}
func TestEncodeFieldsFailed(t *testing.T) {
enc := fabenc.NewFormatEncoder()
enc.Encoder = &brokenEncoder{}
_, err := enc.EncodeEntry(zapcore.Entry{}, nil)
require.EqualError(t, err, "broken encoder")
}
func TestFormatEncoderClone(t *testing.T) {
enc := fabenc.NewFormatEncoder()
cloned := enc.Clone()
require.Equal(t, enc, cloned)
}