cloudflare/cloudflared

Public

mirrored from https://github.com/cloudflare/cloudflaredAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
55ed995bf08df2859e6e0da36b4a77358efef8f0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

logger/create_test.go

132lines · modecode

1package logger
2
3import (
4 "io"
5 "testing"
6
7 "github.com/pkg/errors"
8 "github.com/rs/zerolog"
9 "github.com/stretchr/testify/assert"
10)
11
12type mockedWriter struct {
13 wantErr bool
14 writeCalls int
15}
16
17func (c *mockedWriter) Write(p []byte) (int, error) {
18 c.writeCalls++
19
20 if c.wantErr {
21 return -1, errors.New("Expected error")
22 }
23
24 return len(p), nil
25}
26
27// Tests that a new writer is only used if it actually works.
28func TestResilientMultiWriter_Errors(t *testing.T) {
29 tests := []struct {
30 name string
31 writers []*mockedWriter
32 }{
33 {
34 name: "All valid writers",
35 writers: []*mockedWriter{
36 {
37 wantErr: false,
38 },
39 {
40 wantErr: false,
41 },
42 },
43 },
44 {
45 name: "All invalid writers",
46 writers: []*mockedWriter{
47 {
48 wantErr: true,
49 },
50 {
51 wantErr: true,
52 },
53 },
54 },
55 {
56 name: "First invalid writer",
57 writers: []*mockedWriter{
58 {
59 wantErr: true,
60 },
61 {
62 wantErr: false,
63 },
64 },
65 },
66 {
67 name: "First valid writer",
68 writers: []*mockedWriter{
69 {
70 wantErr: false,
71 },
72 {
73 wantErr: true,
74 },
75 },
76 },
77 }
78
79 for _, test := range tests {
80 t.Run(test.name, func(t *testing.T) {
81 writers := []io.Writer{}
82 for _, w := range test.writers {
83 writers = append(writers, w)
84 }
85 multiWriter := resilientMultiWriter{zerolog.InfoLevel, writers, nil}
86
87 logger := zerolog.New(multiWriter).With().Timestamp().Logger()
88 logger.Info().Msg("Test msg")
89
90 for _, w := range test.writers {
91 // Expect each writer to be written to regardless of the previous writers returning an error
92 assert.Equal(t, 1, w.writeCalls)
93 }
94 })
95 }
96}
97
98type mockedManagementWriter struct {
99 WriteCalls int
100}
101
102func (c *mockedManagementWriter) Write(p []byte) (int, error) {
103 return len(p), nil
104}
105
106func (c *mockedManagementWriter) WriteLevel(level zerolog.Level, p []byte) (int, error) {
107 c.WriteCalls++
108 return len(p), nil
109}
110
111// Tests that management writer receives write calls of all levels except Disabled
112func TestResilientMultiWriter_Management(t *testing.T) {
113 for _, level := range []zerolog.Level{
114 zerolog.DebugLevel,
115 zerolog.InfoLevel,
116 zerolog.WarnLevel,
117 zerolog.ErrorLevel,
118 zerolog.FatalLevel,
119 zerolog.PanicLevel,
120 } {
121 t.Run(level.String(), func(t *testing.T) {
122 managementWriter := mockedManagementWriter{}
123 multiWriter := resilientMultiWriter{level, []io.Writer{&mockedWriter{}}, &managementWriter}
124
125 logger := zerolog.New(multiWriter).With().Timestamp().Logger()
126 logger.Info().Msg("Test msg")
127
128 // Always write to management
129 assert.Equal(t, 1, managementWriter.WriteCalls)
130 })
131 }
132}