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
13 changes: 11 additions & 2 deletions config/test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,17 @@ config :sanbase,
available_slugs_module: Sanbase.DirectAvailableSlugs

config :sanbase, Sanbase.EventBus,
disable_app_notification_subscriber: true,
disable_user_events_subscriber: true
extra_subscribers: [
Sanbase.EventBus.NoopSubscriber
],
disabled_subscribers: [
Sanbase.EventBus.KafkaExporterSubscriber,
Sanbase.EventBus.BillingEventSubscriber,
Sanbase.EventBus.MetricRegistrySubscriber,
Sanbase.EventBus.NotificationsSubscriber,
Sanbase.EventBus.AppNotificationsSubscriber,
Sanbase.EventBus.UserEventsSubscriber
]

config :sanbase, Sanbase, url: {:system, "SANBASE_URL", ""}

Expand Down
47 changes: 26 additions & 21 deletions lib/sanbase/event_bus/event_bus.ex
Original file line number Diff line number Diff line change
Expand Up @@ -55,30 +55,35 @@ defmodule Sanbase.EventBus do
__MODULE__.AppNotificationsSubscriber
]

@register_at_start_subscribers @subscribers
|> then(fn list ->
if Application.compile_env(
:sanbase,
[Sanbase.EventBus, :disable_app_notification_subscriber]
) do
List.delete(list, __MODULE__.AppNotificationsSubscriber)
else
list
end
end)
|> then(fn list ->
if Application.compile_env(
:sanbase,
[Sanbase.EventBus, :disable_user_events_subscriber]
) do
List.delete(list, __MODULE__.UserEventsSubscriber)
else
list
end
end)
@extra_subscribers Application.compile_env(
:sanbase,
[Sanbase.EventBus, :extra_subscribers],
[]
)

@disabled_subscribers Application.compile_env(
:sanbase,
[Sanbase.EventBus, :disabled_subscribers],
[]
)

# Add the extra to the main @subscribers so they can be started at launch.
# All subscribers are started at launch, but the disabled ones are not
# registered
@subscribers @subscribers ++ @extra_subscribers

@register_at_start_subscribers @subscribers -- @disabled_subscribers

def children(), do: @subscribers

def subscribe_subscriber(subscriber) do
EventBus.subscribe({subscriber, subscriber.topics()})
end

def unsubscribe_subscriber(subscriber) do
EventBus.unsubscribe(subscriber)
end

def init() do
for topic <- @topics, do: EventBus.register_topic(topic)

Expand Down
24 changes: 24 additions & 0 deletions lib/sanbase/event_bus/noop_subscriber.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
defmodule Sanbase.EventBus.NoopSubscriber do
@moduledoc """
A no-op EventBus subscriber used only in tests.

Subscribes to all topics so the EventBus does not emit a warning about
topics having no subscribers when the other subscribers are disabled.
"""
use GenServer

def topics(), do: [".*"]

def start_link(opts \\ []) do
GenServer.start_link(__MODULE__, opts, name: Keyword.get(opts, :name, __MODULE__))
end

def init(opts) do
{:ok, opts}
end

def process({_topic, _id} = event_shadow) do
spawn(fn -> EventBus.mark_as_completed({__MODULE__, event_shadow}) end)
:ok
end
end
7 changes: 2 additions & 5 deletions test/sanbase/app_notifications/app_notifications_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,12 @@ defmodule Sanbase.AppNotificationsTest do
alias Sanbase.Vote

setup_all do
# The GenServer is already running (started by supervision tree)
# but not subscribed to EventBus (disabled in test.exs config).
# We only need to subscribe it to EventBus topics.
subscriber = Sanbase.EventBus.AppNotificationsSubscriber
EventBus.subscribe({subscriber, subscriber.topics()})
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
EventBus.unsubscribe(subscriber)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

Expand Down
10 changes: 10 additions & 0 deletions test/sanbase/email/emails_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,16 @@ defmodule Sanbase.EmailsTest do
setup :set_mox_from_context
setup :verify_on_exit!

setup_all do
subscriber = Sanbase.EventBus.BillingEventSubscriber
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

setup_with_mocks([
{StripeApi, [:passthrough],
[
Expand Down
10 changes: 10 additions & 0 deletions test/sanbase/event_bus/kafka_exporter_subscriber_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ defmodule Sanbase.EventBus.KafkaExporterSubscriberTest do
setup :set_mox_from_context
setup :verify_on_exit!

setup_all do
subscriber = Sanbase.EventBus.KafkaExporterSubscriber
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

test "check kafka message format" do
# NOTE: This test is consistently failing for unknown reasons. Remove it for
# now to unblock the other PRs and it will be revised later
Expand Down
12 changes: 11 additions & 1 deletion test/sanbase/metric_registry/metric_registry_test.exs
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
defmodule Sanbase.MetricRegistyTest do
use Sanbase.DataCase
use Sanbase.DataCase, async: false
import ExUnit.CaptureLog

setup_all do
subscriber = Sanbase.EventBus.MetricRegistrySubscriber
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

test "creating a new metric" do
log =
capture_log(fn ->
Expand Down
4 changes: 2 additions & 2 deletions test/sanbase/telegram/telegram_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ defmodule Sanbase.TelegramTest do

setup_all do
subscriber = Sanbase.EventBus.UserEventsSubscriber
EventBus.subscribe({subscriber, subscriber.topics()})
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
EventBus.unsubscribe(subscriber)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

Expand Down
10 changes: 8 additions & 2 deletions test/sanbase_web/api_call_limit/api_call_limit_api_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,13 @@ defmodule SanbaseWeb.ApiCallLimitTest do
setup_all do
Application.put_env(SanbaseWeb.Graphql.AbsintheBeforeSend, :api_call_exporting_enabled, true)

subscriber = Sanbase.EventBus.BillingEventSubscriber
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Application.delete_env(SanbaseWeb.Graphql.AbsintheBeforeSend, :api_call_exporting_enabled)
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

Expand Down Expand Up @@ -460,8 +465,9 @@ defmodule SanbaseWeb.ApiCallLimitTest do
|> Sanbase.Mock.run_with_mocks(fn ->
Sanbase.Parallel.map(
1..(api_calls_per_iteration - 1),
fn i ->
{:ok, _} = Sanbase.Accounts.User.change_username(context.user, "username_#{i}")
fn _i ->
{:ok, _} =
Sanbase.Accounts.User.change_username(context.user, "username_#{UUID.uuid4()}")

res = make_api_call(context.apikey_conn, [])
assert res.status == 200
Expand Down
7 changes: 2 additions & 5 deletions test/sanbase_web/channels/notifications_channel_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,12 @@ defmodule SanbaseWeb.NotificationsChannelTest do
import SanbaseWeb.Graphql.TestHelpers

setup_all do
# The GenServer is already running (started by supervision tree)
# but not subscribed to EventBus (disabled in test.exs config).
# We only need to subscribe it to EventBus topics.
subscriber = Sanbase.EventBus.AppNotificationsSubscriber
EventBus.subscribe({subscriber, subscriber.topics()})
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
EventBus.unsubscribe(subscriber)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

Expand Down
4 changes: 2 additions & 2 deletions test/sanbase_web/controllers/mailjet_controller_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ defmodule SanbaseWeb.MailjetControllerTest do

setup_all do
subscriber = Sanbase.EventBus.UserEventsSubscriber
EventBus.subscribe({subscriber, subscriber.topics()})
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
EventBus.unsubscribe(subscriber)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@ defmodule SanbaseWeb.Graphql.AppNotificationApiTest do

setup_all do
subscriber = Sanbase.EventBus.AppNotificationsSubscriber

EventBus.subscribe({subscriber, subscriber.topics()})
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
EventBus.unsubscribe(subscriber)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

Expand Down
10 changes: 10 additions & 0 deletions test/sanbase_web/graphql/billing/subscribe_api_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ defmodule SanbaseWeb.Graphql.Billing.SubscribeApiTest do
setup :set_mox_from_context
setup :verify_on_exit!

setup_all do
subscriber = Sanbase.EventBus.BillingEventSubscriber
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

setup_with_mocks([
{StripeApi, [:passthrough],
[create_product: fn _ -> StripeApiTestResponse.create_product_resp() end]},
Expand Down
4 changes: 2 additions & 2 deletions test/sanbase_web/graphql/user/user_settings_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -216,11 +216,11 @@ defmodule SanbaseWeb.Graphql.UserSettingsTest do
describe "email settings" do
setup do
subscriber = Sanbase.EventBus.UserEventsSubscriber
EventBus.subscribe({subscriber, subscriber.topics()})
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
EventBus.unsubscribe(subscriber)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

Expand Down
10 changes: 10 additions & 0 deletions test/sanbase_web/stripe_webhook_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ defmodule SanbaseWeb.StripeWebhookTest do
setup :set_mox_from_context
setup :verify_on_exit!

setup_all do
subscriber = Sanbase.EventBus.BillingEventSubscriber
Sanbase.EventBus.subscribe_subscriber(subscriber)

on_exit(fn ->
Sanbase.EventBus.drain_topics(subscriber.topics(), 10_000)
Sanbase.EventBus.unsubscribe_subscriber(subscriber)
end)
end

setup_with_mocks([
{StripeApi, [],
[
Expand Down