Skip to content

Commit ee9c5b9

Browse files
committed
add tests for slog exporter
1 parent 4c5a316 commit ee9c5b9

6 files changed

Lines changed: 63 additions & 8 deletions

File tree

examples/slog/slog.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ func main() {
1212
mux := http.NewServeMux()
1313
mux.HandleFunc("/", examples.Handler)
1414

15+
//handler := slog.NewJSONHandler(os.Stdout, nil)
16+
//logger := slog.New(handler)
1517
slogExporter := exporters.SlogExporter{}
1618
mw := flowtracker.NewMiddleware(flowtracker.WithExporter(&slogExporter))
1719

exporters/mermaid_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func TestMermaidExporter_OK(t *testing.T) {
3333

3434
server.ServeHTTP(rr, req)
3535

36-
time.Sleep(1 * time.Second)
36+
time.Sleep(500 * time.Millisecond)
3737

3838
// restore stdout
3939
w.Close()
@@ -102,7 +102,7 @@ func TestMermaidExporter_OK_IncludeTags(t *testing.T) {
102102

103103
server.ServeHTTP(rr, req)
104104

105-
time.Sleep(1 * time.Second)
105+
time.Sleep(500 * time.Millisecond)
106106

107107
// restore stdout
108108
w.Close()

exporters/sankey_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func TestSankeyExporter_OK(t *testing.T) {
3333

3434
server.ServeHTTP(rr, req)
3535

36-
time.Sleep(1 * time.Second)
36+
time.Sleep(500 * time.Millisecond)
3737

3838
// restore stdout
3939
w.Close()
@@ -93,7 +93,7 @@ func TestSankeyExporter_OK_IncludeTags(t *testing.T) {
9393

9494
server.ServeHTTP(rr, req)
9595

96-
time.Sleep(1 * time.Second)
96+
time.Sleep(500 * time.Millisecond)
9797

9898
// restore stdout
9999
w.Close()

exporters/slog.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,15 @@ import (
88
)
99

1010
// SlogExporter -- log Exporter (JSON to log) --
11-
type SlogExporter struct{}
11+
type SlogExporter struct {
12+
logger *slog.Logger
13+
}
1214

13-
func (c *SlogExporter) Export(tr *flowtracker.Trace) {
15+
func (s *SlogExporter) Export(tr *flowtracker.Trace) {
1416
b, _ := json.Marshal(tr)
15-
slog.Info("Flow log", slog.Any("trace", b))
17+
if s.logger != nil {
18+
s.logger.Info("Flow log", slog.Any("trace", b))
19+
} else {
20+
slog.Info("Flow log", slog.Any("trace", b))
21+
}
1622
}

exporters/slog_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package exporters
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"log/slog"
7+
"net/http"
8+
"net/http/httptest"
9+
"testing"
10+
"time"
11+
12+
"github.com/spdeepak/flowtracker"
13+
)
14+
15+
var buf bytes.Buffer
16+
17+
func NewSlogServer() http.Handler {
18+
mux := http.NewServeMux()
19+
mux.HandleFunc("/", Handler)
20+
handler := slog.NewJSONHandler(&buf, nil)
21+
logger := slog.New(handler)
22+
mw := flowtracker.NewMiddleware(flowtracker.WithExporter(&SlogExporter{logger: logger}))
23+
return mw(mux)
24+
}
25+
26+
func TestSlogExporter_OK(t *testing.T) {
27+
server := NewSlogServer()
28+
29+
req := httptest.NewRequest(http.MethodGet, "/", nil)
30+
rr := httptest.NewRecorder()
31+
32+
server.ServeHTTP(rr, req)
33+
34+
time.Sleep(500 * time.Millisecond)
35+
36+
output := buf.String()
37+
var logEntry map[string]interface{}
38+
if err := json.Unmarshal([]byte(output), &logEntry); err != nil {
39+
t.Fatalf("Failed to unmarshal log output: %v", err)
40+
}
41+
now := time.Now()
42+
if duration, err := time.Parse(time.RFC3339Nano, logEntry["time"].(string)); err != nil {
43+
t.Fatalf("Failed to unmarshal time in logEntry: %v", err)
44+
} else if now.Sub(duration).Milliseconds() < 0 {
45+
t.Fatalf("Invalid time in logEntry")
46+
}
47+
}

flowtracker_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func TestDefaultExporter_OK(t *testing.T) {
3333

3434
server.ServeHTTP(rr, req)
3535

36-
time.Sleep(1 * time.Second)
36+
time.Sleep(500 * time.Millisecond)
3737

3838
// restore stdout
3939
w.Close()

0 commit comments

Comments
 (0)