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 swift_store RHEL ChefSpec test

Speed was improved from 40.38 seconds to 28.25 seconds

Change-Id: I42a56190cc090bd25900a1fbd5b5f160e5468533
This commit is contained in:
Lance Albertson 2019-12-17 21:11:44 -08:00
parent 12bfe6e13e
commit b27882b9c0
5 changed files with 88 additions and 56 deletions

View File

@ -5,7 +5,7 @@ describe 'openstack-image::api' 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

View File

@ -4,7 +4,7 @@ require_relative 'spec_helper'
describe 'openstack-image::identity_registration' 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

View File

@ -5,7 +5,7 @@ describe 'openstack-image::image_upload' do
describe 'ubuntu' do
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS.merge(step_into: ['openstack_image_image'])) }
let(:node) { runner.node }
let(:chef_run) do
cached(:chef_run) do
runner.converge(described_recipe)
end
@ -31,62 +31,81 @@ describe 'openstack-image::image_upload' do
)
end
it 'raises error for unsupported image extension type' do
node.override['openstack']['image']['upload_images'] = ['image1']
node.override['openstack']['image']['upload_image']['image1'] = 'http://download.net/image.xxx'
expect { chef_run }.to raise_error(ArgumentError)
context 'raises error for unsupported image extension type' do
cached(:chef_run) do
node.override['openstack']['image']['upload_images'] = ['image1']
node.override['openstack']['image']['upload_image']['image1'] = 'http://download.net/image.xxx'
runner.converge(described_recipe)
end
it do
expect { chef_run }.to raise_error(ArgumentError)
end
end
it 'uploads the tar image' do
node.override['openstack']['image']['upload_images'] = ['imageName']
node.override['openstack']['image']['upload_image']['imageName'] = 'http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-uec.tar.gz'
stub_command('glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list | grep imageName').and_return(false)
expect(chef_run).to upload_openstack_image_image('Image setup for imageName').with(
image_url: 'http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-uec.tar.gz',
image_name: 'imageName',
image_type: 'unknown',
image_public: true
)
expect(chef_run).to run_bash('Uploading AMI image imageName')
context 'uploads the tar image' do
cached(:chef_run) do
node.override['openstack']['image']['upload_images'] = ['imageName']
node.override['openstack']['image']['upload_image']['imageName'] = 'http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-uec.tar.gz'
runner.converge(described_recipe)
end
it do
stub_command('glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list | grep imageName').and_return(false)
expect(chef_run).to upload_openstack_image_image('Image setup for imageName').with(
image_url: 'http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-uec.tar.gz',
image_name: 'imageName',
image_type: 'unknown',
image_public: true
)
expect(chef_run).to run_bash('Uploading AMI image imageName')
end
end
%w(vhd vmdk vdi iso raw).each do |image_type|
it "uploads the #{image_type} image" do
node.override['openstack']['image']['upload_images'] = ["#{image_type}_imageName"]
node.override['openstack']['image']['upload_image']["#{image_type}_imageName"] = "image_file.#{image_type}"
node.override['openstack']['image']['upload_image_type']["#{image_type}_imageName"] = image_type.to_s
stub_command("glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list | grep #{image_type}_imageName").and_return(false)
expect(chef_run).to upload_openstack_image_image("Image setup for #{image_type}_imageName").with(
image_url: "image_file.#{image_type}",
image_name: "#{image_type}_imageName",
image_type: image_type.to_s,
context "uploads the #{image_type} image" do
cached(:chef_run) do
node.override['openstack']['image']['upload_images'] = ["#{image_type}_imageName"]
node.override['openstack']['image']['upload_image']["#{image_type}_imageName"] = "image_file.#{image_type}"
node.override['openstack']['image']['upload_image_type']["#{image_type}_imageName"] = image_type.to_s
runner.converge(described_recipe)
end
it do
stub_command("glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list | grep #{image_type}_imageName").and_return(false)
expect(chef_run).to upload_openstack_image_image("Image setup for #{image_type}_imageName").with(
image_url: "image_file.#{image_type}",
image_name: "#{image_type}_imageName",
image_type: image_type.to_s,
image_public: true
)
end
end
end
context 'uploads the raw and vdi images' do
cached(:chef_run) do
node.override['openstack']['image']['upload_images'] = ['raw_imageName', 'vdi_imageName']
node.override['openstack']['image']['upload_image']['raw_imageName'] = 'image_file.raw'
node.override['openstack']['image']['upload_image_type']['raw_imageName'] = 'raw'
node.override['openstack']['image']['upload_image']['vdi_imageName'] = 'image_file.vdi'
node.override['openstack']['image']['upload_image_type']['vdi_imageName'] = 'vdi'
runner.converge(described_recipe)
end
it do
stub_command('glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list | grep raw_imageName').and_return(false)
stub_command('glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list | grep vdi_imageName').and_return(false)
expect(chef_run).to upload_openstack_image_image('Image setup for raw_imageName').with(
image_url: 'image_file.raw',
image_name: 'raw_imageName',
image_type: 'raw',
image_public: true
)
expect(chef_run).to upload_openstack_image_image('Image setup for vdi_imageName').with(
image_url: 'image_file.vdi',
image_name: 'vdi_imageName',
image_type: 'vdi',
image_public: true
)
end
end
it 'uploads the raw and vdi images' do
node.override['openstack']['image']['upload_images'] = ['raw_imageName', 'vdi_imageName']
node.override['openstack']['image']['upload_image']['raw_imageName'] = 'image_file.raw'
node.override['openstack']['image']['upload_image_type']['raw_imageName'] = 'raw'
node.override['openstack']['image']['upload_image']['vdi_imageName'] = 'image_file.vdi'
node.override['openstack']['image']['upload_image_type']['vdi_imageName'] = 'vdi'
stub_command('glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list | grep raw_imageName').and_return(false)
stub_command('glance --insecure --os-username admin --os-password admin-pass --os-project-name admin --os-image-url http://127.0.0.1:9292 --os-auth-url http://127.0.0.1:5000/v3 --os-user-domain-name Default --os-project-domain-name Default image-list | grep vdi_imageName').and_return(false)
expect(chef_run).to upload_openstack_image_image('Image setup for raw_imageName').with(
image_url: 'image_file.raw',
image_name: 'raw_imageName',
image_type: 'raw',
image_public: true
)
expect(chef_run).to upload_openstack_image_image('Image setup for vdi_imageName').with(
image_url: 'image_file.vdi',
image_name: 'vdi_imageName',
image_type: 'vdi',
image_public: true
)
end
# TODO(MRV) Need to add provider method testers in here.
end
end

View File

@ -1,24 +1,21 @@
# encoding: UTF-8
require 'chefspec'
require 'chefspec/berkshelf'
ChefSpec::Coverage.start! { add_filter 'openstack-image' }
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
# Helper methods

View File

@ -0,0 +1,16 @@
# encoding: UTF-8
require_relative 'spec_helper'
describe 'openstack-image::swift_store' do
describe 'ubuntu' do
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
let(:node) { runner.node }
cached(:chef_run) do
runner.converge(described_recipe)
end
include_context 'image-stubs'
it do
expect(chef_run).to upgrade_package('openstack-swift')
end
end
end