Skip to content

Commit 6f8f1ea

Browse files
committed
WIP - add a transaction e2e test
1 parent 047f1a2 commit 6f8f1ea

File tree

7 files changed

+50
-2
lines changed

7 files changed

+50
-2
lines changed

test_integrations/phoenix_app/config/config.exs

+11
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,17 @@ config :logger, :console,
6060
# Use Jason for JSON parsing in Phoenix
6161
config :phoenix, :json_library, Jason
6262

63+
config :sentry,
64+
dsn: "http://public:secret@localhost:8080/1",
65+
environment_name: :test,
66+
enable_source_code_context: true,
67+
root_source_code_path: File.cwd!(),
68+
test_mode: true,
69+
send_result: :sync
70+
71+
config :opentelemetry,
72+
span_processor: {Sentry.Telemetry.SpanProcessor, []}
73+
6374
# Import environment specific config. This must remain at the bottom
6475
# of this file so it overrides the configuration defined above.
6576
import_config "#{config_env()}.exs"

test_integrations/phoenix_app/lib/phoenix_app/application.ex

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ defmodule PhoenixApp.Application do
77

88
@impl true
99
def start(_type, _args) do
10+
OpentelemetryPhoenix.setup()
11+
1012
children = [
1113
PhoenixAppWeb.Telemetry,
1214
{DNSCluster, query: Application.get_env(:phoenix_app, :dns_cluster_query) || :ignore},
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
defmodule PhoenixAppWeb.PageController do
22
use PhoenixAppWeb, :controller
33

4+
require OpenTelemetry.Tracer, as: Tracer
5+
46
def home(conn, _params) do
5-
# The home page is often custom made,
6-
# so skip the default app layout.
77
render(conn, :home, layout: false)
88
end
99

1010
def exception(_conn, _params) do
1111
raise "Test exception"
1212
end
13+
14+
def transaction(conn, _params) do
15+
Tracer.with_span("test_span") do
16+
:timer.sleep(100)
17+
end
18+
19+
render(conn, :home, layout: false)
20+
end
1321
end

test_integrations/phoenix_app/lib/phoenix_app_web/router.ex

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ defmodule PhoenixAppWeb.Router do
1919

2020
get "/", PageController, :home
2121
get "/exception", PageController, :exception
22+
get "/transaction", PageController, :transaction
2223
end
2324

2425
# Other scopes may use custom stacks.

test_integrations/phoenix_app/mix.exs

+4
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ defmodule PhoenixApp.MixProject do
5656
{:bypass, "~> 2.1", only: :test},
5757
{:hackney, "~> 1.18", only: :test},
5858

59+
{:opentelemetry, "~> 1.4"},
60+
{:opentelemetry_api, "~> 1.3"},
61+
{:opentelemetry_phoenix, "~> 1.2"},
62+
5963
{:sentry, path: "../.."}
6064
]
6165
end

test_integrations/phoenix_app/mix.lock

+3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
"nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"},
2929
"opentelemetry": {:hex, :opentelemetry, "1.4.0", "f928923ed80adb5eb7894bac22e9a198478e6a8f04020ae1d6f289fdcad0b498", [:rebar3], [{:opentelemetry_api, "~> 1.3.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:opentelemetry_semantic_conventions, "~> 0.2", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}], "hexpm", "50b32ce127413e5d87b092b4d210a3449ea80cd8224090fe68d73d576a3faa15"},
3030
"opentelemetry_api": {:hex, :opentelemetry_api, "1.3.1", "83b4713593f80562d9643c4ab0b6f80f3c5fa4c6d0632c43e11b2ccb6b04dfa7", [:mix, :rebar3], [{:opentelemetry_semantic_conventions, "~> 0.2", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}], "hexpm", "9e8a5cc38671e3ac61be48abe5f6b3afdbbb50a1dc08b7950c56f169611505c1"},
31+
"opentelemetry_phoenix": {:hex, :opentelemetry_phoenix, "1.2.0", "b8a53ee595b24970571a7d2fcaef3e4e1a021c68e97cac163ca5d9875fad5e9f", [:mix], [{:nimble_options, "~> 0.5 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:opentelemetry_process_propagator, "~> 0.2", [hex: :opentelemetry_process_propagator, repo: "hexpm", optional: false]}, {:opentelemetry_semantic_conventions, "~> 0.2", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}, {:opentelemetry_telemetry, "~> 1.0", [hex: :opentelemetry_telemetry, repo: "hexpm", optional: false]}, {:plug, ">= 1.11.0", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "acab991d14ed3efc3f780c5a20cabba27149cf731005b1cc6454c160859debe5"},
32+
"opentelemetry_process_propagator": {:hex, :opentelemetry_process_propagator, "0.3.0", "ef5b2059403a1e2b2d2c65914e6962e56371570b8c3ab5323d7a8d3444fb7f84", [:mix, :rebar3], [{:opentelemetry_api, "~> 1.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}], "hexpm", "7243cb6de1523c473cba5b1aefa3f85e1ff8cc75d08f367104c1e11919c8c029"},
3133
"opentelemetry_semantic_conventions": {:hex, :opentelemetry_semantic_conventions, "0.2.0", "b67fe459c2938fcab341cb0951c44860c62347c005ace1b50f8402576f241435", [:mix, :rebar3], [], "hexpm", "d61fa1f5639ee8668d74b527e6806e0503efc55a42db7b5f39939d84c07d6895"},
34+
"opentelemetry_telemetry": {:hex, :opentelemetry_telemetry, "1.1.1", "4a73bfa29d7780ffe33db345465919cef875034854649c37ac789eb8e8f38b21", [:mix, :rebar3], [{:opentelemetry_api, "~> 1.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ee43b14e6866123a3ee1344e3c0d3d7591f4537542c2a925fcdbf46249c9b50b"},
3235
"parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"},
3336
"phoenix": {:hex, :phoenix, "1.7.14", "a7d0b3f1bc95987044ddada111e77bd7f75646a08518942c72a8440278ae7825", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "c7859bc56cc5dfef19ecfc240775dae358cbaa530231118a9e014df392ace61a"},
3437
"phoenix_html": {:hex, :phoenix_html, "4.1.1", "4c064fd3873d12ebb1388425a8f2a19348cef56e7289e1998e2d2fa758aa982e", [:mix], [], "hexpm", "f2f2df5a72bc9a2f510b21497fd7d2b86d932ec0598f0210fed4114adc546c6f"},
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
defmodule Sentry.Integrations.Phoenix.TransactionTest do
2+
use PhoenixAppWeb.ConnCase, async: true
3+
4+
import Sentry.TestHelpers
5+
6+
setup do
7+
put_test_config(dsn: "http://public:secret@localhost:8080/1")
8+
9+
Sentry.Test.start_collecting_sentry_reports()
10+
end
11+
12+
test "GET /transaction sends exception to Sentry", %{conn: conn} do
13+
get(conn, ~p"/transaction")
14+
15+
transactions = Sentry.Test.pop_sentry_transactions()
16+
17+
assert length(transactions) == 1
18+
end
19+
end

0 commit comments

Comments
 (0)