Improve ChefSpec test speed by enabling caching
This updates all references of let(:chef_run) to cached(:chef_run) to speed up tests. By doing this, we have to create a new cached(:chef_run) block whenever we need to adjust node attributes for testing. Additional fixes: - Pull in openstack-network::ml2_core_plugin in server spec so that we get the default attributes set - Remove unused shared_examples Speed was improved from 4 minutes 18.7 seconds to 1 minute 2.73 seconds Change-Id: Ib10a6828e6886a57527a5e5a506cc57364ec0c2a
This commit is contained in:
parent
70fda6ae3a
commit
1c40ad731e
|
@ -5,7 +5,7 @@ describe 'openstack-network::_bridge_config_example' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::db_migration' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['compute']['network']['service_type'] = 'neutron'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
@ -17,18 +17,24 @@ describe 'openstack-network::db_migration' do
|
|||
)
|
||||
end
|
||||
|
||||
it 'uses db upgrade head with timeout override for neutron-server' do
|
||||
node.override['openstack']['network']['dbsync_timeout'] = 1234
|
||||
expect(chef_run).to run_bash('migrate network database').with(
|
||||
code: /upgrade head/,
|
||||
timeout: 1234
|
||||
)
|
||||
context 'uses db upgrade head with timeout override for neutron-server' do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network']['dbsync_timeout'] = 1234
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
it do
|
||||
expect(chef_run).to run_bash('migrate network database').with(
|
||||
code: /upgrade head/,
|
||||
timeout: 1234
|
||||
)
|
||||
end
|
||||
end
|
||||
describe 'run db-migration when services are enabled' do
|
||||
before do
|
||||
context 'run db-migration when services are enabled' do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network_fwaas']['enabled'] = true
|
||||
node.override['openstack']['network_lbaas']['enabled'] = true
|
||||
node.override['openstack']['network']['core_plugin_config_file'] = '/etc/neutron/plugins/ml2/ml2_conf.ini'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
it 'uses db upgrade head when lbaas is enabled' do
|
||||
migrate_cmd = %r{neutron-db-manage --subproject neutron-lbaas --config-file /etc/neutron/neutron.conf|
|
||||
|
@ -47,9 +53,10 @@ describe 'openstack-network::db_migration' do
|
|||
)
|
||||
end
|
||||
end
|
||||
describe 'run db-migration when services are enabled' do
|
||||
before do
|
||||
context 'run db-migration when services are enabled' do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network']['core_plugin_config_file'] = '/etc/neutron/plugins/ml2/ml2_conf.ini'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
it 'does not use db upgrade head when fwaas is not enabled' do
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network' do
|
|||
describe 'redhat' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::dhcp_agent' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['compute']['network']['service_type'] = 'neutron'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
|
|
@ -5,9 +5,8 @@ describe 'openstack-network::identity_registration' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['compute']['network']['service_type'] = 'neutron'
|
||||
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::l3_agent' do
|
|||
describe 'redhat' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['compute']['network']['service_type'] = 'neutron'
|
||||
stub_command('ovs-vsctl br-exists br-ex').and_return(false)
|
||||
runner.converge(described_recipe)
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::l3_agent' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network_l3']['external_network_bridge_interface'] = 'enp0s8'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
@ -38,12 +38,15 @@ describe 'openstack-network::l3_agent' do
|
|||
end
|
||||
|
||||
context 'template contents' do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network_l3']['conf']['DEFAULT']['external_network_bridge'] = 'network_l3_external_network_bridge_value'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
it_behaves_like 'common network attributes displayer', 'l3' do
|
||||
let(:file_name) { file.name }
|
||||
end
|
||||
|
||||
it 'displays the external_network_bridge l3 attribute' do
|
||||
node.override['openstack']['network_l3']['conf']['DEFAULT']['external_network_bridge'] = 'network_l3_external_network_bridge_value'
|
||||
stub_command('ovs-vsctl br-exists network_l3_external_network_bridge_value').and_return(false)
|
||||
expect(chef_run).to render_file(file.name).with_content(/^external_network_bridge = network_l3_external_network_bridge_value$/)
|
||||
end
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::lbaas' do
|
|||
describe 'redhat' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['compute']['network']['service_type'] = 'neutron'
|
||||
node.override['openstack']['network']['lbaas']['enabled'] = 'True'
|
||||
runner.converge(described_recipe)
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::lbaas' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::metadata_agent' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['compute']['network']['service_type'] = 'neutron'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::metering_agent' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
|
|
|
@ -9,18 +9,14 @@ describe 'openstack-network::ml2_linuxbridge' do
|
|||
describe 'redhat' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network']['plugins']['linuxbridge']['path'] = '/etc/neutron/plugins/ml2'
|
||||
node.override['openstack']['network']['plugins']['linuxbridge']['filename'] = 'linuxbridge_agent.ini'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
include_context 'neutron-stubs'
|
||||
|
||||
before do
|
||||
node.override['openstack']['network']['plugins']['linuxbridge']['path'] =
|
||||
'/etc/neutron/plugins/ml2'
|
||||
node.override['openstack']['network']['plugins']['linuxbridge']['filename'] =
|
||||
'linuxbridge_agent.ini'
|
||||
end
|
||||
it 'creates the /etc/neutron/plugins/ml2 agent directory' do
|
||||
expect(chef_run).to create_directory('/etc/neutron/plugins/ml2').with(
|
||||
owner: 'neutron',
|
||||
|
|
|
@ -9,19 +9,15 @@ describe 'openstack-network::ml2_linuxbridge' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['compute']['network']['service_type'] = 'neutron'
|
||||
node.override['openstack']['network']['plugins']['linuxbridge']['path'] = '/etc/neutron/plugins/linuxbridge'
|
||||
node.override['openstack']['network']['plugins']['linuxbridge']['filename'] = 'linuxbridge_conf.ini'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
include_context 'neutron-stubs'
|
||||
|
||||
before do
|
||||
node.override['openstack']['network']['plugins']['linuxbridge']['path'] =
|
||||
'/etc/neutron/plugins/linuxbridge'
|
||||
node.override['openstack']['network']['plugins']['linuxbridge']['filename'] =
|
||||
'linuxbridge_conf.ini'
|
||||
end
|
||||
it 'creates the /etc/neutron/plugins/linuxbridge agent directory' do
|
||||
expect(chef_run).to create_directory('/etc/neutron/plugins/linuxbridge').with(
|
||||
owner: 'neutron',
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::openvswitch_agent' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network']['openvswitch']['integration_bridge'] = 'br-int'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::openvswitch' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ describe 'openstack-network::plugin_config' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network']['plugins']['ml2'].tap do |ml2|
|
||||
ml2['path'] = '/etc/neutron/more_plugins'
|
||||
ml2['filename'] = 'ml2_conf.ini'
|
||||
|
|
|
@ -5,13 +5,11 @@ describe 'openstack-network::server' do
|
|||
describe 'redhat' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['compute']['network']['service_type'] = 'neutron'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
before do
|
||||
node.override['openstack']['network']['plugins']['ml2']['path'] = '/etc/neutron/plugins/ml2'
|
||||
node.override['openstack']['network']['plugins']['ml2']['filename'] = 'openvswitch_agent.ini'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
include_context 'neutron-stubs'
|
||||
|
||||
|
|
|
@ -5,13 +5,8 @@ describe 'openstack-network::server' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) do
|
||||
node.override['openstack']['compute']['network']['service_type'] = 'neutron'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
before do
|
||||
node.override['openstack']['network']['plugins']['ml2']['path'] = '/etc/neutron/plugins/ml2'
|
||||
node.override['openstack']['network']['plugins']['ml2']['filename'] = 'ml2_conf.ini'
|
||||
cached(:chef_run) do
|
||||
runner.converge('openstack-network::ml2_core_plugin', described_recipe)
|
||||
end
|
||||
include_context 'neutron-stubs'
|
||||
|
||||
|
@ -20,12 +15,16 @@ describe 'openstack-network::server' do
|
|||
expect(chef_run).to upgrade_package 'neutron-server'
|
||||
end
|
||||
|
||||
it 'allows overriding package names' do
|
||||
cust_pkgs = ['my-neutron', 'my-other-neutron']
|
||||
node.override['openstack']['network']['platform']['neutron_server_packages'] = cust_pkgs
|
||||
|
||||
cust_pkgs.each do |pkg|
|
||||
expect(chef_run).to upgrade_package(pkg)
|
||||
context 'allows overriding package names' do
|
||||
cust_pkgs = %w(my-neutron my-other-neutron)
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network']['platform']['neutron_server_packages'] = cust_pkgs
|
||||
runner.converge('openstack-network::ml2_core_plugin', described_recipe)
|
||||
end
|
||||
it do
|
||||
cust_pkgs.each do |pkg|
|
||||
expect(chef_run).to upgrade_package(pkg)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -44,25 +43,38 @@ describe 'openstack-network::server' do
|
|||
.to subscribe_to('template[/etc/neutron/neutron.conf]').on(:restart).delayed
|
||||
end
|
||||
|
||||
it do
|
||||
node.override['openstack']['network']['policyfile_url'] = 'http://www.someurl.com'
|
||||
expect(neutron_service)
|
||||
.to subscribe_to('remote_file[/etc/neutron/policy.json]').on(:restart).delayed
|
||||
context 'set policyfile_url' do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network']['policyfile_url'] = 'http://www.someurl.com'
|
||||
runner.converge('openstack-network::ml2_core_plugin', described_recipe)
|
||||
end
|
||||
it do
|
||||
expect(neutron_service)
|
||||
.to subscribe_to('remote_file[/etc/neutron/policy.json]').on(:restart).delayed
|
||||
end
|
||||
end
|
||||
|
||||
it 'allows overriding service names' do
|
||||
node.override['openstack']['network']['platform']['neutron_server_service'] = 'my-neutron-server'
|
||||
|
||||
expect(chef_run).to enable_service('neutron-server').with(
|
||||
service_name: 'my-neutron-server'
|
||||
)
|
||||
context 'allows overriding service names' do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network']['platform']['neutron_server_service'] = 'my-neutron-server'
|
||||
runner.converge('openstack-network::ml2_core_plugin', described_recipe)
|
||||
end
|
||||
it do
|
||||
expect(chef_run).to enable_service('neutron-server').with(
|
||||
service_name: 'my-neutron-server'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
it 'allows overriding package options' do
|
||||
context 'allows overriding package options' do
|
||||
cust_opts = ['-o', 'Dpkg::Options::=--force-confold', '-o', 'Dpkg::Options::=--force-confdef', '--force-yes']
|
||||
node.override['openstack']['network']['platform']['package_overrides'] = cust_opts
|
||||
|
||||
expect(chef_run).to upgrade_package('neutron-server').with(options: cust_opts)
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['network']['platform']['package_overrides'] = cust_opts
|
||||
runner.converge('openstack-network::ml2_core_plugin', described_recipe)
|
||||
end
|
||||
it do
|
||||
expect(chef_run).to upgrade_package('neutron-server').with(options: cust_opts)
|
||||
end
|
||||
end
|
||||
|
||||
it 'does not upgrade openvswitch package or the agent' do
|
||||
|
|
|
@ -2,28 +2,25 @@
|
|||
require 'chefspec'
|
||||
require 'pry'
|
||||
require 'chefspec/berkshelf'
|
||||
|
||||
ChefSpec::Coverage.start! { add_filter 'openstack-network' }
|
||||
|
||||
require 'chef/application'
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.color = true
|
||||
config.formatter = :documentation
|
||||
config.log_level = :fatal
|
||||
config.log_level = :warn
|
||||
end
|
||||
|
||||
REDHAT_OPTS = {
|
||||
platform: 'redhat',
|
||||
version: '7.4',
|
||||
version: '7',
|
||||
}.freeze
|
||||
UBUNTU_OPTS = {
|
||||
platform: 'ubuntu',
|
||||
version: '16.04',
|
||||
version: '18.04',
|
||||
}.freeze
|
||||
CENTOS_OPTS = {
|
||||
platform: 'centos',
|
||||
version: '7.4.1708',
|
||||
version: '7',
|
||||
}.freeze
|
||||
|
||||
shared_context 'neutron-stubs' do
|
||||
|
@ -54,30 +51,14 @@ shared_context 'neutron-stubs' do
|
|||
.with('network')
|
||||
.and_return('rabbit://guest:mypass@127.0.0.1:5672')
|
||||
end
|
||||
shared_examples 'custom template banner displayer' do
|
||||
it 'shows the custom banner' do
|
||||
node.override['openstack']['network']['custom_template_banner'] = 'custom_template_banner_value'
|
||||
expect(chef_run).to render_file(file_name).with_content(/^custom_template_banner_value$/)
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples 'common network attributes displayer' do |plugin|
|
||||
it 'displays the interface_driver common attribute' do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']["network_#{plugin}"]['conf']['DEFAULT']['interface_driver'] = 'network_interface_driver_value'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
it 'displays the interface_driver common attribute' do
|
||||
expect(chef_run).to render_file(file_name).with_content(/^interface_driver = network_interface_driver_value$/)
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples 'dhcp agent template configurator' do
|
||||
it_behaves_like 'custom template banner displayer'
|
||||
|
||||
it_behaves_like 'common network attributes displayer', 'dhcp'
|
||||
|
||||
%w(resync_interval ovs_use_veth enable_isolated_metadata
|
||||
enable_metadata_network dnsmasq_lease_max dhcp_delete_namespaces).each do |attr|
|
||||
it "displays the #{attr} dhcp attribute" do
|
||||
node.override['openstack']['network_dhcp']['conf']['DEFAULT'][attr] = "network_dhcp_#{attr}_value"
|
||||
expect(chef_run).to render_file(file_name).with_content(/^#{attr} = network_dhcp_#{attr}_value$/)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue