]> Cypherpunks.ru repositories - gorecfile.git/blob - slog/handler_test.go
Unify copyright comment format
[gorecfile.git] / slog / handler_test.go
1 // recfile -- GNU recutils'es recfiles parser on pure Go
2 // Copyright (C) 2020-2024 Sergey Matveev <stargrave@stargrave.org>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, version 3 of the License.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 package slog
17
18 import (
19         "bytes"
20         "log/slog"
21         "testing"
22         "time"
23
24         "go.cypherpunks.ru/recfile"
25 )
26
27 func TestBasic(t *testing.T) {
28         var buf bytes.Buffer
29         logger := slog.New(NewRecfileHandler(
30                 &buf,
31                 slog.LevelWarn,
32                 "Urgency",
33                 "Message",
34                 "Time",
35         ))
36         if !logger.Enabled(nil, slog.LevelWarn) {
37                 t.FailNow()
38         }
39         logger.Info("won't catch me")
40         logger.Warn("catch me")
41
42         r := recfile.NewReader(&buf)
43         m, err := r.NextMap()
44         if err != nil {
45                 t.Fatal(err)
46         }
47         if m["Message"] != "catch me" {
48                 t.FailNow()
49         }
50         if m["Urgency"] != "WARN" {
51                 t.FailNow()
52         }
53         if _, err = time.Parse(time.RFC3339Nano, m["Time"]); err != nil {
54                 t.FailNow()
55         }
56 }
57
58 func TestTrimmed(t *testing.T) {
59         var buf bytes.Buffer
60         logger := slog.New(NewRecfileHandler(&buf, slog.LevelWarn, "", "Message", ""))
61         logger.Warn("catch me")
62         r := recfile.NewReader(&buf)
63         m, err := r.NextMap()
64         if err != nil {
65                 t.Fatal(err)
66         }
67         if m["Message"] != "catch me" {
68                 t.FailNow()
69         }
70         if m["Urgency"] != "" {
71                 t.FailNow()
72         }
73         if m["Time"] != "" {
74                 t.FailNow()
75         }
76 }
77
78 func TestFeatured(t *testing.T) {
79         var buf bytes.Buffer
80         logger := slog.New(NewRecfileHandler(&buf, slog.LevelInfo, "L", "M", "T"))
81         logger.WithGroup("grou").WithGroup("py").With("foo", "bar").With("bar", "baz").Info(
82                 "catch me", "baz", []string{"multi", "line"},
83         )
84         r := recfile.NewReader(&buf)
85         m, err := r.NextMap()
86         if err != nil {
87                 t.Fatal(err)
88         }
89         if m["M"] != "catch me" {
90                 t.Fatal("M")
91         }
92         if m["L"] != "INFO" {
93                 t.Fatal("L")
94         }
95         if _, err = time.Parse(time.RFC3339Nano, m["T"]); err != nil {
96                 t.Fatal("T")
97         }
98         if m["grou_py_foo"] != "bar" {
99                 t.Fatal("foo")
100         }
101         if m["grou_py_bar"] != "baz" {
102                 t.Fatal("bar")
103         }
104         if m["grou_py_baz"] != "multi\nline" {
105                 t.Fatal("baz")
106         }
107 }