Skip to content

Commit 7ffca1d

Browse files
committed
test(support): Add support for OTP 20.0 and Elixir 1.5.
1 parent 2fdea46 commit 7ffca1d

File tree

4 files changed

+77
-20
lines changed

4 files changed

+77
-20
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ language: elixir
22
elixir:
33
- 1.3.4
44
- 1.4
5+
- 1.5
56
otp_release:
67
- 18.3
78
- 19.3
9+
- 20.0
810

911
matrix:
1012
allow_failures:

test/event_test.exs

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,39 @@ defmodule Sentry.EventTest do
1111
end
1212
end
1313

14+
def get_stacktrace_frames_for_elixir() do
15+
cond do
16+
Version.match?(System.version, "< 1.4.0") ->
17+
[
18+
%{filename: nil, function: "Sentry.Event.not_a_function/3", lineno: nil, module: Sentry.Event, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{"arg0" => "1", "arg1" => "2", "arg2" => "3"}},
19+
%{filename: "test/event_test.exs", function: "Sentry.EventTest.event_generated_by_exception/1", lineno: 8, module: Sentry.EventTest, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
20+
%{filename: "test/event_test.exs", function: "Sentry.EventTest.\"test parses error exception\"/1", lineno: 48, module: Sentry.EventTest, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
21+
%{filename: "lib/ex_unit/runner.ex", function: "ExUnit.Runner.exec_test/1", lineno: 296, module: ExUnit.Runner, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
22+
%{filename: "timer.erl", function: ":timer.tc/1", lineno: 166, module: :timer, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
23+
%{filename: "lib/ex_unit/runner.ex", function: "anonymous fn/3 in ExUnit.Runner.spawn_test/3", lineno: 246, module: ExUnit.Runner, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
24+
]
25+
Version.match?(System.version, "< 1.5.0") ->
26+
[
27+
%{filename: nil, function: "Sentry.Event.not_a_function/3", lineno: nil, module: Sentry.Event, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{"arg0" => "1", "arg1" => "2", "arg2" => "3"}},
28+
%{filename: "test/event_test.exs", function: "Sentry.EventTest.event_generated_by_exception/1", lineno: 8, module: Sentry.EventTest, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
29+
%{filename: "test/event_test.exs", function: "Sentry.EventTest.\"test parses error exception\"/1", lineno: 48, module: Sentry.EventTest, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
30+
%{filename: "lib/ex_unit/runner.ex", function: "ExUnit.Runner.exec_test/1", lineno: 302, module: ExUnit.Runner, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
31+
%{filename: "timer.erl", function: ":timer.tc/1", lineno: 166, module: :timer, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
32+
%{filename: "lib/ex_unit/runner.ex", function: "anonymous fn/3 in ExUnit.Runner.spawn_test/3", lineno: 250, module: ExUnit.Runner, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
33+
]
34+
Version.match?(System.version, ">= 1.5.0") ->
35+
[
36+
%{filename: nil, function: "Sentry.Event.not_a_function/3", lineno: nil, module: Sentry.Event, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{"arg0" => "1", "arg1" => "2", "arg2" => "3"}},
37+
%{filename: "test/event_test.exs", function: "Sentry.EventTest.event_generated_by_exception/1", lineno: 8, module: Sentry.EventTest, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
38+
%{filename: "test/event_test.exs", function: "Sentry.EventTest.\"test parses error exception\"/1", lineno: 48, module: Sentry.EventTest, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
39+
%{filename: "lib/ex_unit/runner.ex", function: "ExUnit.Runner.exec_test/1", lineno: 292, module: ExUnit.Runner, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
40+
%{filename: "timer.erl", function: ":timer.tc/1", lineno: 166, module: :timer, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
41+
%{filename: "lib/ex_unit/runner.ex", function: "anonymous fn/3 in ExUnit.Runner.spawn_test/3", lineno: 240, module: ExUnit.Runner, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
42+
]
43+
end
44+
end
45+
46+
1447
test "parses error exception" do
1548
event = event_generated_by_exception()
1649

@@ -26,13 +59,7 @@ defmodule Sentry.EventTest do
2659
assert event.message == "(UndefinedFunctionError) function Sentry.Event.not_a_function/3 is undefined or private"
2760
assert is_binary(event.server_name)
2861
assert event.stacktrace == %{
29-
frames: Enum.reverse([
30-
%{filename: nil, function: "Sentry.Event.not_a_function/3", lineno: nil, module: Sentry.Event, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{"arg0" => "1", "arg1" => "2", "arg2" => "3"}},
31-
%{filename: "test/event_test.exs", function: "Sentry.EventTest.event_generated_by_exception/1", lineno: 8, module: Sentry.EventTest, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
32-
%{filename: "test/event_test.exs", function: "Sentry.EventTest.\"test parses error exception\"/1", lineno: 15, module: Sentry.EventTest, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
33-
%{filename: "lib/ex_unit/runner.ex", function: "ExUnit.Runner.exec_test/1", lineno: 302, module: ExUnit.Runner, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
34-
%{filename: "timer.erl", function: ":timer.tc/1", lineno: 166, module: :timer, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}},
35-
%{filename: "lib/ex_unit/runner.ex", function: "anonymous fn/3 in ExUnit.Runner.spawn_test/3", lineno: 250, module: ExUnit.Runner, context_line: nil, post_context: [], pre_context: [], in_app: false, vars: %{}}])
62+
frames: get_stacktrace_frames_for_elixir() |> Enum.reverse
3663
}
3764
assert event.tags == %{}
3865
assert event.timestamp =~ ~r/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/

test/logger_test.exs

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -81,21 +81,44 @@ defmodule Sentry.LoggerTest do
8181
test "Bad function call causing GenServer crash makes call to Sentry API" do
8282
Process.flag :trap_exit, true
8383
bypass = Bypass.open
84+
{otp_version, ""} = Float.parse(System.otp_release)
85+
8486
Bypass.expect bypass, fn conn ->
8587
{:ok, body, conn} = Plug.Conn.read_body(conn)
8688
json = Poison.decode!(body)
87-
assert List.first(json["exception"])["type"] == "exit"
88-
assert List.first(json["exception"])["value"] == "** (exit) :function_clause"
89-
assert List.last(json["stacktrace"]["frames"]) == %{"filename" => "lib/calendar.ex",
90-
"function" => "NaiveDateTime.from_erl/2",
91-
"in_app" => false,
92-
"lineno" => 1214,
93-
"module" => "Elixir.NaiveDateTime",
94-
"context_line" => nil,
95-
"pre_context" => [],
96-
"post_context" => [],
97-
"vars" => %{"arg0" => "{}", "arg1" => "{0, 0}"}
98-
}
89+
cond do
90+
otp_version >= 20.0 ->
91+
assert List.first(json["exception"])["type"] == "Elixir.FunctionClauseError"
92+
assert String.starts_with?(List.first(json["exception"])["value"], "no function clause")
93+
94+
otp_version < 20.0 ->
95+
assert List.first(json["exception"])["type"] == "exit"
96+
assert List.first(json["exception"])["value"] == "** (exit) :function_clause"
97+
end
98+
99+
cond do
100+
Version.match?(System.version, "< 1.4.0") ->
101+
assert List.last(json["stacktrace"]["frames"])["vars"] == %{"arg0" => "{}", "arg1" => "{}"}
102+
assert List.last(json["stacktrace"]["frames"])["function"] == "NaiveDateTime.from_erl/2"
103+
assert List.last(json["stacktrace"]["frames"])["filename"] == "lib/calendar.ex"
104+
assert List.last(json["stacktrace"]["frames"])["lineno"] == 878
105+
Version.match?(System.version, "< 1.5.0") ->
106+
assert List.last(json["stacktrace"]["frames"])["vars"] == %{"arg0" => "{}", "arg1" => "{}"}
107+
assert List.last(json["stacktrace"]["frames"])["function"] == "NaiveDateTime.from_erl/2"
108+
assert List.last(json["stacktrace"]["frames"])["filename"] == "lib/calendar.ex"
109+
assert List.last(json["stacktrace"]["frames"])["lineno"] == 1214
110+
Version.match?(System.version, ">= 1.5.0") ->
111+
assert List.last(json["stacktrace"]["frames"])["vars"] == %{"arg0" => "{}", "arg1" => "{}", "arg2" => "{}"}
112+
assert List.last(json["stacktrace"]["frames"])["filename"] == "lib/calendar/naive_datetime.ex"
113+
assert List.last(json["stacktrace"]["frames"])["function"] == "NaiveDateTime.from_erl/3"
114+
assert List.last(json["stacktrace"]["frames"])["lineno"] == 522
115+
end
116+
117+
assert %{"in_app" => false,
118+
"module" => "Elixir.NaiveDateTime",
119+
"context_line" => nil,
120+
"pre_context" => [],
121+
"post_context" => []} = List.last(json["stacktrace"]["frames"])
99122
assert conn.request_path == "/api/1/store/"
100123
assert conn.method == "POST"
101124
Plug.Conn.resp(conn, 200, ~s<{"id": "340"}>)

test/support/test_gen_server.exs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@ defmodule Sentry.TestGenServer do
2929
end
3030

3131
def handle_info(:invalid_function, state) do
32-
NaiveDateTime.from_erl({})
32+
cond do
33+
Version.match?(System.version, ">= 1.5.0") ->
34+
NaiveDateTime.from_erl({}, {}, {})
35+
Version.match?(System.version, "< 1.5.0") ->
36+
NaiveDateTime.from_erl({}, {})
37+
end
3338
{:ok, state}
3439
end
3540

0 commit comments

Comments
 (0)