75 lines
1.5 KiB
Elixir
75 lines
1.5 KiB
Elixir
|
ExUnit.start()
|
||
|
|
||
|
TestRepo.start_link(
|
||
|
database: "opentelemetry_oban_test",
|
||
|
hostname: "localhost",
|
||
|
username: "postgres",
|
||
|
password: "postgres",
|
||
|
pool: Ecto.Adapters.SQL.Sandbox
|
||
|
)
|
||
|
|
||
|
Ecto.Adapters.SQL.Sandbox.mode(TestRepo, {:shared, self()})
|
||
|
|
||
|
defmodule PrepareOban do
|
||
|
use Ecto.Migration
|
||
|
def up, do: Oban.Migrations.up()
|
||
|
end
|
||
|
|
||
|
Ecto.Migrator.run(TestRepo, [{0, PrepareOban}], :up, all: true)
|
||
|
TestRepo.query("TRUNCATE oban_jobs", [])
|
||
|
|
||
|
Oban.start_link(
|
||
|
repo: TestRepo,
|
||
|
plugins: [Oban.Plugins.Pruner],
|
||
|
queues: [default: 10, events: 50]
|
||
|
)
|
||
|
|
||
|
defmodule TestJob do
|
||
|
use Oban.Worker, queue: :events, max_attempts: 1
|
||
|
|
||
|
@impl Oban.Worker
|
||
|
def perform(_job) do
|
||
|
:ok
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defmodule TestJobWithInnerSpan do
|
||
|
use Oban.Worker, queue: :events, max_attempts: 1
|
||
|
require OpenTelemetry.Tracer
|
||
|
|
||
|
@impl Oban.Worker
|
||
|
def perform(_job) do
|
||
|
OpenTelemetry.Tracer.with_span "span inside the job" do
|
||
|
:ok
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defmodule TestJobThatReturnsError do
|
||
|
use Oban.Worker, queue: :events, max_attempts: 1
|
||
|
|
||
|
@impl Oban.Worker
|
||
|
def perform(_job) do
|
||
|
{:error, :something}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defmodule TestJobThatThrowsException do
|
||
|
use Oban.Worker, queue: :events, max_attempts: 1
|
||
|
|
||
|
@impl Oban.Worker
|
||
|
def perform(_job) do
|
||
|
raise %UndefinedFunctionError{
|
||
|
message: "function Some.error/0 is undefined (module Some is not available)"
|
||
|
}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defmodule TestHelpers do
|
||
|
def remove_oban_handlers() do
|
||
|
Enum.each(:telemetry.list_handlers([:oban]), fn handler ->
|
||
|
:telemetry.detach(handler[:id])
|
||
|
end)
|
||
|
end
|
||
|
end
|