22package debug
33
44import (
5- "fmt"
65 "os"
7- "strings"
8- "sync"
96 "testing"
10- "time"
117)
128
13- func TestLogger (t * testing.T ) {
14- // Setup test environment
15- os .Setenv (envEnableLog , "true" )
16- os .Setenv (envLogFormat , FormatJSON )
17- defer os .Unsetenv (envEnableLog )
18- defer os .Unsetenv (envLogFormat )
19-
20- // Clean up any existing counter file
21- os .Remove (counterFileName )
22- defer os .Remove (counterFileName )
23-
24- t .Run ("basic logging" , func (t * testing.T ) {
25- logger , err := NewLogger ()
26- if err != nil {
27- t .Fatalf ("Failed to create logger: %v" , err )
28- }
29- defer logger .Close ()
30-
31- testData := map [string ]interface {}{
32- "test" : "value" ,
33- "count" : 42 ,
34- }
35-
36- err = logger .Log (testData )
37- if err != nil {
38- t .Errorf ("Log() failed: %v" , err )
39- }
40-
41- // Verify file was created
42- filename := fmt .Sprintf ("%s-%04d.%s" , defaultFileName , 0 , FormatJSON )
43- if _ , err := os .Stat (filename ); os .IsNotExist (err ) {
44- t .Errorf ("Log file was not created: %v" , err )
45- }
46- os .Remove (filename )
47- })
48-
49- t .Run ("concurrent logging" , func (t * testing.T ) {
50- logger , err := NewLogger ()
51- if err != nil {
52- t .Fatalf ("Failed to create logger: %v" , err )
53- }
54- defer logger .Close ()
55-
56- var wg sync.WaitGroup
57- for i := 0 ; i < 10 ; i ++ {
58- wg .Add (1 )
59- go func (i int ) {
60- defer wg .Done ()
61- err := logger .Log (map [string ]interface {}{
62- "goroutine" : i ,
63- })
64- if err != nil {
65- t .Errorf ("Log() failed in goroutine %d: %v" , i , err )
66- }
67- }(i )
68- }
69- wg .Wait ()
70- })
71-
72- t .Run ("buffer flushing" , func (t * testing.T ) {
73- logger , err := NewLogger (WithBufferSize (100 ))
74- if err != nil {
75- t .Fatalf ("Failed to create logger: %v" , err )
76- }
77- defer logger .Close ()
78-
79- // Write enough data to trigger buffer flush
80- for i := 0 ; i < 10 ; i ++ {
81- err := logger .Log (map [string ]interface {}{
82- "test" : strings .Repeat ("a" , 20 ),
83- })
84- if err != nil {
85- t .Errorf ("Log() failed: %v" , err )
86- }
87- }
88- })
89-
90- t .Run ("close with empty buffer" , func (t * testing.T ) {
91- logger , err := NewLogger ()
92- if err != nil {
93- t .Fatalf ("Failed to create logger: %v" , err )
94- }
95-
96- err = logger .Close ()
97- if err != nil {
98- t .Errorf ("Close() failed: %v" , err )
99- }
100- })
101-
102- t .Run ("counter file handling" , func (t * testing.T ) {
103- // Test counter increment
104- logger1 , err := NewLogger ()
105- if err != nil {
106- t .Fatalf ("Failed to create logger: %v" , err )
107- }
108- logger1 .Close ()
109-
110- logger2 , err := NewLogger ()
111- if err != nil {
112- t .Fatalf ("Failed to create logger: %v" , err )
113- }
114- logger2 .Close ()
115-
116- if logger2 .counter != 1 {
117- t .Errorf ("Counter not incremented correctly, got %d want 1" , logger2 .counter )
118- }
119-
120- // Test counter file cleanup
121- err = os .WriteFile (counterFileName , []byte ("0" ), 0644 )
122- if err != nil {
123- t .Fatalf ("Failed to write counter file: %v" , err )
124- }
125-
126- logger3 , err := NewLogger ()
127- if err != nil {
128- t .Fatalf ("Failed to create logger: %v" , err )
129- }
130- logger3 .Close ()
131-
132- if _ , err := os .Stat (counterFileName ); ! os .IsNotExist (err ) {
133- t .Errorf ("Counter file not cleaned up when reaching 0" )
134- }
135- })
136-
137- t .Run ("invalid buffer size" , func (t * testing.T ) {
138- logger , err := NewLogger (WithBufferSize (- 1 ))
139- if err != nil {
140- t .Fatalf ("Failed to create logger: %v" , err )
141- }
142- defer logger .Close ()
143-
144- if logger .bufferSize != defaultBufferSize {
145- t .Errorf ("Invalid buffer size not handled correctly, got %d want %d" ,
146- logger .bufferSize , defaultBufferSize )
147- }
148- })
149- }
150-
1519func TestTraceUn (t * testing.T ) {
15210 // Setup test environment
15311 os .Setenv (envEnableLog , "true" )
@@ -173,69 +31,3 @@ func TestTraceUn(t *testing.T) {
17331 // Clean up
17432 Teardown ()
17533}
176-
177- func TestLogDisabled (t * testing.T ) {
178- // Ensure logging is disabled
179- os .Unsetenv (envEnableLog )
180- Initialize ()
181-
182- testData := map [string ]interface {}{
183- "test" : "should not be logged" ,
184- }
185-
186- err := Log (testData )
187- if err != nil {
188- t .Errorf ("Log() failed when disabled: %v" , err )
189- }
190- }
191-
192- func TestLogFormats (t * testing.T ) {
193- testCases := []struct {
194- format string
195- formatter Formatter
196- }{
197- {FormatJSON , JSONFormatter {}},
198- {FormatYAML , YAMLFormatter {}},
199- }
200-
201- for _ , tc := range testCases {
202- t .Run (tc .format , func (t * testing.T ) {
203- // Setup test environment
204- os .Setenv (envEnableLog , "true" )
205- defer os .Unsetenv (envEnableLog )
206-
207- // Create logger with specific formatter
208- logger , err := NewLogger (WithFormatter (tc .formatter ))
209- if err != nil {
210- t .Fatalf ("Failed to create logger: %v" , err )
211- }
212- defer logger .Close ()
213-
214- testData := map [string ]interface {}{
215- "time" : time .Now (),
216- "format" : tc .format ,
217- }
218-
219- err = logger .Log (testData )
220- if err != nil {
221- t .Errorf ("Log() failed with format %s: %v" , tc .format , err )
222- }
223-
224- // Verify formatter implementation
225- output , err := tc .formatter .Format (testData )
226- if err != nil {
227- t .Errorf ("Formatter failed for %s: %v" , tc .format , err )
228- }
229-
230- if len (output ) == 0 {
231- t .Errorf ("Formatter returned empty output for %s" , tc .format )
232- }
233-
234- // Verify file extension
235- ext := tc .formatter .FileExtension ()
236- if ext != tc .format {
237- t .Errorf ("Invalid file extension, got %s want %s" , ext , tc .format )
238- }
239- })
240- }
241- }
0 commit comments