diff --git a/attributes/default.rb b/attributes/default.rb index 083fe0d7..e599add5 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -321,6 +321,10 @@ end # The location of the OSC bash completion file default['openstack']['common']['bash_complete'] = '/etc/bash_completion.d/osc.bash_completion' +# Set maximum count for searches [1] +# [1] https://review.opendev.org/60126 +default['openstack']['common']['search_count_max'] = 7 + # The name of the Chef role that installs the Keystone Service API default['openstack']['identity_service_chef_role'] = 'os-identity' diff --git a/libraries/search.rb b/libraries/search.rb index ab3ee57b..ca3372de 100644 --- a/libraries/search.rb +++ b/libraries/search.rb @@ -29,7 +29,7 @@ module ::Openstack recipe_query = "(chef_environment:#{node.chef_environment} AND recipes:#{r})".sub('::', '\:\:') query = "#{role_query} OR #{recipe_query}" count = 1 - sum = 7 + sum = node['openstack']['common']['search_count_max'] while count < sum resp = search(:node, query, &block) break unless resp.nil? diff --git a/spec/cli_spec.rb b/spec/cli_spec.rb index 05293921..6730aacc 100644 --- a/spec/cli_spec.rb +++ b/spec/cli_spec.rb @@ -6,7 +6,7 @@ describe 'openstack-common::default' do describe 'Openstack CLI' do let(:runner) { ChefSpec::SoloRunner.new(CHEFSPEC_OPTS) } let(:node) { runner.node } - let(:chef_run) do + cached(:chef_run) do runner.converge(described_recipe) end let(:subject) { Object.new.extend(Openstack) } diff --git a/spec/client-redhat_spec.rb b/spec/client-redhat_spec.rb new file mode 100644 index 00000000..02dfc886 --- /dev/null +++ b/spec/client-redhat_spec.rb @@ -0,0 +1,20 @@ +# encoding: UTF-8 +require_relative 'spec_helper' + +describe 'openstack-common::client' do + describe 'redhat' do + let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) } + let(:node) { runner.node } + cached(:chef_run) do + runner.converge(described_recipe) + end + + it 'converges successfully' do + expect { chef_run }.to_not raise_error + end + + it do + expect(chef_run).to upgrade_package('python-openstackclient') + end + end +end diff --git a/spec/client_spec.rb b/spec/client_spec.rb index 8e9a443f..af0727d7 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -5,10 +5,14 @@ describe 'openstack-common::client' 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 + it 'converges successfully' do + expect { chef_run }.to_not raise_error + end + it do expect(chef_run).to upgrade_package('python3-openstackclient') end diff --git a/spec/completions_spec.rb b/spec/completions_spec.rb index 63867cdb..cbe72a35 100644 --- a/spec/completions_spec.rb +++ b/spec/completions_spec.rb @@ -5,8 +5,18 @@ describe 'openstack-common::completions' 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 + it 'converges successfully' do + expect { chef_run }.to_not raise_error + end + it do + expect(chef_run).to run_execute('create OSC bash completions') + .with( + command: 'openstack complete > /etc/bash_completion.d/osc.bash_completion', + creates: '/etc/bash_completion.d/osc.bash_completion' + ) + end end end diff --git a/spec/config_helpers_spec.rb b/spec/config_helpers_spec.rb index 709d35a8..46b3ef9a 100644 --- a/spec/config_helpers_spec.rb +++ b/spec/config_helpers_spec.rb @@ -6,7 +6,7 @@ describe 'openstack-common::default' do describe 'module Openstack config_helpers' do let(:runner) { ChefSpec::SoloRunner.new(CHEFSPEC_OPTS) } let(:node) { runner.node } - let(:chef_run) do + cached(:chef_run) do runner.converge(described_recipe) end let(:subject) { Object.new.extend(Openstack) } diff --git a/spec/database_provider_spec.rb b/spec/database_provider_spec.rb index ccfc6dfc..cda05e56 100644 --- a/spec/database_provider_spec.rb +++ b/spec/database_provider_spec.rb @@ -4,13 +4,10 @@ require_relative 'spec_helper' describe 'test-openstack-common-database::default' do let(:runner) do - ChefSpec::SoloRunner.new(platform: 'ubuntu', - version: '16.04', - log_level: :fatal, - step_into: ['openstack_common_database']) + ChefSpec::SoloRunner.new(CHEFSPEC_OPTS.dup.merge(step_into: ['openstack_common_database'])) end let(:node) { runner.node } - let(:chef_run) do + cached(:chef_run) do node.override['openstack']['use_databags'] = false node.override['openstack']['secret']['mysqlroot']['db'] = 'root_pass' node.override['openstack']['db']['service'] = { service_type: 'mysql', port: 3306, db_name: 'service_db' } @@ -23,8 +20,12 @@ describe 'test-openstack-common-database::default' do end context 'specific root user db endpoint' do - before do + cached(:chef_run) do node.override['openstack']['endpoints']['db']['host_for_db_root_user'] = 'localhost123' + node.override['openstack']['use_databags'] = false + node.override['openstack']['secret']['mysqlroot']['db'] = 'root_pass' + node.override['openstack']['db']['service'] = { service_type: 'mysql', port: 3306, db_name: 'service_db' } + runner.converge(described_recipe) end it 'connects to the database via a specific endpoint for the root user' do expect(chef_run).to create_database('create database service_db') diff --git a/spec/default-redhat_spec.rb b/spec/default-redhat_spec.rb index b47ea0d3..e297467f 100644 --- a/spec/default-redhat_spec.rb +++ b/spec/default-redhat_spec.rb @@ -5,12 +5,15 @@ describe 'openstack-common::default' do describe 'rhel-rdo' do let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) } let(:node) { runner.node } - let(:chef_run) do + cached(:chef_run) do node.override['openstack']['release'] = 'testrelease' - runner.converge(described_recipe) end + it 'converges successfully' do + expect { chef_run }.to_not raise_error + end + it do expect(chef_run).to upgrade_package('centos-release-qemu-ev') end @@ -22,9 +25,11 @@ describe 'openstack-common::default' do end context 'enabling RDO with gpgcheck enabled' do - before do + cached(:chef_run) do + node.override['openstack']['release'] = 'testrelease' node.override['openstack']['yum']['rdo_enabled'] = true node.override['openstack']['yum']['gpgcheck'] = true + runner.converge(described_recipe) end it 'adds RDO yum repository' do @@ -40,9 +45,11 @@ describe 'openstack-common::default' do end context 'enabling RDO with gpgcheck disabled' do - before do + cached(:chef_run) do + node.override['openstack']['release'] = 'testrelease' node.override['openstack']['yum']['rdo_enabled'] = true node.override['openstack']['yum']['gpgcheck'] = false + runner.converge(described_recipe) end it 'adds RDO yum repository' do @@ -56,8 +63,10 @@ describe 'openstack-common::default' do end context 'disabling RDO deps repo with is_release true' do - before do + cached(:chef_run) do + node.override['openstack']['release'] = 'testrelease' node.override['openstack']['is_release'] = true + runner.converge(described_recipe) end it 'does not add the RDO deps yum repository' do @@ -66,8 +75,10 @@ describe 'openstack-common::default' do end context 'disabling RDO' do - before do + cached(:chef_run) do + node.override['openstack']['release'] = 'testrelease' node.override['openstack']['yum']['rdo_enabled'] = false + runner.converge(described_recipe) end it 'removes RDO yum repository' do @@ -77,12 +88,6 @@ describe 'openstack-common::default' do # https://github.com/sethvargo/chefspec#packaging-custom-matchers expect(chef_run).to remove_yum_repository('RDO-testrelease') end - - it 'does nothing when RDO yum repository does not exist' do - repo = chef_run.find_resource('yum_repository', 'RDO-testrelease') - expect(repo.performed_actions).to be_empty - end - it 'does include yum-epel recipe' do expect(chef_run).to include_recipe('yum-epel') end @@ -91,5 +96,17 @@ describe 'openstack-common::default' do expect(chef_run).to_not create_remote_file('/etc/yum.repos.d/rdo-manager-release.repo') end end + + context 'disabling RDO and repo file does not exist' do + cached(:chef_run) do + node.override['openstack']['release'] = 'testrelease' + node.override['openstack']['yum']['rdo_enabled'] = false + runner.converge(described_recipe) + end + it 'does nothing when RDO yum repository does not exist' do + allow(FileTest).to receive(:exist?).with('/etc/yum.repos.d/RDO-testrelease.repo').and_return(false) + expect(chef_run).to nothing_yum_repository('RDO-testrelease') + end + end end end diff --git a/spec/default_spec.rb b/spec/default_spec.rb index dd10a429..c8635f0d 100644 --- a/spec/default_spec.rb +++ b/spec/default_spec.rb @@ -6,60 +6,94 @@ describe 'openstack-common::default' do let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) } let(:mq_services) { %w(bare_metal block_storage compute database image telemetry network orchestration) } let(:node) { runner.node } - let(:chef_run) do + cached(:chef_run) do runner.converge(described_recipe) end + it 'converges successfully' do + expect { chef_run }.to_not raise_error + end + it 'does not include apt for apt-get update' do expect(chef_run).to_not include_recipe 'apt' end - it 'updates apt cache before installing packages' do - node.override['openstack']['apt']['update_apt_cache'] = true - expect(chef_run).to update_apt_update 'default' + context 'update_apt_cache true' do + cached(:chef_run) do + node.override['openstack']['apt']['update_apt_cache'] = true + runner.converge(described_recipe) + end + it 'updates apt cache before installing packages' do + expect(chef_run).to update_apt_update 'default' + end + end + + it do + expect(chef_run).to create_file('/etc/apt/apt.conf.d/confdef') + .with( + owner: 'root', + group: 'root', + mode: 00644, + content: "Dpkg::Options {\n \"--force-confdef\";\n \"--force-confold\";\n }" + ) end it 'upgrades ubuntu-cloud-keyring package' do expect(chef_run).to upgrade_package 'ubuntu-cloud-keyring' end - it 'configures openstack repository' do - # Using cookbook(apt) LWRP custom matcher - # https://github.com/sethvargo/chefspec#packaging-custom-matchers - node.override['openstack']['apt']['live_updates_enabled'] = true - expect(chef_run).to add_apt_repository('openstack-ppa').with( - uri: 'http://ubuntu-cloud.archive.canonical.com/ubuntu', - distribution: 'xenial-updates/rocky', - components: ['main'], - cache_rebuild: true - ) + context 'live_updates_enabled true' do + cached(:chef_run) do + node.override['openstack']['apt']['live_updates_enabled'] = true + runner.converge(described_recipe) + end + it 'configures openstack repository' do + # Using cookbook(apt) LWRP custom matcher + # https://github.com/sethvargo/chefspec#packaging-custom-matchers + expect(chef_run).to add_apt_repository('openstack-ppa').with( + uri: 'http://ubuntu-cloud.archive.canonical.com/ubuntu', + distribution: 'bionic-updates/rocky', + components: ['main'], + cache_rebuild: true + ) + end end - it 'disables openstack live updates' do - node.override['openstack']['apt']['live_updates_enabled'] = false - expect(chef_run).to_not add_apt_repository('openstack-ppa').with( - uri: 'http://ubuntu-cloud.archive.canonical.com/ubuntu', - distribution: 'xenial-updates/rocky', - components: ['main'] - ) + context 'live_updates_enabled false' do + cached(:chef_run) do + node.override['openstack']['apt']['live_updates_enabled'] = false + runner.converge(described_recipe) + end + it 'disables openstack live updates' do + expect(chef_run).to_not add_apt_repository('openstack-ppa').with( + uri: 'http://ubuntu-cloud.archive.canonical.com/ubuntu', + distribution: 'bionic-updates/rocky', + components: ['main'] + ) + end end it 'configures openstack proposed repository' do expect(chef_run).to add_apt_repository('openstack-ppa-proposed').with( uri: 'http://ubuntu-cloud.archive.canonical.com/ubuntu', - distribution: 'xenial-proposed/rocky', + distribution: 'bionic-proposed/rocky', components: ['main'], cache_rebuild: true ) end - it 'disables openstack proposed repository' do - node.override['openstack']['is_release'] = true - expect(chef_run).to_not add_apt_repository('openstack-ppa-proposed').with( - uri: 'http://ubuntu-cloud.archive.canonical.com/ubuntu', - distribution: 'xenial-proposed/rocky', - components: ['main'] - ) + context 'is_release true' do + cached(:chef_run) do + node.override['openstack']['is_release'] = true + runner.converge(described_recipe) + end + it 'disables openstack proposed repository' do + expect(chef_run).to_not add_apt_repository('openstack-ppa-proposed').with( + uri: 'http://ubuntu-cloud.archive.canonical.com/ubuntu', + distribution: 'bionic-proposed/rocky', + components: ['main'] + ) + end end pkgs = %w(python3 python3-dev python3-pip python3-setuptools python3-virtualenv python3-wheel virtualenv) @@ -72,10 +106,14 @@ describe 'openstack-common::default' do expect(chef_run).to_not install_chef_gem('chef-vault') end - it 'installs the gem chef-vault if databag_type is vault' do - node.override['openstack']['databag_type'] = 'vault' - expect(chef_run).to install_chef_gem('chef-vault') - .with(version: '~> 3.2') + context 'databag_type vault' do + cached(:chef_run) do + node.override['openstack']['databag_type'] = 'vault' + runner.converge(described_recipe) + end + it 'installs the gem chef-vault if databag_type is vault' do + expect(chef_run).to install_chef_gem('chef-vault').with(version: '~> 3.2') + end end context 'rabbit mq' do @@ -94,6 +132,12 @@ describe 'openstack-common::default' do 'kombu_reconnect_delay' => 123.456, 'kombu_reconnect_timeout' => 123, } + cached(:chef_run) do + rabbit_opts.each do |key, value| + node.override['openstack']['mq']['rabbitmq'][key] = value + end + runner.converge(described_recipe) + end rabbit_opts.each do |key, value| it "configures rabbit mq #{key}" do node.override['openstack']['mq']['rabbitmq'][key] = value diff --git a/spec/endpoints_spec.rb b/spec/endpoints_spec.rb index a44323eb..3c2d864c 100644 --- a/spec/endpoints_spec.rb +++ b/spec/endpoints_spec.rb @@ -7,7 +7,9 @@ describe 'openstack-common::default' do describe 'Openstack endpoints' do let(:runner) { ChefSpec::SoloRunner.new(CHEFSPEC_OPTS) } let(:node) { runner.node } - let(:chef_run) { runner.converge(described_recipe) } + cached(:chef_run) do + runner.converge(described_recipe) + end let(:subject) { Object.new.extend(Openstack) } %w(public internal).each do |ep_type| @@ -109,19 +111,24 @@ describe 'openstack-common::default' do expect(subject.rabbit_transport_url('compute')).to eq(expected) end - it do - node.override['openstack']['mq']['service_type'] = 'rabbit' - node.override['openstack']['mq']['cluster'] = true - node.override['openstack']['mq']['compute']['rabbit']['userid'] = 'rabbit2' - node.override['openstack']['endpoints']['mq']['port'] = 1234 - node.override['openstack']['mq']['servers'] = %w(10.0.0.1 10.0.0.2 10.0.0.3) - node.override['openstack']['mq']['vhost'] = '/anyhost' - allow(subject).to receive(:node).and_return(chef_run.node) - allow(subject).to receive(:get_password) - .with('user', 'rabbit2') - .and_return('mypass2') - expected = 'rabbit://rabbit2:mypass2@10.0.0.1:1234,rabbit2:mypass2@10.0.0.2:1234,rabbit2:mypass2@10.0.0.3:1234/anyhost' - expect(subject.rabbit_transport_url('compute')).to eq(expected) + context 'non-default mq attributes' do + cached(:chef_run) do + node.override['openstack']['mq']['service_type'] = 'rabbit' + node.override['openstack']['mq']['cluster'] = true + node.override['openstack']['mq']['compute']['rabbit']['userid'] = 'rabbit2' + node.override['openstack']['endpoints']['mq']['port'] = 1234 + node.override['openstack']['mq']['servers'] = %w(10.0.0.1 10.0.0.2 10.0.0.3) + node.override['openstack']['mq']['vhost'] = '/anyhost' + runner.converge(described_recipe) + end + it do + allow(subject).to receive(:node).and_return(chef_run.node) + allow(subject).to receive(:get_password) + .with('user', 'rabbit2') + .and_return('mypass2') + expected = 'rabbit://rabbit2:mypass2@10.0.0.1:1234,rabbit2:mypass2@10.0.0.2:1234,rabbit2:mypass2@10.0.0.3:1234/anyhost' + expect(subject.rabbit_transport_url('compute')).to eq(expected) + end end end @@ -164,15 +171,20 @@ describe 'openstack-common::default' do ).to eq(expected) end - it 'returns network db info hash when service found for sqlite with options' do - node.override['openstack']['db']['service_type'] = 'sqlite' - node.override['openstack']['db']['options'] = { 'sqlite' => '?options' } - node.override['openstack']['db']['network']['path'] = 'path' - allow(subject).to receive(:node).and_return(chef_run.node) - expected = 'sqlite:///path?options' - expect( - subject.db_uri('network', 'user', 'pass') - ).to eq(expected) + context 'sqlite' do + cached(:chef_run) do + node.override['openstack']['db']['service_type'] = 'sqlite' + node.override['openstack']['db']['options'] = { 'sqlite' => '?options' } + node.override['openstack']['db']['network']['path'] = 'path' + runner.converge(described_recipe) + end + it 'returns network db info hash when service found for sqlite with options' do + allow(subject).to receive(:node).and_return(chef_run.node) + expected = 'sqlite:///path?options' + expect( + subject.db_uri('network', 'user', 'pass') + ).to eq(expected) + end end it 'returns compute db info hash when service found for mariadb' do diff --git a/spec/logging_spec.rb b/spec/logging_spec.rb index 51bad2ae..0cf0c0e3 100644 --- a/spec/logging_spec.rb +++ b/spec/logging_spec.rb @@ -5,7 +5,7 @@ describe 'openstack-common::logging' 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) } describe '/etc/openstack' do let(:dir) { chef_run.directory('/etc/openstack') } diff --git a/spec/network_spec.rb b/spec/network_spec.rb index 126e6ff2..45b8b350 100644 --- a/spec/network_spec.rb +++ b/spec/network_spec.rb @@ -4,17 +4,48 @@ require ::File.join ::File.dirname(__FILE__), '..', 'libraries', 'network' describe 'openstack-common::default' do describe 'Openstack address_for and bind_address' do - let(:runner) { ChefSpec::SoloRunner.new(CHEFSPEC_OPTS) } - let(:node) { runner.node } - let(:chef_run) do - node.automatic['network']['interfaces'] = { - 'lo' => { 'addresses' => { '127.0.0.1' => { 'family' => 'inet', 'prefixlen' => '8', 'netmask' => '255.0.0.0', 'scope' => 'Node' }, - '::1' => { 'family' => 'inet6', 'prefixlen' => '128', 'scope' => 'Node' }, - '2001:db8::1' => { 'family' => 'inet6', 'prefixlen' => '64', 'scope' => 'Node' } } }, - 'eth0' => { 'addresses' => { '10.0.0.2' => { 'family' => 'inet', 'prefixlen' => '32', 'netmask' => '255.255.255.255', 'scope' => 'Node' }, - '10.0.0.3' => { 'family' => 'inet', 'prefixlen' => '24', 'netmask' => '255.255.255.0', 'scope' => 'Node' } } }, - } - + interfaces = { + 'lo' => { + 'addresses' => { + '127.0.0.1' => { + 'family' => 'inet', + 'prefixlen' => '8', + 'netmask' => '255.0.0.0', + 'scope' => 'Node', + }, + '::1' => { + 'family' => 'inet6', + 'prefixlen' => '128', + 'scope' => 'Node', + }, + '2001:db8::1' => { + 'family' => 'inet6', + 'prefixlen' => '64', + 'scope' => 'Node', + }, + }, + }, + 'eth0' => { + 'addresses' => { + '10.0.0.2' => { + 'family' => 'inet', + 'prefixlen' => '32', + 'netmask' => '255.255.255.255', + 'scope' => 'Node', + }, + '10.0.0.3' => { + 'family' => 'inet', + 'prefixlen' => '24', + 'netmask' => '255.255.255.0', + 'scope' => 'Node', + }, + }, + }, + } + cached(:runner) { ChefSpec::SoloRunner.new(CHEFSPEC_OPTS) } + cached(:node) { runner.node } + cached(:chef_run) do + node.automatic['network']['interfaces'] = interfaces runner.converge(described_recipe) end @@ -48,9 +79,14 @@ describe 'openstack-common::default' do end end - describe '#address_for ipv6' do - it 'returns ipv6 address' do + context '#address_for ipv6' do + cached(:chef_run) do + node.automatic['network']['interfaces'] = interfaces node.override['openstack']['endpoints']['family'] = 'inet6' + runner.converge(described_recipe) + end + + it 'returns ipv6 address' do expect( subject.address_for('lo') ).to eq('2001:db8::1') @@ -81,9 +117,12 @@ describe 'openstack-common::default' do subject.bind_address(node['openstack']['bind_service']['mq']) ).to eq('127.0.0.1') end - describe 'mq interface set' do - before do + context 'mq interface set' do + cached(:chef_run) do + node.automatic['network']['interfaces'] = interfaces + node.override['openstack']['endpoints']['family'] = 'inet' node.override['openstack']['bind_service']['mq']['interface'] = 'eth0' + runner.converge(described_recipe) end it 'returns the interface address' do expect( @@ -98,9 +137,12 @@ describe 'openstack-common::default' do subject.bind_address(node['openstack']['bind_service']['db']) ).to eq('127.0.0.1') end - describe 'interface set' do - before do + context 'interface set' do + cached(:chef_run) do + node.automatic['network']['interfaces'] = interfaces + node.override['openstack']['endpoints']['family'] = 'inet' node.override['openstack']['bind_service']['db']['interface'] = 'eth0' + runner.converge(described_recipe) end it 'returns the interface address' do expect( diff --git a/spec/password_spec.rb b/spec/password_spec.rb index d0c69a9c..99336671 100644 --- a/spec/password_spec.rb +++ b/spec/password_spec.rb @@ -7,7 +7,7 @@ describe 'openstack-common::default' do describe 'Passwords' do let(:runner) { ChefSpec::SoloRunner.new(CHEFSPEC_OPTS) } let(:node) { runner.node } - let(:chef_run) { runner.converge(described_recipe) } + cached(:chef_run) { runner.converge(described_recipe) } let(:subject) { Object.new.extend(Openstack) } include_context 'library-stubs' @@ -25,8 +25,9 @@ describe 'openstack-common::default' do end context 'using chef-vault' do - before do + cached(:chef_run) do node.override['openstack']['databag_type'] = 'vault' + runner.converge(described_recipe) end it 'returns the data from a chef vault item' do allow(ChefVault::Item).to receive(:load) @@ -66,7 +67,10 @@ describe 'openstack-common::default' do end context 'stored in standard data bags' do - before { node.override['openstack']['databag_type'] = 'standard' } + cached(:chef_run) do + node.override['openstack']['databag_type'] = 'standard' + runner.converge(described_recipe) + end describe '#secret' do it 'returns databag' do value = { 'nova' => 'this' } @@ -101,7 +105,10 @@ describe 'openstack-common::default' do end context 'stored in attributes as an alternative' do - before { node.override['openstack']['use_databags'] = false } + cached(:chef_run) do + node.override['openstack']['use_databags'] = false + runner.converge(described_recipe) + end describe '#get_password' do %w(service db user token).each do |type| diff --git a/spec/search_spec.rb b/spec/search_spec.rb index e1a7a1ed..8bde4f11 100644 --- a/spec/search_spec.rb +++ b/spec/search_spec.rb @@ -6,13 +6,14 @@ describe 'openstack-common::default' do describe 'Openstack Search' do let(:runner) { ChefSpec::SoloRunner.new(CHEFSPEC_OPTS) } let(:node) { runner.node } - let(:chef_run) do + cached(:chef_run) do node.override['openstack']['mq']['server_role'] = 'openstack-ops-mq' node.override['openstack']['endpoints']['mq']['port'] = 5672 - + # speed up tests + node.override['openstack']['common']['search_count_max'] = 2 runner.converge(described_recipe) end - let(:subject) { Object.new.extend(Openstack) } + cached(:subject) { Object.new.extend(Openstack) } describe '#search_for' do it 'returns results' do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3e1196ce..3a15cfcc 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -2,22 +2,22 @@ require 'chefspec' require 'chefspec/berkshelf' -ChefSpec::Coverage.start! { add_filter 'openstack-common' } - RSpec.configure do |config| config.color = true config.formatter = :documentation - config.log_level = :fatal + config.log_level = :warn end UBUNTU_OPTS = { platform: 'ubuntu', - version: '16.04', + version: '18.04', }.freeze + REDHAT_OPTS = { platform: 'redhat', - version: '7.4', + version: '7', }.freeze + # We set a default platform for non-platform specific test cases CHEFSPEC_OPTS = UBUNTU_OPTS diff --git a/spec/sysctl_spec.rb b/spec/sysctl_spec.rb index 541900a4..13b94828 100644 --- a/spec/sysctl_spec.rb +++ b/spec/sysctl_spec.rb @@ -3,9 +3,16 @@ require_relative 'spec_helper' describe 'openstack-common::sysctl' do describe 'ubuntu' do + sysctl_kv = { + 'systcl_key1' => 'sysctl_value1', + 'sysctl_key2' => 'sysctl_value2', + } let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) } let(:node) { runner.node } - let(:chef_run) { runner.converge(described_recipe) } + cached(:chef_run) do + node.override['openstack']['sysctl'] = sysctl_kv + runner.converge(described_recipe) + end describe 'sysctl.d directory' do it 'should create /etc/systctl.d' do @@ -25,9 +32,6 @@ describe 'openstack-common::sysctl' do end it 'sets the sysctl attributes' do - sysctl_kv = { 'systcl_key1' => 'sysctl_value1', - 'sysctl_key2' => 'sysctl_value2' } - node.override['openstack']['sysctl'] = sysctl_kv sysctl_kv.each do |k, v| expect(chef_run).to render_file(file.name).with_content(/^#{k} = #{v}$/) end