mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
(POOLER-137) Support integer environment variables
This commit updates vmpooler to set configuration values received via environment variables to integer values when an integer value is expected. Without this change vmpooler does not support setting integer values via environment variables. Additionally, testing is added for configuring vmpooler via environment variables. To support this testing the gem climate_control is added, which allows for testing environment variables without those set variables leaking to other tests.
This commit is contained in:
parent
a1704b239e
commit
d94b14a4d8
5 changed files with 249 additions and 17 deletions
222
spec/unit/env_config.rb
Normal file
222
spec/unit/env_config.rb
Normal file
|
|
@ -0,0 +1,222 @@
|
|||
require 'vmpooler'
|
||||
require 'climate_control'
|
||||
require 'mock_redis'
|
||||
|
||||
describe 'Vmpooler' do
|
||||
describe 'config' do
|
||||
|
||||
describe 'environment variables' do
|
||||
|
||||
test_integer = '5'
|
||||
test_string = 'test_string'
|
||||
test_bool = 'true'
|
||||
test_cases = [
|
||||
['migration_limit', test_integer, nil],
|
||||
['task_limit', test_integer, 10],
|
||||
['vm_checktime', test_integer, 1],
|
||||
['vm_lifetime', test_integer, 24],
|
||||
['timeout', test_integer, nil],
|
||||
['vm_lifetime_auth', test_integer, nil],
|
||||
['max_tries', test_integer, nil],
|
||||
['retry_factor', test_integer, nil],
|
||||
['prefix', test_string, ""],
|
||||
['logfile', test_string, nil],
|
||||
['site_name', test_string, nil],
|
||||
['domain', test_string, nil],
|
||||
['clone_target', test_string, nil],
|
||||
['create_folders', test_bool, nil],
|
||||
['create_template_delta_disks', test_bool, nil],
|
||||
['experimental_features', test_bool, nil],
|
||||
['purge_unconfigured_folders', test_bool, nil],
|
||||
['usage_stats', test_bool, nil],
|
||||
]
|
||||
|
||||
test_cases.each do |key, value, default|
|
||||
it "should set a value for #{key}" do
|
||||
with_modified_env "#{key.upcase}": value do
|
||||
test_value = value
|
||||
test_value = Integer(value) if value =~ /\d/
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:config][key]).to eq(test_value)
|
||||
end
|
||||
end
|
||||
|
||||
it "should set a default value for each #{key}" do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:config][key]).to eq(default)
|
||||
end
|
||||
|
||||
if value =~ /\d/
|
||||
it "should not set bad_data as a value for #{key}" do
|
||||
with_modified_env "#{key.upcase}": 'bad_data' do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:config][key]).to eq(default)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'redis environment variables' do
|
||||
let(:redis) { MockRedis.new }
|
||||
|
||||
test_cases = [
|
||||
['server', 'redis', 'localhost'],
|
||||
['port', '4567', nil],
|
||||
['password', 'testpass', nil],
|
||||
['data_ttl', '500', 168],
|
||||
]
|
||||
|
||||
test_cases.each do |key, value, default|
|
||||
it "should set a value for #{key}" do
|
||||
allow(Vmpooler).to receive(:new_redis).and_return(redis)
|
||||
with_modified_env "REDIS_#{key.upcase}": value do
|
||||
test_value = value
|
||||
test_value = Integer(value) if value =~ /\d/
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:redis][key]).to eq(test_value)
|
||||
end
|
||||
end
|
||||
|
||||
it "should set a default value for each #{key}" do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:redis][key]).to eq(default)
|
||||
end
|
||||
|
||||
if value =~ /\d/
|
||||
it "should not set bad_data as a value for #{key}" do
|
||||
with_modified_env "#{key.upcase}": 'bad_data' do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:redis][key]).to eq(default)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'statsd environment variables' do
|
||||
|
||||
test_cases = [
|
||||
['prefix', 'vmpooler', nil],
|
||||
['port', '4567', nil],
|
||||
]
|
||||
|
||||
test_cases.each do |key, value, default|
|
||||
it "should set a value for #{key}" do
|
||||
with_modified_env STATSD_SERVER: 'test', "STATSD_#{key.upcase}": value do
|
||||
test_value = value
|
||||
test_value = Integer(value) if value =~ /\d/
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:statsd][key]).to eq(test_value) end
|
||||
end
|
||||
|
||||
it "should set a default value for each #{key}" do
|
||||
with_modified_env STATSD_SERVER: 'test' do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:statsd][key]).to eq(default)
|
||||
end
|
||||
end
|
||||
|
||||
if value =~ /\d/
|
||||
it "should not set bad_data as a value for #{key}" do
|
||||
with_modified_env STATSD_SERVER: 'test', "STATSD_#{key.upcase}": 'bad_data' do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:statsd][key]).to eq(default)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'graphite environment variables' do
|
||||
|
||||
test_cases = [
|
||||
['prefix', 'vmpooler', nil],
|
||||
['port', '4567', nil],
|
||||
]
|
||||
|
||||
test_cases.each do |key, value, default|
|
||||
it "should set a value for #{key}" do
|
||||
with_modified_env GRAPHITE_SERVER: 'test', "GRAPHITE_#{key.upcase}": value do
|
||||
test_value = value
|
||||
test_value = Integer(value) if value =~ /\d/
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:graphite][key]).to eq(test_value)
|
||||
end
|
||||
end
|
||||
|
||||
it "should set a default value for each #{key}" do
|
||||
with_modified_env GRAPHITE_SERVER: 'test' do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:graphite][key]).to eq(default)
|
||||
end
|
||||
end
|
||||
|
||||
if value =~ /\d/
|
||||
it "should not set bad_data as a value for #{key}" do
|
||||
with_modified_env GRAPHITE_SERVER: 'test', "GRAPHITE_#{key.upcase}": 'bad_data' do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:graphite][key]).to eq(default)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'ldap environment variables' do
|
||||
|
||||
test_cases = [
|
||||
['host', 'test', nil],
|
||||
['port', '4567', nil],
|
||||
['base', 'dc=example,dc=com', nil],
|
||||
['user_object', 'uid', nil],
|
||||
]
|
||||
|
||||
test_cases.each do |key, value, default|
|
||||
it "should set a value for #{key}" do
|
||||
with_modified_env AUTH_PROVIDER: 'ldap', "LDAP_#{key.upcase}": value do
|
||||
test_value = value
|
||||
test_value = Integer(value) if value =~ /\d/
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:auth][:ldap][key]).to eq(test_value)
|
||||
end
|
||||
end
|
||||
|
||||
it "should set a default value for each #{key}" do
|
||||
with_modified_env AUTH_PROVIDER: 'ldap' do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:auth][:ldap][key]).to eq(default)
|
||||
end
|
||||
end
|
||||
|
||||
if value =~ /\d/
|
||||
it "should not set bad_data as a value for #{key}" do
|
||||
with_modified_env AUTH_PROVIDER: 'ldap', "LDAP_#{key.upcase}": 'bad_data' do
|
||||
config = Vmpooler.config
|
||||
|
||||
expect(config[:auth][:ldap][key]).to eq(default)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def with_modified_env(options, &block)
|
||||
ClimateControl.modify(options, &block)
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue