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:
Lance Albertson 2019-12-07 17:10:35 -08:00
parent db48ab1fdc
commit 1633b31586
11 changed files with 63 additions and 22 deletions

View File

@ -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'

View File

@ -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')

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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(

View File

@ -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
{

View File

@ -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'

View File

@ -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',