-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobs_test.go
More file actions
129 lines (110 loc) · 2.92 KB
/
obs_test.go
File metadata and controls
129 lines (110 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package obs
import (
"context"
"testing"
"github.com/bold-minds/obs/config"
)
func TestGetTracer(t *testing.T) {
tracer := GetTracer("mycomp")
if tracer == nil {
t.Fatal("GetTracer returned nil")
}
}
func TestNew_DisabledConfig(t *testing.T) {
cfg := config.DefaultConfig()
cfg.Enabled = false
client, err := New(cfg)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if client == nil {
t.Fatal("client should not be nil")
}
}
func TestNew_InvalidConfig(t *testing.T) {
cfg := config.Config{
Enabled: true,
// Missing required fields
}
_, err := New(cfg)
if err == nil {
t.Error("should fail with invalid enabled config")
}
}
func TestClient_InitAndShutdown(t *testing.T) {
ctx := context.Background()
cfg := config.DefaultConfig()
cfg.Enabled = false
client, err := New(cfg)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if err := client.Init(ctx); err != nil {
t.Fatalf("Init failed: %v", err)
}
if err := client.Shutdown(ctx); err != nil {
t.Fatalf("Shutdown failed: %v", err)
}
}
func TestClient_Config(t *testing.T) {
cfg := config.DefaultConfig()
client, err := New(cfg)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if client.Config().ServiceName != cfg.ServiceName {
t.Error("Config() should return the config passed to New()")
}
}
func TestGlobalInit_Disabled(t *testing.T) {
ctx := context.Background()
cfg := config.DefaultConfig()
cfg.Enabled = false
if err := Init(ctx, cfg); err != nil {
t.Fatalf("Init failed: %v", err)
}
if GetClient() == nil {
t.Error("GetClient should return non-nil after Init")
}
if err := Shutdown(ctx); err != nil {
t.Fatalf("Shutdown failed: %v", err)
}
}
func TestGlobalInitFromEnv(t *testing.T) {
ctx := context.Background()
t.Setenv("OBS_ENABLED", "false")
if err := InitFromEnv(ctx); err != nil {
t.Fatalf("InitFromEnv failed: %v", err)
}
if err := Shutdown(ctx); err != nil {
t.Fatalf("Shutdown failed: %v", err)
}
}
func TestShutdown_NilClient(t *testing.T) {
globalClient = nil
ctx := context.Background()
if err := Shutdown(ctx); err != nil {
t.Errorf("Shutdown on nil client should not error: %v", err)
}
}
func TestGlobalTracing_DoesNotPanic(t *testing.T) {
ctx := context.Background()
cfg := config.DefaultConfig()
cfg.Enabled = false
_ = Init(ctx, cfg)
defer Shutdown(ctx)
// All of these should work without panicking
TrackScopeOperation(ctx, "test", "t1", true, 5)
TrackDataModelChanges(ctx, "Model", "add", 1, 10, true)
TrackQueryPerformance(ctx, "q1", 50, 10, true, false)
TrackUserActivity(ctx, "login", "t1", 100, 200, true)
TrackResourceUsage(ctx, "handler", 256.0, 45.0, 10)
TrackErrorPattern(ctx, "timeout", "E001", "save", "db", 3)
ctx2, span := StartSpan(ctx, "test", "op")
AddBusinessContext(span, "t1", 1, "test")
AddMemoryMetrics(span)
span.End()
_, op := TrackOperation(ctx2, "api", "test_op")
op.Success(1)
NewEvent("test", "cat", "dom").WithString("k", "v").Track(ctx)
}