fuel-library/tests/noop/spec/shared-examples.rb
Vladimir Kuklin 2cd8c10151 Add noop tests for files injection
1) Add test to check whether catalog contains
injection of files which actually should be
installed as packages
2) Add more fixtures with astute yamls
3) Shared examples structure refactoring
4) Remove File.exists? checks from install_ssh_keys
5) Add rspec and puppet debug options
6) Misc fixes to make rspec actually work

Change-Id: I8217594cd9f2c0f19c840c0abed37d94ff80eb75
blueprint: package-fuel-components
2015-05-13 21:30:25 +03:00

169 lines
4.6 KiB
Ruby

shared_examples 'compile' do
it do
should compile
end
end
shared_examples 'should_not_install_bin_files_with_puppet' do
it 'should not install binary files with puppet' do
binary_files_regexp = %r{^/bin|^/usr/bin|^/usr/local/bin|^/usr/sbin|^/sbin|^/usr/lib|^/usr/share|^/etc/init.d|^/usr/local/sbin|^/etc/rc\S\.d}
binary_files = []
downloaded_files = []
file_resources.each do |resource|
next unless %w(present file directory).include? resource[:ensure] or not resource[:ensure]
file_path = resource[:path] or resource[:title]
file_source = resource[:source]
binary_files << file_path if file_path =~ binary_files_regexp
downloaded_files << file_path if file_source
end
error_message_template = <<-eos
<% if binary_files.any? -%>
You have <%= binary_files.length -%> binary files installed with puppet:
<% binary_files.each do |file| -%>
<%= file %>
<% end -%>
<% end -%>
<% if downloaded_files.any? -%>
You are downloading <%= downloaded_files.length -%> binary files installed with puppet:
<% downloaded_files.each do |file| -%>
<%= file %>
<% end -%>
<% end -%>
eos
fail ERB.new(error_message_template, nil, '-').result(binding) if binary_files.any? or downloaded_files.any?
end
end
shared_examples 'save_files_list' do
it 'should save the list of file resources' do
files={}
file_resources.each do |resource|
next unless %w(present file directory).include? resource[:ensure] or not resource[:ensure]
if resource[:source]
content = resource[:source]
elsif resource[:content]
content = 'TEMPLATE'
else
content = nil
end
next unless content
files[resource[:path]] = content
if files.any?
Noop.save_file_resources_list files, os_name
end
end
end
end
shared_examples 'save_packages_list' do
it 'should save the list of file resources' do
catalog = subject
catalog = subject.call if subject.is_a? Proc
package_resources = {}
catalog.resources.each do |resource|
next unless resource.type == 'Package'
next if %w(absent purged).include? resource[:ensure] or not resource[:ensure]
package_resources[resource[:name]] = resource[:ensure]
end
if package_resources.any?
Noop.save_package_resources_list package_resources, os_name
end
end
end
shared_examples 'debug' do
it 'shows catalog contents' do
Noop.show_catalog subject
end
end
shared_examples 'generate' do
it 'shows catalog contents' do
Noop.catalog_to_spec subject
end
end
shared_examples 'status' do
it 'shows status' do
puts <<-eos
=============================================
OS: #{os_name}
YAML: #{Noop.astute_yaml_base}
Spec: #{Noop.current_spec example}
Manifest: #{Noop.manifest_path}
Node: #{Noop.fqdn}
Role: #{Noop.hiera 'role'}
=============================================
eos
end
end
shared_examples 'OS' do
it_behaves_like 'compile'
it_behaves_like 'status' if ENV['SPEC_SHOW_STATUS']
it_behaves_like 'debug' if ENV['SPEC_CATALOG_DEBUG']
it_behaves_like 'generate' if ENV['SPEC_SPEC_GENERATE']
it_behaves_like 'save_files_list' if ENV['SPEC_SAVE_FILE_RESOURCES']
it_behaves_like 'save_packages_list'if ENV['SPEC_SAVE_PACKAGE_RESOURCES']
it_behaves_like 'should_not_install_bin_files_with_puppet' if ENV['SPEC_PUPPET_BINARY_FILES']
begin
it_behaves_like 'catalog'
rescue ArgumentError
true
end
at_exit { RSpec::Puppet::Coverage.report! } if ENV['SPEC_COVERAGE']
end
###############################################################################
def test_ubuntu_and_centos(manifest_file, force_manifest = false)
# check if task is present in the task list
unless force_manifest or Noop.manifest_present? manifest_file
Noop.debug "Manifest '#{manifest_file}' is not enabled on the node '#{Noop.hostname}'. Skipping tests."
return
end
# set manifest file
before(:all) do
Noop.manifest = manifest_file
end
let(:os_name) do
os = facts[:operatingsystem]
os = os.downcase if os
os
end
let(:catalog) do
catalog = subject
catalog = subject.call if subject.is_a? Proc
catalog
end
let(:file_resources) do
files = catalog.resources.select do |resource|
resource.type == 'File'
end
files
end
if Noop.test_ubuntu?
context 'on Ubuntu platforms' do
let(:facts) { Noop.ubuntu_facts }
it_behaves_like 'OS'
end
end
if Noop.test_centos?
context 'on CentOS platforms' do
let(:facts) { Noop.centos_facts }
it_behaves_like 'OS'
end
end
end