main
1package log
2
3import (
4 "bufio"
5 "bytes"
6 "context"
7 "net/http"
8 "net/http/httptest"
9 "testing"
10
11 "github.com/rs/zerolog"
12 "github.com/stretchr/testify/assert"
13 "github.com/stretchr/testify/require"
14 "github.com/xlgmokha/x/pkg/serde"
15)
16
17func TestLog(t *testing.T) {
18 t.Run("New", func(t *testing.T) {
19 var b bytes.Buffer
20 writer := bufio.NewWriter(&b)
21
22 log := New(writer, Fields{"env": "test"})
23 log.Print()
24
25 require.NoError(t, writer.Flush())
26
27 items, err := serde.FromJSON[map[string]string](bufio.NewReader(&b))
28 require.NoError(t, err)
29
30 assert.Equal(t, "test", items["env"])
31 assert.Equal(t, "debug", items["level"])
32 assert.NotEmpty(t, items["time"])
33 })
34
35 t.Run("WithFields", func(t *testing.T) {
36 var b bytes.Buffer
37 writer := bufio.NewWriter(&b)
38
39 log := New(writer, Fields{"env": "test"})
40 ctx := log.WithContext(context.Background())
41 WithFields(ctx, Fields{"ip": "127.0.0.1"})
42 zerolog.Ctx(ctx).Print()
43 log.Print()
44
45 require.NoError(t, writer.Flush())
46
47 items, err := serde.FromJSON[map[string]string](bufio.NewReader(&b))
48 require.NoError(t, err)
49
50 assert.Equal(t, "test", items["env"])
51 assert.Equal(t, "debug", items["level"])
52 assert.Equal(t, "127.0.0.1", items["ip"])
53 })
54
55 t.Run("HTTP", func(t *testing.T) {
56 var b bytes.Buffer
57 writer := bufio.NewWriter(&b)
58 log := New(writer, Fields{})
59 server := httptest.NewServer(HTTP(log)(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
60 w.WriteHeader(http.StatusTeapot)
61 })))
62 defer server.Close()
63
64 response, err := http.Get(server.URL)
65 require.NoError(t, err)
66 assert.Equal(t, http.StatusTeapot, response.StatusCode)
67
68 require.NoError(t, writer.Flush())
69 items, err := serde.FromJSON[map[string]interface{}](bufio.NewReader(&b))
70 require.NoError(t, err)
71
72 require.Contains(t, items, "method")
73 assert.Equal(t, "GET", items["method"])
74
75 require.Contains(t, items, "path")
76 assert.Equal(t, "/", items["path"])
77
78 require.Contains(t, items, "remote_host")
79 assert.Contains(t, items["remote_host"], "127.0.0.1")
80 })
81}