mirror of
https://github.com/caddyserver/caddy.git
synced 2026-04-11 19:51:49 -04:00
156 lines
3.7 KiB
Go
156 lines
3.7 KiB
Go
package logging
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/caddyserver/caddy/v2"
|
|
"go.uber.org/zap/buffer"
|
|
"go.uber.org/zap/zapcore"
|
|
|
|
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
|
|
)
|
|
|
|
func TestJournaldPriorityPrefix(t *testing.T) {
|
|
tests := []struct {
|
|
level zapcore.Level
|
|
want string
|
|
}{
|
|
{level: zapcore.InvalidLevel, want: "<6>"},
|
|
{level: zapcore.DebugLevel, want: "<7>"},
|
|
{level: zapcore.InfoLevel, want: "<6>"},
|
|
{level: zapcore.WarnLevel, want: "<4>"},
|
|
{level: zapcore.ErrorLevel, want: "<3>"},
|
|
{level: zapcore.DPanicLevel, want: "<2>"},
|
|
{level: zapcore.PanicLevel, want: "<2>"},
|
|
{level: zapcore.FatalLevel, want: "<2>"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.level.String(), func(t *testing.T) {
|
|
if got := journaldPriorityPrefix(tt.level); got != tt.want {
|
|
t.Fatalf("got %s, want %s", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestJournaldEncoderEncodeEntry(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
level zapcore.Level
|
|
want string
|
|
}{
|
|
{name: "debug", level: zapcore.DebugLevel, want: "<7>wrapped\n"},
|
|
{name: "info", level: zapcore.InfoLevel, want: "<6>wrapped\n"},
|
|
{name: "warn", level: zapcore.WarnLevel, want: "<4>wrapped\n"},
|
|
{name: "error", level: zapcore.ErrorLevel, want: "<3>wrapped\n"},
|
|
{name: "panic", level: zapcore.PanicLevel, want: "<2>wrapped\n"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
enc := JournaldEncoder{Encoder: staticEncoder{output: "wrapped\n"}}
|
|
buf, err := enc.EncodeEntry(zapcore.Entry{Level: tt.level}, nil)
|
|
if err != nil {
|
|
t.Fatalf("EncodeEntry() error = %v", err)
|
|
}
|
|
defer buf.Free()
|
|
|
|
if got := buf.String(); got != tt.want {
|
|
t.Fatalf("got %q, want %q", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestJournaldEncoderUnmarshalCaddyfile(t *testing.T) {
|
|
d := caddyfile.NewTestDispenser(`
|
|
journald {
|
|
wrap console
|
|
}
|
|
`)
|
|
|
|
var enc JournaldEncoder
|
|
if err := enc.UnmarshalCaddyfile(d); err != nil {
|
|
t.Fatalf("UnmarshalCaddyfile() error = %v", err)
|
|
}
|
|
|
|
var got map[string]any
|
|
if err := json.Unmarshal(enc.WrappedRaw, &got); err != nil {
|
|
t.Fatalf("unmarshal wrapped encoder: %v", err)
|
|
}
|
|
|
|
if got["format"] != "console" {
|
|
t.Fatalf("wrapped format = %v, want console", got["format"])
|
|
}
|
|
}
|
|
|
|
func TestJournaldEncoderSuppressesJSONTimestamp(t *testing.T) {
|
|
enc := &JournaldEncoder{
|
|
Encoder: &JSONEncoder{},
|
|
}
|
|
if err := enc.Provision(caddy.Context{Context: context.Background()}); err != nil {
|
|
t.Fatalf("Provision() error = %v", err)
|
|
}
|
|
|
|
buf, err := enc.EncodeEntry(zapcore.Entry{
|
|
Level: zapcore.InfoLevel,
|
|
Time: fixedEntryTime(),
|
|
Message: "hello",
|
|
}, nil)
|
|
if err != nil {
|
|
t.Fatalf("EncodeEntry() error = %v", err)
|
|
}
|
|
defer buf.Free()
|
|
|
|
got := buf.String()
|
|
if strings.Contains(got, `"ts"`) {
|
|
t.Fatalf("got JSON output with ts field: %q", got)
|
|
}
|
|
}
|
|
|
|
func TestJournaldEncoderSuppressesConsoleTimestamp(t *testing.T) {
|
|
enc := &JournaldEncoder{
|
|
Encoder: &ConsoleEncoder{},
|
|
}
|
|
if err := enc.Provision(caddy.Context{Context: context.Background()}); err != nil {
|
|
t.Fatalf("Provision() error = %v", err)
|
|
}
|
|
|
|
buf, err := enc.EncodeEntry(zapcore.Entry{
|
|
Level: zapcore.InfoLevel,
|
|
Time: fixedEntryTime(),
|
|
Message: "hello",
|
|
}, nil)
|
|
if err != nil {
|
|
t.Fatalf("EncodeEntry() error = %v", err)
|
|
}
|
|
defer buf.Free()
|
|
|
|
got := buf.String()
|
|
if strings.Contains(got, "2001/02/03") {
|
|
t.Fatalf("got console output with timestamp: %q", got)
|
|
}
|
|
}
|
|
|
|
type staticEncoder struct {
|
|
nopEncoder
|
|
output string
|
|
}
|
|
|
|
func (se staticEncoder) Clone() zapcore.Encoder { return se }
|
|
|
|
func (se staticEncoder) EncodeEntry(zapcore.Entry, []zapcore.Field) (*buffer.Buffer, error) {
|
|
buf := bufferpool.Get()
|
|
buf.AppendString(se.output)
|
|
return buf, nil
|
|
}
|
|
|
|
func fixedEntryTime() (ts time.Time) {
|
|
return time.Date(2001, 2, 3, 4, 5, 6, 0, time.UTC)
|
|
}
|