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. In addition, add missing spec file for mysql-client-redhat. Speed was been improved from 27.66 seconds to 20.78 seconds. Change-Id: I8c095bb4ca298255e09fd59d0e43878423693636
This commit is contained in:
parent
db48ab1fdc
commit
1633b31586
|
@ -7,7 +7,7 @@ describe 'openstack-ops-database::client' do
|
|||
include_context 'database-stubs'
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) { runner.converge(described_recipe) }
|
||||
cached(:chef_run) { runner.converge(described_recipe) }
|
||||
|
||||
it 'uses mariadb client recipe by default' do
|
||||
node.override['openstack']['db']['service_type'] = 'mariadb'
|
||||
|
|
|
@ -6,10 +6,12 @@ describe 'openstack-ops-database::mariadb-client' do
|
|||
describe 'redhat' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
|
||||
let(:node) do
|
||||
runner.node.override['openstack']['db']['service_type'] = 'mariadb'
|
||||
runner.node
|
||||
end
|
||||
let(:chef_run) { runner.converge(described_recipe) }
|
||||
cached(:chef_run) do
|
||||
runner.node.override['openstack']['db']['service_type'] = 'mariadb'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
it 'installs mariadb python client packages' do
|
||||
expect(chef_run).to install_package('MySQL-python')
|
||||
|
|
|
@ -7,15 +7,21 @@ describe 'openstack-ops-database::mariadb-client' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) do
|
||||
runner.node.override['openstack']['db']['service_type'] = 'mariadb'
|
||||
runner.node
|
||||
end
|
||||
let(:chef_run) { runner.converge(described_recipe) }
|
||||
cached(:chef_run) do
|
||||
runner.node.override['openstack']['db']['service_type'] = 'mariadb'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
|
||||
it 'includes mariadb client recipes' do
|
||||
expect(chef_run).to include_recipe('mariadb::client')
|
||||
end
|
||||
|
||||
it do
|
||||
expect(chef_run).to install_mysql2_chef_gem_mariadb('default').with(gem_version: '0.4.9')
|
||||
end
|
||||
|
||||
it 'installs mariadb python client packages' do
|
||||
expect(chef_run).to install_package('python3-mysqldb')
|
||||
end
|
||||
|
|
|
@ -7,11 +7,13 @@ describe 'openstack-ops-database::mariadb-server' do
|
|||
include_context 'database-stubs'
|
||||
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) { runner.converge(described_recipe) }
|
||||
cached(:chef_run) do
|
||||
node.override['mariadb']['install']['version'] = '5.7'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
let(:file) { chef_run.template('/etc/my.cnf.d/openstack.cnf') }
|
||||
|
||||
it 'creates template /etc/my.cnf.d/openstack.cnf' do
|
||||
node.override['mariadb']['install']['version'] = '5.7'
|
||||
expect(chef_run).to create_template(file.name).with(
|
||||
user: 'mysql',
|
||||
group: 'mysql',
|
||||
|
@ -31,8 +33,7 @@ describe 'openstack-ops-database::mariadb-server' do
|
|||
/^character-set-server = latin1$/,
|
||||
/^query_cache_size = 0$/,
|
||||
/^max_connections = 307$/].each do |line|
|
||||
expect(chef_run).to render_config_file(file.name)\
|
||||
.with_section_content('mysqld', line)
|
||||
expect(chef_run).to render_config_file(file.name).with_section_content('mysqld', line)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ describe 'openstack-ops-database::mariadb-server' do
|
|||
include_context 'database-stubs'
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) { runner.converge(described_recipe) }
|
||||
cached(:chef_run) { runner.converge(described_recipe) }
|
||||
let(:file) { chef_run.template('/etc/mysql/conf.d/openstack.cnf') }
|
||||
|
||||
it 'overrides mariadb default attributes' do
|
||||
|
@ -56,9 +56,14 @@ describe 'openstack-ops-database::mariadb-server' do
|
|||
expect(chef_run.node['mariadb']['server_root_password']).to eq 'abc123'
|
||||
end
|
||||
|
||||
it 'allow root remote access' do
|
||||
node.override['openstack']['bind_service']['db']['host'] = '192.168.1.1'
|
||||
expect(chef_run.node['mariadb']['forbid_remote_root']).to be false
|
||||
context 'set db host to 192.168.1.1' do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['bind_service']['db']['host'] = '192.168.1.1'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
it 'allow root remote access' do
|
||||
expect(chef_run.node['mariadb']['forbid_remote_root']).to be false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# encoding: UTF-8
|
||||
|
||||
require_relative 'spec_helper'
|
||||
|
||||
describe 'openstack-ops-database::mysql-client' do
|
||||
include_context 'database-stubs'
|
||||
describe 'redhat' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
cached(:chef_run) { runner.converge(described_recipe) }
|
||||
|
||||
it 'has default mysql client resource' do
|
||||
expect(chef_run).to create_mysql_client 'default'
|
||||
end
|
||||
|
||||
it 'has default mysql chef gem resource' do
|
||||
expect(chef_run).to install_mysql2_chef_gem('default').with(gem_version: '0.4.5')
|
||||
end
|
||||
|
||||
it 'installs mysql packages' do
|
||||
expect(chef_run).to install_package 'MySQL-python'
|
||||
expect(chef_run).to install_package 'mariadb-devel'
|
||||
end
|
||||
end
|
||||
end
|
|
@ -7,14 +7,14 @@ describe 'openstack-ops-database::mysql-client' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) { runner.converge(described_recipe) }
|
||||
cached(:chef_run) { runner.converge(described_recipe) }
|
||||
|
||||
it 'has default mysql client resource' do
|
||||
expect(chef_run).to create_mysql_client 'default'
|
||||
end
|
||||
|
||||
it 'has default mysql chef gem resource' do
|
||||
expect(chef_run).to install_mysql2_chef_gem 'default'
|
||||
expect(chef_run).to install_mysql2_chef_gem('default').with(gem_version: '0.4.5')
|
||||
end
|
||||
|
||||
it 'installs mysql packages' do
|
||||
|
|
|
@ -7,7 +7,7 @@ describe 'openstack-ops-database::mysql-server' do
|
|||
include_context 'database-stubs'
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) { runner.converge(described_recipe) }
|
||||
cached(:chef_run) { runner.converge(described_recipe) }
|
||||
|
||||
it 'includes mysql recipes' do
|
||||
expect(chef_run).to include_recipe 'openstack-ops-database::mysql-client'
|
||||
|
@ -24,10 +24,11 @@ describe 'openstack-ops-database::mysql-server' do
|
|||
)
|
||||
end
|
||||
|
||||
describe 'creates mysql service with different values' do
|
||||
before do
|
||||
context 'creates mysql service with different values' do
|
||||
cached(:chef_run) do
|
||||
node.override['openstack']['mysql']['data_dir'] = '/other-dir'
|
||||
node.override['openstack']['mysql']['version'] = '5.7'
|
||||
runner.converge(described_recipe)
|
||||
end
|
||||
it do
|
||||
expect(chef_run).to create_mysql_service('default').with(
|
||||
|
|
|
@ -7,7 +7,7 @@ describe 'openstack-ops-database::openstack-db' do
|
|||
describe 'ubuntu' do
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) { runner.converge(described_recipe) }
|
||||
cached(:chef_run) { runner.converge(described_recipe) }
|
||||
|
||||
it 'creates all openstack service databases and the corresponding users' do
|
||||
{
|
||||
|
|
|
@ -7,7 +7,7 @@ describe 'openstack-ops-database::server' do
|
|||
include_context 'database-stubs'
|
||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||
let(:node) { runner.node }
|
||||
let(:chef_run) { runner.converge(described_recipe) }
|
||||
cached(:chef_run) { runner.converge(described_recipe) }
|
||||
|
||||
it 'uses mariadb server recipe by default' do
|
||||
node.override['openstack']['db']['service_type'] = 'mariadb'
|
||||
|
|
|
@ -5,13 +5,14 @@ require 'chefspec/berkshelf'
|
|||
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',
|
||||
|
|
Loading…
Reference in New Issue