Specs for RedisConfig

Make sure :url is not present on RedisConfig.params after parsing
This commit is contained in:
Gabriel Mazetto 2015-11-27 14:32:32 -02:00 committed by Gabriel Mazetto
parent 926cee002d
commit ef6043880e
6 changed files with 125 additions and 1 deletions

View file

@ -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

View 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

View 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

View 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

View file

@ -0,0 +1,3 @@
development: unix:/path/to/redis.sock
test: unix:/path/to/redis.sock
production: unix:/path/to/redis.sock

View 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