puppet-zuul/spec/acceptance/basic_spec.rb
Colleen Murphy 11ad996786 Depend on helper gem for spec_helper_acceptance
Instead of keeping a local copy of spec_helper_acceptance.rb and
requiring updates to all modules for any change, we can move it into the
common helper gem and require it from there. This will make it easier to
create and review changes that affect all puppet modules. Also change
the Gemfile to look for the gem in the local workspace if running in a
zuul environment.

Change-Id: Ie43d7fd4860f7c0f9593bdd7b5b4cd5b54bcadf4
2017-08-22 22:40:04 +02:00

182 lines
5.1 KiB
Ruby

require 'puppet-openstack_infra_spec_helper/spec_helper_acceptance'
describe 'puppet-zuul module', :if => ['debian', 'ubuntu'].include?(os[:family]) do
def pp_path
base_path = File.dirname(__FILE__)
File.join(base_path, 'fixtures')
end
def preconditions_puppet_module
module_path = File.join(pp_path, 'preconditions.pp')
File.read(module_path)
end
def post_conditions_puppet_module
module_path = File.join(pp_path, 'postconditions.pp')
File.read(module_path)
end
def default_puppet_module
module_path = File.join(pp_path, 'default.pp')
File.read(module_path)
end
before(:all) do
apply_manifest(preconditions_puppet_module, catch_failures: true)
end
it 'should work with no errors' do
apply_manifest(default_puppet_module, catch_failures: true)
end
it 'should be idempotent' do
apply_manifest(default_puppet_module, catch_changes: true)
end
it 'should enable zuul server and zuul merger services' do
apply_manifest(post_conditions_puppet_module, catch_failures: true)
end
describe 'required users' do
describe user('zuul') do
it { should exist }
it { should belong_to_group 'zuul' }
it { should have_home_directory '/home/zuul' }
it { should have_login_shell '/bin/bash' }
end
end
describe 'required operating system packages' do
packages = [
package('git'),
package('build-essential'),
package('python-lxml'),
package('python-yaml'),
package('python-paramiko'),
package('python-daemon'),
package('yui-compressor'),
package('python-paste'),
package('python-webob')
]
packages << package('apache2') if ['ubuntu', 'debian'].include?(os[:family])
packages << package('httpd') if ['centos', 'redhat'].include?(os[:family])
packages.each do |package|
describe package do
it { should be_installed }
end
end
end
describe 'required pip packages' do
packages = [
package('yappi'),
package('zuul')
]
packages.each do |package|
describe package do
it { should be_installed.by('pip') }
end
end
end
describe 'required files' do
describe file('/etc/zuul/zuul.conf') do
it { should be_file }
it { should contain('[gearman]') }
it { should contain('server=127.0.0.1') }
it { should contain('[gerrit]') }
it { should contain('server=') }
it { should contain('[zuul]') }
it { should contain('layout_config=/etc/zuul/layout/layout.yaml') }
end
describe file('/etc/default/zuul') do
it { should be_file }
end
describe file('/var/log/zuul') do
it { should be_directory }
it { should be_owned_by 'zuul'}
end
describe file('/var/lib/zuul/git') do
it { should be_directory }
it { should be_owned_by 'zuul'}
end
describe 'directories belonging to zuul user and group' do
directories = [
file('/var/lib/zuul'),
file('/var/run/zuul-merger'),
file('/var/lib/zuul/ssh'),
file('/var/run/zuul'),
]
directories.each do |dir|
describe dir do
it { should be_directory }
it { should be_owned_by 'zuul'}
it { should be_grouped_into 'zuul'}
end
end
end
describe 'public_html symlinks' do
symlinkies = {
file('/var/lib/zuul/www/images') => '/opt/zuul/etc/status/public_html/images',
file('/var/lib/zuul/www/index.html') => '/opt/zuul/etc/status/public_html/index.html',
file('/var/lib/zuul/www/jquery.zuul.js') => '/opt/zuul/etc/status/public_html/jquery.zuul.js',
file('/var/lib/zuul/www/styles') => '/opt/zuul/etc/status/public_html/styles',
file('/var/lib/zuul/www/zuul.app.js') => '/opt/zuul/etc/status/public_html/zuul.app.js',
file('/var/lib/zuul/www/lib/jquery.graphite.js') => '/opt/graphitejs/jquery.graphite.js',
file('/var/lib/zuul/www/lib/bootstrap') => '/opt/twitter-bootstrap/dist',
}
symlinkies.each do |link, destination|
describe link do
it { should be_symlink }
it { should be_linked_to destination }
end
end
end
describe file('/var/lib/zuul/ssh/id_rsa') do
it { should be_file }
it { should contain('-----BEGIN RSA PRIVATE KEY-----') }
end
describe file('/home/zuul/.ssh/known_hosts') do
it { should be_file }
it { should contain('known_hosts_content') }
end
end
describe cron do
it { should have_entry('7 4 * * * find /var/lib/zuul/git/ -maxdepth 3 -type d -name ".git" -exec git --git-dir="{}" pack-refs --all \;').with_user('zuul') }
end
describe 'required services' do
describe port(80) do
it { should be_listening }
end
describe command("curl http://localhost --location") do
its(:stdout) { should contain('Zuul Status') }
end
describe port(443) do
it { should be_listening }
end
describe command("curl https://localhost --insecure --location") do
its(:stdout) { should contain('Zuul Status') }
end
describe port(4730) do
it { should be_listening }
end
end
end