Files
puppet-swift/spec/classes/swift_proxy_spec.rb
Adam Vinsh c659733d39 Add hooks for external install & svc management
This adds defined anchor points for external modules to hook into the
software install, config and service dependency chain.  This allows
external modules to manage software installation (virtualenv,
containers, etc) and service management (pacemaker) without needing rely
on resources that may change or be renamed.

Change-Id: I00cf4846bb933291469be94c9debed425eddf798
2016-05-25 08:52:47 -04:00

379 lines
11 KiB
Ruby

require 'spec_helper'
describe 'swift::proxy' do
describe 'without memcached being included' do
it 'should raise an error' do
expect { catalogue }.to raise_error(Puppet::Error)
end
end
# set os so memcache will not fail
let :facts do
{:operatingsystem => 'Ubuntu',
:osfamily => 'Debian',
:processorcount => 1
}
end
describe 'with proper dependencies' do
let :pre_condition do
"class { memcached: max_memory => 1}
class { swift: swift_hash_suffix => string }"
end
describe 'without the proxy local network ip address being specified' do
if Puppet::Util::Package.versioncmp(Puppet.version, '4.3.0') >= 0
it_raises 'a Puppet::Error', /expects a value for parameter 'proxy_local_net_ip'/
else
it_raises 'a Puppet::Error', /Must pass proxy_local_net_ip/
end
end
describe 'when proxy_local_net_ip is set' do
let :params do
{:proxy_local_net_ip => '127.0.0.1'}
end
it { is_expected.to contain_package('swift-proxy').that_requires('Anchor[swift::install::begin]')
is_expected.to contain_package('swift-proxy').that_notifies('Anchor[swift::install::end]') }
it { is_expected.to contain_service('swift-proxy-server').with(
{:ensure => 'running',
:provider => nil,
:enable => true,
:hasstatus => true,
:subscribe => 'Concat[/etc/swift/proxy-server.conf]',
:tag => 'swift-service',
}
)}
it { is_expected.to contain_concat('/etc/swift/proxy-server.conf').with(
{:ensure => 'present',
:owner => 'swift',
:group => 'swift',
}
)}
it 'should build the header file with all of the default contents' do
is_expected.to contain_concat_fragment('swift_proxy').with_content('# This file is managed by puppet. Do not edit
#
[DEFAULT]
bind_port = 8080
bind_ip = 127.0.0.1
workers = 1
user = swift
log_name = proxy-server
log_facility = LOG_LOCAL1
log_level = INFO
log_headers = False
log_address = /dev/log
[pipeline:main]
pipeline = healthcheck cache tempauth proxy-server
[app:proxy-server]
use = egg:swift#proxy
set log_name = proxy-server
set log_facility = LOG_LOCAL1
set log_level = INFO
set log_address = /dev/log
log_handoffs = true
allow_account_management = true
account_autocreate = true
')
end
it { is_expected.to contain_concat__fragment('swift_proxy').with_before(
[
'Class[Swift::Proxy::Healthcheck]',
'Class[Swift::Proxy::Cache]',
'Class[Swift::Proxy::Tempauth]'
]
)}
describe "when using swift_proxy_config resource" do
let :pre_condition do
"
class { memcached: max_memory => 1}
class { swift: swift_hash_suffix => string }
swift_proxy_config { 'foo/bar': value => 'foo' }
"
end
it { is_expected.to contain_concat("/etc/swift/proxy-server.conf").that_comes_before("Swift_proxy_config[foo/bar]") }
end
describe 'when more parameters are set' do
let :params do
{
:proxy_local_net_ip => '10.0.0.2',
:port => '80',
:workers => 3,
:pipeline => ['swauth', 'proxy-server'],
:allow_account_management => false,
:account_autocreate => false,
:log_level => 'DEBUG',
:log_name => 'swift-proxy-server',
:read_affinity => 'r1z1=100, r1=200',
:write_affinity => 'r1',
:write_affinity_node_count => '2 * replicas',
:node_timeout => '20',
}
end
it 'should build the header file with provided values' do
is_expected.to contain_concat_fragment('swift_proxy').with_content('# This file is managed by puppet. Do not edit
#
[DEFAULT]
bind_port = 80
bind_ip = 10.0.0.2
workers = 3
user = swift
log_name = swift-proxy-server
log_facility = LOG_LOCAL1
log_level = DEBUG
log_headers = False
log_address = /dev/log
[pipeline:main]
pipeline = swauth proxy-server
[app:proxy-server]
use = egg:swift#proxy
set log_name = swift-proxy-server
set log_facility = LOG_LOCAL1
set log_level = DEBUG
set log_address = /dev/log
log_handoffs = true
allow_account_management = false
account_autocreate = false
sorting_method = affinity
read_affinity = r1z1=100, r1=200
write_affinity = r1
write_affinity_node_count = 2 * replicas
node_timeout = 20
')
end
if Puppet.version.to_f < 4.0
it { is_expected.to contain_concat__fragment('swift_proxy').with_before('Class[Swift::Proxy::Swauth]')}
else
it { is_expected.to contain_concat__fragment('swift_proxy').with_before(['Class[Swift::Proxy::Swauth]'])}
end
end
describe "when log udp port is set" do
context 'and log_udp_host is not set' do
let :params do
{
:proxy_local_net_ip => '10.0.0.2',
:port => '80',
:workers => 3,
:pipeline => ['swauth', 'proxy-server'],
:allow_account_management => false,
:account_autocreate => false,
:log_level => 'DEBUG',
:log_name => 'swift-proxy-server',
:log_udp_port => '514',
:read_affinity => 'r1z1=100, r1=200',
:write_affinity => 'r1',
:write_affinity_node_count => '2 * replicas',
:node_timeout => '20',
}
end
it_raises 'a Puppet::Error', /log_udp_port requires log_udp_host to be set/
end
context 'and log_udp_host is set' do
let :params do
{
:proxy_local_net_ip => '10.0.0.2',
:port => '80',
:workers => 3,
:pipeline => ['swauth', 'proxy-server'],
:allow_account_management => false,
:account_autocreate => false,
:log_level => 'DEBUG',
:log_name => 'swift-proxy-server',
:log_udp_host => '127.0.0.1',
:log_udp_port => '514',
:read_affinity => 'r1z1=100, r1=200',
:write_affinity => 'r1',
:write_affinity_node_count => '2 * replicas',
:node_timeout => '20',
}
end
it 'should build the header file with provided values' do
is_expected.to contain_concat_fragment('swift_proxy').with_content('# This file is managed by puppet. Do not edit
#
[DEFAULT]
bind_port = 80
bind_ip = 10.0.0.2
workers = 3
user = swift
log_name = swift-proxy-server
log_facility = LOG_LOCAL1
log_level = DEBUG
log_headers = False
log_address = /dev/log
# If set, log_udp_host will override log_address
log_udp_host = 127.0.0.1
log_udp_port = 514
[pipeline:main]
pipeline = swauth proxy-server
[app:proxy-server]
use = egg:swift#proxy
set log_name = swift-proxy-server
set log_facility = LOG_LOCAL1
set log_level = DEBUG
set log_address = /dev/log
log_handoffs = true
allow_account_management = false
account_autocreate = false
sorting_method = affinity
read_affinity = r1z1=100, r1=200
write_affinity = r1
write_affinity_node_count = 2 * replicas
node_timeout = 20
')
end
end
end
describe 'when supplying bad values for parameters' do
[:account_autocreate, :allow_account_management].each do |param|
it "should fail when #{param} is not passed a boolean" do
params[param] = 'false'
expect { catalogue }.to raise_error(Puppet::Error, /is not a boolean/)
end
end
let :params do
{
:proxy_local_net_ip => '127.0.0.1',
:write_affinity_node_count => '2 * replicas'
}
end
it "should fail if write_affinity_node_count is used without write_affinity" do
expect { catalogue }.to raise_error(Puppet::Error, /write_affinity_node_count requires write_affinity/)
end
end
end
end
shared_examples_for 'swift-proxy-server' do
let :params do
{ :proxy_local_net_ip => '127.0.0.1' }
end
[{ :enabled => true, :manage_service => true },
{ :enabled => false, :manage_service => true }].each do |param_hash|
context "when service is_expected.to be #{param_hash[:enabled] ? 'enabled' : 'disabled'}" do
before do
params.merge!(param_hash)
end
it 'configures swift-proxy-server service' do
is_expected.to contain_service('swift-proxy-server').with(
:name => platform_params['swift-proxy-server'],
:ensure => (param_hash[:manage_service] && param_hash[:enabled]) ? 'running' : 'stopped',
:enable => param_hash[:enabled],
:provider => platform_params['service_provider'],
:tag => 'swift-service',
)
end
end
end
context 'with disabled service managing' do
before do
params.merge!({
:manage_service => false,
:enabled => false })
end
it 'configures swift-proxy-server service' do
is_expected.to contain_service('swift-proxy-server').with(
:ensure => nil,
:name => platform_params['swift-proxy-server'],
:provider => platform_params['service_provider'],
:enable => false,
:hasstatus => true,
:subscribe => 'Concat[/etc/swift/proxy-server.conf]'
)
end
end
end
context 'on Debian platforms' do
let :facts do
{ :operatingsystem => 'Ubuntu',
:osfamily => 'Debian',
:concat_basedir => '/var/lib/puppet/concat' }
end
let :platform_params do
{ 'swift-proxy-server' => 'swift-proxy',
'service_provider' => nil
}
end
it_configures 'swift-proxy-server'
context 'on Debian platforms using swiftinit service provider' do
before do
params.merge!({ :service_provider => 'swiftinit' })
end
let :platform_params do
{ 'swift-proxy-server' => 'swift-proxy-server',
'service_provider' => 'swiftinit'
}
end
it_configures 'swift-proxy-server'
end
end
context 'on RedHat platforms' do
let :facts do
{ :osfamily => 'RedHat',
:operatingsystem => 'RedHat',
:concat_basedir => '/var/lib/puppet/concat' }
end
let :platform_params do
{
'swift-proxy-server' => 'openstack-swift-proxy',
}
end
it_configures 'swift-proxy-server'
context 'on Redhat platforms using swiftinit service provider' do
before do
params.merge!({ :service_provider => 'swiftinit' })
end
let :platform_params do
{ 'swift-proxy-server' => 'swift-proxy-server',
'service_provider' => 'swiftinit'
}
end
it_configures 'swift-proxy-server'
end
end
end