diff options
Diffstat (limited to 'spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb')
-rw-r--r-- | spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb b/spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb new file mode 100644 index 00000000000..153cf43be0a --- /dev/null +++ b/spec/lib/gitlab/metrics/subscribers/action_cable_spec.rb @@ -0,0 +1,106 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Metrics::Subscribers::ActionCable, :request_store do + let(:subscriber) { described_class.new } + let(:counter) { double(:counter) } + let(:data) { { data: { event: 'updated' } } } + let(:channel_class) { 'IssuesChannel' } + let(:event) do + double( + :event, + name: name, + payload: payload + ) + end + + describe '#transmit' do + let(:name) { 'transmit.action_cable' } + let(:via) { 'streamed from issues:Z2lkOi8vZs2l0bGFiL0lzc3VlLzQ0Ng' } + let(:payload) do + { + channel_class: channel_class, + via: via, + data: data + } + end + + it 'tracks the transmit event' do + allow(::Gitlab::Metrics).to receive(:counter).with( + :action_cable_single_client_transmissions_total, /transmit/ + ).and_return(counter) + + expect(counter).to receive(:increment) + + subscriber.transmit(event) + end + end + + describe '#broadcast' do + let(:name) { 'broadcast.action_cable' } + let(:coder) { ActiveSupport::JSON } + let(:message) do + { event: :updated } + end + + let(:broadcasting) { 'issues:Z2lkOi8vZ2l0bGFiL0lzc3VlLzQ0Ng' } + let(:payload) do + { + broadcasting: broadcasting, + message: message, + coder: coder + } + end + + it 'tracks the broadcast event' do + allow(::Gitlab::Metrics).to receive(:counter).with( + :action_cable_broadcasts_total, /broadcast/ + ).and_return(counter) + + expect(counter).to receive(:increment) + + subscriber.broadcast(event) + end + end + + describe '#transmit_subscription_confirmation' do + let(:name) { 'transmit_subscription_confirmation.action_cable' } + let(:channel_class) { 'IssuesChannel' } + let(:payload) do + { + channel_class: channel_class + } + end + + it 'tracks the subscription confirmation event' do + allow(::Gitlab::Metrics).to receive(:counter).with( + :action_cable_subscription_confirmations_total, /confirm/ + ).and_return(counter) + + expect(counter).to receive(:increment) + + subscriber.transmit_subscription_confirmation(event) + end + end + + describe '#transmit_subscription_rejection' do + let(:name) { 'transmit_subscription_rejection.action_cable' } + let(:channel_class) { 'IssuesChannel' } + let(:payload) do + { + channel_class: channel_class + } + end + + it 'tracks the subscription rejection event' do + allow(::Gitlab::Metrics).to receive(:counter).with( + :action_cable_subscription_rejections_total, /reject/ + ).and_return(counter) + + expect(counter).to receive(:increment) + + subscriber.transmit_subscription_rejection(event) + end + end +end |