Specs for RedisConfig
Make sure :url is not present on RedisConfig.params after parsing
This commit is contained in:
parent
926cee002d
commit
ef6043880e
6 changed files with 125 additions and 1 deletions
|
@ -54,12 +54,12 @@ module Gitlab
|
|||
if redis_uri.scheme == 'unix'
|
||||
# Redis::Store does not handle Unix sockets well, so let's do it for them
|
||||
config[:path] = redis_uri.path
|
||||
config.delete(:url)
|
||||
else
|
||||
redis_hash = ::Redis::Store::Factory.extract_host_options_from_uri(redis_uri)
|
||||
config.merge!(redis_hash)
|
||||
end
|
||||
|
||||
config.delete(:url)
|
||||
config
|
||||
end
|
||||
|
||||
|
|
29
spec/fixtures/config/redis_new_format_host.yml
vendored
Normal file
29
spec/fixtures/config/redis_new_format_host.yml
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
# redis://[:password@]host[:port][/db-number][?option=value]
|
||||
# more details: http://www.iana.org/assignments/uri-schemes/prov/redis
|
||||
development:
|
||||
url: redis://:mypassword@localhost:6379/99
|
||||
sentinels:
|
||||
-
|
||||
host: localhost
|
||||
port: 26380 # point to sentinel, not to redis port
|
||||
-
|
||||
host: slave2
|
||||
port: 26381 # point to sentinel, not to redis port
|
||||
test:
|
||||
url: redis://:mypassword@localhost:6379/99
|
||||
sentinels:
|
||||
-
|
||||
host: localhost
|
||||
port: 26380 # point to sentinel, not to redis port
|
||||
-
|
||||
host: slave2
|
||||
port: 26381 # point to sentinel, not to redis port
|
||||
production:
|
||||
url: redis://:mypassword@localhost:6379/99
|
||||
sentinels:
|
||||
-
|
||||
host: slave1
|
||||
port: 26380 # point to sentinel, not to redis port
|
||||
-
|
||||
host: slave2
|
||||
port: 26381 # point to sentinel, not to redis port
|
6
spec/fixtures/config/redis_new_format_socket.yml
vendored
Normal file
6
spec/fixtures/config/redis_new_format_socket.yml
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
development:
|
||||
url: unix:/path/to/redis.sock
|
||||
test:
|
||||
url: unix:/path/to/redis.sock
|
||||
production:
|
||||
url: unix:/path/to/redis.sock
|
5
spec/fixtures/config/redis_old_format_host.yml
vendored
Normal file
5
spec/fixtures/config/redis_old_format_host.yml
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
# redis://[:password@]host[:port][/db-number][?option=value]
|
||||
# more details: http://www.iana.org/assignments/uri-schemes/prov/redis
|
||||
development: redis://:mypassword@localhost:6379/99
|
||||
test: redis://:mypassword@localhost:6379/99
|
||||
production: redis://:mypassword@localhost:6379/99
|
3
spec/fixtures/config/redis_old_format_socket.yml
vendored
Normal file
3
spec/fixtures/config/redis_old_format_socket.yml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
development: unix:/path/to/redis.sock
|
||||
test: unix:/path/to/redis.sock
|
||||
production: unix:/path/to/redis.sock
|
81
spec/lib/gitlab/redis_config_spec.rb
Normal file
81
spec/lib/gitlab/redis_config_spec.rb
Normal file
|
@ -0,0 +1,81 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::RedisConfig do
|
||||
let(:redis_config) { Rails.root.join('config', 'resque.yml') }
|
||||
|
||||
describe '.params' do
|
||||
subject { described_class.params }
|
||||
|
||||
context 'when url contains unix socket reference' do
|
||||
let(:config_old) { Rails.root.join('spec/fixtures/config/redis_old_format_socket.yml') }
|
||||
let(:config_new) { Rails.root.join('spec/fixtures/config/redis_new_format_socket.yml') }
|
||||
|
||||
context 'with old format' do
|
||||
it 'returns path key instead' do
|
||||
allow(Gitlab::RedisConfig).to receive(:config_file) { config_old }
|
||||
|
||||
is_expected.to include(path: '/path/to/redis.sock')
|
||||
is_expected.not_to have_key(:url)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with new format' do
|
||||
it 'returns path key instead' do
|
||||
allow(Gitlab::RedisConfig).to receive(:config_file) { config_new }
|
||||
|
||||
is_expected.to include(path: '/path/to/redis.sock')
|
||||
is_expected.not_to have_key(:url)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when url is host based' do
|
||||
let(:config_old) { Rails.root.join('spec/fixtures/config/redis_old_format_host.yml') }
|
||||
let(:config_new) { Rails.root.join('spec/fixtures/config/redis_new_format_host.yml') }
|
||||
|
||||
context 'with old format' do
|
||||
it 'returns hash with host, port, db, and password' do
|
||||
allow(Gitlab::RedisConfig).to receive(:config_file) { config_old }
|
||||
|
||||
is_expected.to include(host: 'localhost', password: 'mypassword', port: 6379, db: 99)
|
||||
is_expected.not_to have_key(:url)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with new format' do
|
||||
it 'returns hash with host, port, db, and password' do
|
||||
allow(Gitlab::RedisConfig).to receive(:config_file) { config_new }
|
||||
|
||||
is_expected.to include(host: 'localhost', password: 'mypassword', port: 6379, db: 99)
|
||||
is_expected.not_to have_key(:url)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.raw_params' do
|
||||
subject { described_class.send(:raw_params) }
|
||||
|
||||
it 'returns default redis url when no config file is present' do
|
||||
expect(Gitlab::RedisConfig).to receive(:fetch_config) { false }
|
||||
|
||||
is_expected.to eq(url: Gitlab::RedisConfig::DEFAULT_REDIS_URL)
|
||||
end
|
||||
|
||||
it 'returns old-style single url config in a hash' do
|
||||
expect(Gitlab::RedisConfig).to receive(:fetch_config) { 'redis://myredis:6379' }
|
||||
is_expected.to eq(url: 'redis://myredis:6379')
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe '.fetch_config' do
|
||||
subject { described_class.send(:fetch_config) }
|
||||
|
||||
it 'returns false when no config file is present' do
|
||||
allow(File).to receive(:exists?).with(redis_config) { false }
|
||||
|
||||
is_expected.to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue