![Vladimir Kuklin](/assets/img/avatar_default.png)
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
169 lines
4.6 KiB
Ruby
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
|
|
|