...
1 package slogstackdriver_test
2
3 import (
4 "bytes"
5 "context"
6 "fmt"
7 "runtime"
8 "testing"
9
10 "cloud.google.com/go/compute/metadata"
11 "go.opencensus.io/trace"
12 logpbtype "google.golang.org/genproto/googleapis/logging/type"
13
14 "cdr.dev/slog"
15 "cdr.dev/slog/internal/assert"
16 "cdr.dev/slog/internal/entryjson"
17 "cdr.dev/slog/sloggers/slogstackdriver"
18 )
19
20 var bg = context.Background()
21 var _, slogstackdriverTestFile, _, _ = runtime.Caller(0)
22
23 func TestStackdriver(t *testing.T) {
24 t.Parallel()
25
26 ctx, s := trace.StartSpan(bg, "meow")
27 b := &bytes.Buffer{}
28 l := slog.Make(slogstackdriver.Sink(b))
29 l = l.Named("meow")
30 l.Error(ctx, "line1\n\nline2", slog.F("wowow", "me\nyou"))
31
32 projectID, _ := metadata.ProjectID()
33
34 j := entryjson.Filter(b.String(), "timestampSeconds")
35 j = entryjson.Filter(j, "timestampNanos")
36 exp := fmt.Sprintf(`{"logging.googleapis.com/severity":"ERROR","message":"line1\n\nline2","logging.googleapis.com/sourceLocation":{"file":"%v","line":30,"function":"cdr.dev/slog/sloggers/slogstackdriver_test.TestStackdriver"},"logging.googleapis.com/operation":{"producer":"meow"},"logging.googleapis.com/trace":"projects/%v/traces/%v","logging.googleapis.com/spanId":"%v","logging.googleapis.com/trace_sampled":false,"wowow":"me\nyou"}
37 `, slogstackdriverTestFile, projectID, s.SpanContext().TraceID, s.SpanContext().SpanID)
38 assert.Equal(t, "entry", exp, j)
39 }
40
41 func TestSevMapping(t *testing.T) {
42 t.Parallel()
43
44 assert.Equal(t, "level", logpbtype.LogSeverity_DEBUG, slogstackdriver.Sev(slog.LevelDebug))
45 assert.Equal(t, "level", logpbtype.LogSeverity_INFO, slogstackdriver.Sev(slog.LevelInfo))
46 assert.Equal(t, "level", logpbtype.LogSeverity_WARNING, slogstackdriver.Sev(slog.LevelWarn))
47 assert.Equal(t, "level", logpbtype.LogSeverity_ERROR, slogstackdriver.Sev(slog.LevelError))
48 assert.Equal(t, "level", logpbtype.LogSeverity_CRITICAL, slogstackdriver.Sev(slog.LevelCritical))
49 }
50
View as plain text