cookbook-openstack-compute/spec/nova-common_spec.rb

235 lines
7.6 KiB
Ruby

# encoding: UTF-8
require_relative 'spec_helper'
describe 'openstack-compute::nova-common' do
before { compute_stubs }
describe 'ubuntu' do
before do
@chef_run = ::ChefSpec::Runner.new(::UBUNTU_OPTS) do |n|
n.set['openstack']['mq'] = {
'host' => '127.0.0.1'
}
n.set['openstack']['compute']['syslog']['use'] = true
end
@chef_run.converge 'openstack-compute::nova-common'
end
it "doesn't run epel recipe" do
expect(@chef_run).to_not include_recipe 'yum::epel'
end
it 'runs logging recipe if node attributes say to' do
expect(@chef_run).to include_recipe 'openstack-common::logging'
end
it "doesn't run logging recipe" do
chef_run = ::ChefSpec::Runner.new ::UBUNTU_OPTS
chef_run.converge 'openstack-compute::nova-common'
expect(chef_run).not_to include_recipe 'openstack-common::logging'
end
it 'can converge with neutron service type' do
chef_run = ::ChefSpec::Runner.new ::UBUNTU_OPTS
node = chef_run.node
node.set['openstack']['compute']['network']['service_type'] = 'neutron'
chef_run.converge 'openstack-compute::nova-common'
end
it 'installs nova common packages' do
expect(@chef_run).to upgrade_package 'nova-common'
end
it 'installs memcache python packages' do
expect(@chef_run).to install_package 'python-memcache'
end
it 'creates the /etc/nova directory' do
expect(@chef_run).to create_directory('/etc/nova').with(
owner: 'nova',
group: 'nova',
mode: 0700
)
end
describe 'nova.conf' do
before do
@filename = '/etc/nova/nova.conf'
# need this to evaluate nova.conf.erb template
@chef_run.node.set['cpu'] = Hash.new
@chef_run.node.set.cpu.total = '2'
end
it 'creates the file' do
expect(@chef_run).to create_template('/etc/nova/nova.conf').with(
owner: 'nova',
group: 'nova',
mode: 0644
)
end
array = [/^rpc_thread_pool_size=64$/,
/^rpc_conn_pool_size=30$/,
/^rpc_response_timeout=60$/,
/^rabbit_userid=guest$/,
/^rabbit_password=rabbit-pass$/,
/^rabbit_virtual_host=\/$/,
/^rabbit_host=127.0.0.1$/,
/^rabbit_port=5672$/,
/^rabbit_use_ssl=false$/,
/^allow_resize_to_same_host=false$/,
/^vncserver_listen=127.0.1.1$/,
/^vncserver_proxyclient_address=127.0.1.1$/,
/^xvpvncproxy_host=127.0.1.1$/,
/^novncproxy_host=127.0.1.1$/,
/^force_dhcp_release=true$/,
/^rpc_backend=nova.openstack.common.rpc.impl_kombu$/,
/^libvirt_use_virtio_for_bridges=true$/
]
array.each do |content|
it "has a #{content.source[1...-1]} line" do
expect(@chef_run).to render_file(@filename).with_content(content)
end
end
[/^rabbit_hosts=/, /^rabbit_ha_queues=/, /^ec2_private_dns_show_ip$/].each do |content|
it "does not have a #{content.source[1..-1]} line" do
expect(@chef_run).not_to render_file(@filename).with_content(content)
end
end
it "the libvirt_cpu_mode is none when virt_type is 'qemu'" do
@chef_run.node.set['openstack']['compute']['libvirt']['virt_type'] = 'qemu'
expect(@chef_run).to render_file(@filename).with_content(
'libvirt_cpu_mode=none')
end
it 'has disk_allocation_ratio when the right filter is set' do
@chef_run.node.set['openstack']['compute']['scheduler']['default_filters'] = %w(
AvailabilityZoneFilter
DiskFilter
RamFilter
ComputeFilter
CoreFilter
SameHostFilter
DifferentHostFilter
)
@chef_run.converge('openstack-compute::nova-common')
expect(@chef_run).to render_file(@filename).with_content(
'disk_allocation_ratio=1.0')
end
it 'has no auto_assign_floating_ip' do
@chef_run.node.set['openstack']['compute']['network']['service_type'] = 'neutron'
expect(@chef_run).not_to render_file(@filename).with_content(
'auto_assign_floating_ip=false')
end
it 'has misc option' do
@chef_run.node.set['openstack']['compute']['misc_nova'] = ['MISC_OPTION', 'FOO']
expect(@chef_run).to render_file(@filename).with_content(
'MISC_OPTION')
end
context 'qpid' do
before do
@chef_run.node.set['openstack']['mq']['compute']['service_type'] = 'qpid'
@chef_run.converge 'openstack-compute::nova-common'
end
array = [/^qpid_hostname=127.0.0.1$/,
/^qpid_port=5672$/,
/^qpid_username=$/,
/^qpid_password=$/,
/^qpid_sasl_mechanisms=$/,
/^qpid_reconnect_timeout=0$/,
/^qpid_reconnect_limit=0$/,
/^qpid_reconnect_interval_min=0$/,
/^qpid_reconnect_interval_max=0$/,
/^qpid_reconnect_interval=0$/,
/^qpid_heartbeat=60$/,
/^qpid_protocol=tcp$/,
/^qpid_tcp_nodelay=true$/
]
array.each do |content|
it "has a #{content.source[1...-1]} line" do
expect(@chef_run).to render_file(@filename).with_content(content)
end
end
end
describe 'rabbit ha' do
before do
@chef_run = ::ChefSpec::Runner.new(::UBUNTU_OPTS) do |n|
n.set['openstack']['mq']['compute']['rabbit']['ha'] = true
n.set['cpu'] = {
'total' => '2'
}
end
@chef_run.converge 'openstack-compute::nova-common'
end
[/^rabbit_hosts=1.1.1.1:5672,2.2.2.2:5672$/, /^rabbit_ha_queues=True$/].each do |content|
it "has a #{content.source[1...-1]} line" do
expect(@chef_run).to render_file(@filename).with_content(content)
end
end
[/^rabbit_host=127.0.0.1$/, /^rabbit_port=5672$/].each do |content|
it "does not have a #{content.source[1..-1]} line" do
expect(@chef_run).not_to render_file(@filename).with_content(content)
end
end
end
end
describe 'rootwrap.conf' do
before { @filename = '/etc/nova/rootwrap.conf' }
it 'creates the /etc/nova/rootwrap.conf file' do
expect(@chef_run).to create_template(@filename).with(
user: 'root',
group: 'root',
mode: 0644
)
end
it 'template contents' do
pending 'TODO: implement'
end
end
describe '/root/openrc' do
before { @filename = '/root/openrc' }
it 'creates the /root/openrc file' do
expect(@chef_run).to create_template(@filename).with(
user: 'root',
group: 'root',
mode: 0600
)
end
[/^export OS_USERNAME=admin/, /^export OS_TENANT_NAME=admin$/, /^export OS_PASSWORD=admin$/].each do |content|
it "has a #{content.source[1...-1]} line" do
expect(@chef_run).to render_file(@filename).with_content(content)
end
end
it 'has misc option' do
@chef_run.node.set['openstack']['compute']['misc_openrc'] = ['MISC_OPTION', 'FOO']
expect(@chef_run).to render_file(@filename).with_content(
'MISC_OPTION')
end
it 'rest of template contents' do
pending 'TODO: implement'
end
end
it 'enables nova login' do
expect(@chef_run).to run_execute('usermod -s /bin/sh nova')
end
end
end