Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions test_integrations/phoenix_app/config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import Config

config :phoenix_app,
ecto_repos: [PhoenixApp.Repo],
generators: [timestamp_type: :utc_datetime]

# Configures the endpoint
Expand Down Expand Up @@ -59,6 +60,11 @@ config :logger, :console,

config :phoenix, :json_library, if(Code.ensure_loaded?(JSON), do: JSON, else: Jason)

config :opentelemetry, span_processor: {Sentry.OpenTelemetry.SpanProcessor, []}

config :opentelemetry,
sampler: {Sentry.OpenTelemetry.Sampler, [drop: ["Elixir.Oban.Stager process"]]}

# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
import_config "#{config_env()}.exs"
22 changes: 22 additions & 0 deletions test_integrations/phoenix_app/config/dev.exs
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import Config

# Configure your database
config :phoenix_app, PhoenixApp.Repo,
adapter: Ecto.Adapters.SQLite3,
database: "db/dev.sqlite3"

# For development, we disable any cache and enable
# debugging and code reloading.
#
Expand Down Expand Up @@ -73,3 +78,20 @@ config :phoenix_live_view,

# Disable swoosh api client as it is only required for production adapters.
config :swoosh, :api_client, false

dsn =
if System.get_env("SENTRY_LOCAL"),
do: System.get_env("SENTRY_DSN_LOCAL"),
else: System.get_env("SENTRY_DSN")

config :sentry,
dsn: dsn,
environment_name: :dev,
enable_source_code_context: true,
send_result: :sync,
traces_sample_rate: 1.0

config :phoenix_app, Oban,
repo: PhoenixApp.Repo,
engine: Oban.Engines.Lite,
queues: [default: 10, background: 5]
18 changes: 15 additions & 3 deletions test_integrations/phoenix_app/config/test.exs
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import Config

# Configure your database
config :phoenix_app, PhoenixApp.Repo,
adapter: Ecto.Adapters.SQLite3,
pool: Ecto.Adapters.SQL.Sandbox,
database: "db/test.sqlite3"

# We don't run a server during test. If one is required,
# you can enable the server option below.
config :phoenix_app, PhoenixAppWeb.Endpoint,
Expand All @@ -24,11 +30,17 @@ config :phoenix_live_view,
enable_expensive_runtime_checks: true

config :sentry,
dsn: "http://public:secret@localhost:8080/1",
environment_name: Mix.env(),
dsn: nil,
environment_name: :dev,
enable_source_code_context: true,
root_source_code_paths: [File.cwd!()],
test_mode: true,
send_result: :sync
send_result: :sync,
traces_sample_rate: 1.0

config :opentelemetry, span_processor: {Sentry.OpenTelemetry.SpanProcessor, []}

config :phoenix_app, Oban,
repo: PhoenixApp.Repo,
engine: Oban.Engines.Lite,
queues: [default: 10, background: 5]
104 changes: 104 additions & 0 deletions test_integrations/phoenix_app/lib/phoenix_app/accounts.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
defmodule PhoenixApp.Accounts do
@moduledoc """
The Accounts context.
"""

import Ecto.Query, warn: false
alias PhoenixApp.Repo

alias PhoenixApp.Accounts.User

@doc """
Returns the list of users.

## Examples

iex> list_users()
[%User{}, ...]

"""
def list_users do
Repo.all(User)
end

@doc """
Gets a single user.

Raises `Ecto.NoResultsError` if the User does not exist.

## Examples

iex> get_user!(123)
%User{}

iex> get_user!(456)
** (Ecto.NoResultsError)

"""
def get_user!(id), do: Repo.get!(User, id)

@doc """
Creates a user.

## Examples

iex> create_user(%{field: value})
{:ok, %User{}}

iex> create_user(%{field: bad_value})
{:error, %Ecto.Changeset{}}

"""
def create_user(attrs \\ %{}) do
%User{}
|> User.changeset(attrs)
|> Repo.insert()
end

@doc """
Updates a user.

## Examples

iex> update_user(user, %{field: new_value})
{:ok, %User{}}

iex> update_user(user, %{field: bad_value})
{:error, %Ecto.Changeset{}}

"""
def update_user(%User{} = user, attrs) do
user
|> User.changeset(attrs)
|> Repo.update()
end

@doc """
Deletes a user.

## Examples

iex> delete_user(user)
{:ok, %User{}}

iex> delete_user(user)
{:error, %Ecto.Changeset{}}

"""
def delete_user(%User{} = user) do
Repo.delete(user)
end

@doc """
Returns an `%Ecto.Changeset{}` for tracking user changes.

## Examples

iex> change_user(user)
%Ecto.Changeset{data: %User{}}

"""
def change_user(%User{} = user, attrs \\ %{}) do
User.changeset(user, attrs)
end
end
18 changes: 18 additions & 0 deletions test_integrations/phoenix_app/lib/phoenix_app/accounts/user.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
defmodule PhoenixApp.Accounts.User do
use Ecto.Schema
import Ecto.Changeset

schema "users" do
field :name, :string
field :age, :integer

timestamps(type: :utc_datetime)
end

@doc false
def changeset(user, attrs) do
user
|> cast(attrs, [:name, :age])
|> validate_required([:name, :age])
end
end
33 changes: 25 additions & 8 deletions test_integrations/phoenix_app/lib/phoenix_app/application.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,28 @@ defmodule PhoenixApp.Application do

@impl true
def start(_type, _args) do
:ok = Application.ensure_started(:inets)

:logger.add_handler(:my_sentry_handler, Sentry.LoggerHandler, %{
config: %{metadata: [:file, :line]}
})

OpentelemetryBandit.setup()
OpentelemetryPhoenix.setup(adapter: :bandit)
OpentelemetryOban.setup()
OpentelemetryEcto.setup([:phoenix_app, :repo], db_statement: :enabled)

children = [
PhoenixAppWeb.Telemetry,
PhoenixApp.Repo,
{Ecto.Migrator,
repos: Application.fetch_env!(:phoenix_app, :ecto_repos), skip: skip_migrations?()},
{DNSCluster, query: Application.get_env(:phoenix_app, :dns_cluster_query) || :ignore},
{Phoenix.PubSub, name: PhoenixApp.PubSub},
# Start the Finch HTTP client for sending emails
{Finch, name: PhoenixApp.Finch},
# Start a worker by calling: PhoenixApp.Worker.start_link(arg)
# {PhoenixApp.Worker, arg},
# Start Oban
{Oban, Application.fetch_env!(:phoenix_app, Oban)},
# Start to serve requests, typically the last entry
PhoenixAppWeb.Endpoint
]
Expand All @@ -25,12 +39,15 @@ defmodule PhoenixApp.Application do
Supervisor.start_link(children, opts)
end

# TODO: Uncomment if we ever move the endpoint from test/support to the phoenix_app dir
# Tell Phoenix to update the endpoint configuration
# whenever the application is updated.
# @impl true
# def config_change(changed, _new, removed) do
# PhoenixAppWeb.Endpoint.config_change(changed, removed)
# :ok
# end
@impl true
def config_change(changed, _new, removed) do
PhoenixAppWeb.Endpoint.config_change(changed, removed)
:ok
end

defp skip_migrations?() do
System.get_env("RELEASE_NAME") != nil
end
end
5 changes: 5 additions & 0 deletions test_integrations/phoenix_app/lib/phoenix_app/repo.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
defmodule PhoenixApp.Repo do
use Ecto.Repo,
otp_app: :phoenix_app,
adapter: Ecto.Adapters.SQLite3
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
defmodule PhoenixApp.Workers.TestWorker do
use Oban.Worker

@impl Oban.Worker
def perform(%Oban.Job{args: %{"sleep_time" => sleep_time, "should_fail" => should_fail}}) do
# Simulate some work
Process.sleep(sleep_time)

if should_fail do
raise "Simulated failure in test worker"
else
:ok
end
end

def perform(%Oban.Job{args: %{"sleep_time" => sleep_time}}) do
# Simulate some work
Process.sleep(sleep_time)
:ok
end
end
Original file line number Diff line number Diff line change
@@ -1,13 +1,29 @@
defmodule PhoenixAppWeb.PageController do
use PhoenixAppWeb, :controller

require OpenTelemetry.Tracer, as: Tracer

alias PhoenixApp.{Repo, User}

def home(conn, _params) do
# The home page is often custom made,
# so skip the default app layout.
render(conn, :home, layout: false)
end

def exception(_conn, _params) do
raise "Test exception"
end

def transaction(conn, _params) do
Tracer.with_span "test_span" do
:timer.sleep(100)
end

render(conn, :home, layout: false)
end

def users(conn, _params) do
Repo.all(User) |> Enum.map(& &1.name)

render(conn, :home, layout: false)
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ defmodule PhoenixAppWeb.Endpoint do
socket "/phoenix/live_reload/socket", Phoenix.LiveReloader.Socket
plug Phoenix.LiveReloader
plug Phoenix.CodeReloader
plug Phoenix.Ecto.CheckRepoStatus, otp_app: :phoenix_app
end

plug Phoenix.LiveDashboard.RequestLogger,
Expand Down
Loading