Skip to content

Commit 317703b

Browse files
committed
Tests for SpanStorage
1 parent d4729dd commit 317703b

File tree

1 file changed

+183
-0
lines changed

1 file changed

+183
-0
lines changed
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
defmodule Sentry.OpenTelemetry.SpanStorageTest do
2+
use ExUnit.Case, async: false
3+
4+
alias Sentry.OpenTelemetry.{SpanStorage, SpanRecord}
5+
6+
setup do
7+
if :ets.whereis(:span_storage) != :undefined do
8+
:ets.delete_all_objects(:span_storage)
9+
else
10+
start_supervised!(SpanStorage)
11+
end
12+
13+
on_exit(fn ->
14+
if :ets.whereis(:span_storage) != :undefined do
15+
:ets.delete_all_objects(:span_storage)
16+
end
17+
end)
18+
19+
:ok
20+
end
21+
22+
describe "root spans" do
23+
test "stores and retrieves a root span" do
24+
root_span = %SpanRecord{
25+
span_id: "abc123",
26+
parent_span_id: nil,
27+
trace_id: "trace123",
28+
name: "root_span"
29+
}
30+
31+
SpanStorage.store_span(root_span)
32+
33+
assert ^root_span = SpanStorage.get_root_span("abc123")
34+
end
35+
36+
test "updates an existing root span" do
37+
root_span = %SpanRecord{
38+
span_id: "abc123",
39+
parent_span_id: nil,
40+
trace_id: "trace123",
41+
name: "root_span"
42+
}
43+
44+
updated_root_span = %SpanRecord{
45+
span_id: "abc123",
46+
parent_span_id: nil,
47+
trace_id: "trace123",
48+
name: "updated_root_span"
49+
}
50+
51+
SpanStorage.store_span(root_span)
52+
SpanStorage.update_span(updated_root_span)
53+
54+
assert ^updated_root_span = SpanStorage.get_root_span("abc123")
55+
end
56+
57+
test "removes a root span" do
58+
root_span = %SpanRecord{
59+
span_id: "abc123",
60+
parent_span_id: nil,
61+
trace_id: "trace123",
62+
name: "root_span"
63+
}
64+
65+
SpanStorage.store_span(root_span)
66+
assert root_span == SpanStorage.get_root_span("abc123")
67+
68+
SpanStorage.remove_span("abc123")
69+
assert nil == SpanStorage.get_root_span("abc123")
70+
end
71+
end
72+
73+
describe "child spans" do
74+
test "stores and retrieves child spans" do
75+
child_span1 = %SpanRecord{
76+
span_id: "child1",
77+
parent_span_id: "parent123",
78+
trace_id: "trace123",
79+
name: "child_span_1"
80+
}
81+
82+
child_span2 = %SpanRecord{
83+
span_id: "child2",
84+
parent_span_id: "parent123",
85+
trace_id: "trace123",
86+
name: "child_span_2"
87+
}
88+
89+
SpanStorage.store_span(child_span1)
90+
SpanStorage.store_span(child_span2)
91+
92+
children = SpanStorage.get_child_spans("parent123")
93+
assert length(children) == 2
94+
assert child_span1 in children
95+
assert child_span2 in children
96+
end
97+
98+
test "updates an existing child span" do
99+
child_span = %SpanRecord{
100+
span_id: "child1",
101+
parent_span_id: "parent123",
102+
trace_id: "trace123",
103+
name: "child_span"
104+
}
105+
106+
updated_child_span = %SpanRecord{
107+
span_id: "child1",
108+
parent_span_id: "parent123",
109+
trace_id: "trace123",
110+
name: "updated_child_span"
111+
}
112+
113+
SpanStorage.store_span(child_span)
114+
SpanStorage.update_span(updated_child_span)
115+
116+
children = SpanStorage.get_child_spans("parent123")
117+
assert [^updated_child_span] = children
118+
end
119+
120+
test "removes child spans" do
121+
child_span1 = %SpanRecord{
122+
span_id: "child1",
123+
parent_span_id: "parent123",
124+
trace_id: "trace123",
125+
name: "child_span_1"
126+
}
127+
128+
child_span2 = %SpanRecord{
129+
span_id: "child2",
130+
parent_span_id: "parent123",
131+
trace_id: "trace123",
132+
name: "child_span_2"
133+
}
134+
135+
SpanStorage.store_span(child_span1)
136+
SpanStorage.store_span(child_span2)
137+
assert length(SpanStorage.get_child_spans("parent123")) == 2
138+
139+
SpanStorage.remove_child_spans("parent123")
140+
assert [] == SpanStorage.get_child_spans("parent123")
141+
end
142+
end
143+
144+
test "handles complete span hierarchy" do
145+
root_span = %SpanRecord{
146+
span_id: "root123",
147+
parent_span_id: nil,
148+
trace_id: "trace123",
149+
name: "root_span"
150+
}
151+
152+
child_span1 = %SpanRecord{
153+
span_id: "child1",
154+
parent_span_id: "root123",
155+
trace_id: "trace123",
156+
name: "child_span_1"
157+
}
158+
159+
child_span2 = %SpanRecord{
160+
span_id: "child2",
161+
parent_span_id: "root123",
162+
trace_id: "trace123",
163+
name: "child_span_2"
164+
}
165+
166+
SpanStorage.store_span(root_span)
167+
SpanStorage.store_span(child_span1)
168+
SpanStorage.store_span(child_span2)
169+
170+
assert ^root_span = SpanStorage.get_root_span("root123")
171+
172+
children = SpanStorage.get_child_spans("root123")
173+
assert length(children) == 2
174+
assert child_span1 in children
175+
assert child_span2 in children
176+
177+
SpanStorage.remove_span("root123")
178+
SpanStorage.remove_child_spans("root123")
179+
180+
assert nil == SpanStorage.get_root_span("root123")
181+
assert [] == SpanStorage.get_child_spans("root123")
182+
end
183+
end

0 commit comments

Comments
 (0)