mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-07-25 16:03:48 +00:00
61 lines
1.7 KiB
Ruby
61 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::Redis::RateLimiting do
|
|
include_examples "redis_new_instance_shared_examples", 'rate_limiting', Gitlab::Redis::Cache
|
|
|
|
describe '.with_suppressed_errors' do
|
|
subject(:ping) { described_class.with_suppressed_errors(&:ping) }
|
|
|
|
before do
|
|
allow(described_class).to receive(:with).and_yield(redis)
|
|
end
|
|
|
|
context 'when using Redis' do
|
|
let(:redis) { described_class.send(:init_redis, { url: 'redis://127.0.0.0:0' }) }
|
|
|
|
it 'tracks the error and returns nil' do
|
|
expect(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception)
|
|
.with(a_kind_of(::Redis::CannotConnectError))
|
|
|
|
expect(ping).to be_nil
|
|
end
|
|
end
|
|
|
|
context 'when using RedisCluster' do
|
|
let(:redis) do
|
|
described_class.send(:init_redis, {
|
|
nodes: [
|
|
{ host: '127.0.0.0', port: 0, db: 1 },
|
|
{ host: '127.0.0.0', port: 0, db: 2 },
|
|
{ host: '127.0.0.0', port: 0, db: 3 }
|
|
]
|
|
})
|
|
end
|
|
|
|
it 'tracks the error and returns nil' do
|
|
expect(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception)
|
|
.with(a_kind_of(::Redis::Cluster::InitialSetupError))
|
|
|
|
expect(ping).to be_nil
|
|
end
|
|
end
|
|
|
|
context 'with a RedisClient exception' do
|
|
let(:redis) { instance_double(Redis) }
|
|
|
|
before do
|
|
allow(redis).to receive(:ping).and_raise(::RedisClient::ReadTimeoutError)
|
|
end
|
|
|
|
it 'tracks the error and returns nil' do
|
|
expect(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception)
|
|
.with(a_kind_of(::RedisClient::ReadTimeoutError))
|
|
|
|
expect(ping).to be_nil
|
|
end
|
|
end
|
|
end
|
|
end
|