From 716ef623ba905945b71c0920ab9328e3df1184f6 Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Sat, 25 Apr 2015 15:19:58 -0400 Subject: [PATCH] Beaker tests Implement basic structure for beaker tests. Change-Id: I6ca638994e9d2ecc8977a186525c9c41d2be563b Closes-bug: #1444736 --- Gemfile | 1 + README.md | 12 ++ spec/acceptance/ceilometer_with_mysql_spec.rb | 123 ++++++++++++++++++ spec/acceptance/nodesets/default.yml | 9 ++ spec/acceptance/nodesets/nodepool.yml | 9 ++ spec/spec_helper_acceptance.rb | 46 +++++++ 6 files changed, 200 insertions(+) create mode 100644 spec/acceptance/ceilometer_with_mysql_spec.rb create mode 100644 spec/acceptance/nodesets/default.yml create mode 100644 spec/acceptance/nodesets/nodepool.yml create mode 100644 spec/spec_helper_acceptance.rb diff --git a/Gemfile b/Gemfile index b0b2d45..7635435 100644 --- a/Gemfile +++ b/Gemfile @@ -16,6 +16,7 @@ group :development, :test do gem 'puppet-lint-variable_contains_upcase' gem 'puppet-lint-numericvariable' + gem 'beaker-rspec', '~> 2.2.4', :require => false gem 'json' gem 'webmock' end diff --git a/README.md b/README.md index 92ea4f8..9fbc219 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,18 @@ Limitations * The ceilometer modules have only been tested on RedHat and Ubuntu family systems. +Beaker-Rspec +------------ + +This module has beaker-rspec tests + +To run: + +``shell +bundle install +bundle exec rspec spec/acceptance +`` + Development ----------- diff --git a/spec/acceptance/ceilometer_with_mysql_spec.rb b/spec/acceptance/ceilometer_with_mysql_spec.rb new file mode 100644 index 0000000..a66293d --- /dev/null +++ b/spec/acceptance/ceilometer_with_mysql_spec.rb @@ -0,0 +1,123 @@ +require 'spec_helper_acceptance' + +describe 'ceilometer with mysql' do + + context 'default parameters' do + + it 'should work with no errors' do + pp= <<-EOS + Exec { logoutput => 'on_failure' } + + # Common resources + include ::apt + # some packages are not autoupgraded in trusty. + # it will be fixed in liberty, but broken in kilo. + $need_to_be_upgraded = ['python-tz', 'python-pbr'] + apt::source { 'trusty-updates-kilo': + location => 'http://ubuntu-cloud.archive.canonical.com/ubuntu/', + release => 'trusty-updates', + required_packages => 'ubuntu-cloud-keyring', + repos => 'kilo/main', + trusted_source => true, + } ~> + exec { '/usr/bin/apt-get -y dist-upgrade': + refreshonly => true, + } + Apt::Source['trusty-updates-kilo'] -> Package<| |> + + class { '::mysql::server': } + + class { '::rabbitmq': + delete_guest_user => true, + erlang_cookie => 'secrete', + } + + rabbitmq_vhost { '/': + provider => 'rabbitmqctl', + require => Class['rabbitmq'], + } + + rabbitmq_user { 'ceilometer': + admin => true, + password => 'an_even_bigger_secret', + provider => 'rabbitmqctl', + require => Class['rabbitmq'], + } + + rabbitmq_user_permissions { 'ceilometer@/': + configure_permission => '.*', + write_permission => '.*', + read_permission => '.*', + provider => 'rabbitmqctl', + require => Class['rabbitmq'], + } + + + # Keystone resources, needed by Ceilometer to run + class { '::keystone::db::mysql': + password => 'keystone', + } + class { '::keystone': + verbose => true, + debug => true, + database_connection => 'mysql://keystone:keystone@127.0.0.1/keystone', + admin_token => 'admin_token', + enabled => true, + } + class { '::keystone::roles::admin': + email => 'test@example.tld', + password => 'a_big_secret', + } + class { '::keystone::endpoint': + public_url => "https://${::fqdn}:5000/", + admin_url => "https://${::fqdn}:35357/", + } + + # Ceilometer resources + class { '::ceilometer': + metering_secret => 'secrete', + rabbit_userid => 'ceilometer', + rabbit_password => 'an_even_bigger_secret', + rabbit_host => '127.0.0.1', + } + # Until https://review.openstack.org/177593 is merged: + Package<| title == 'python-mysqldb' |> -> Class['ceilometer::db'] + class { '::ceilometer::db::mysql': + password => 'a_big_secret', + } + class { '::ceilometer::db': + database_connection => 'mysql://ceilometer:a_big_secret@127.0.0.1/ceilometer?charset=utf8', + } + class { '::ceilometer::keystone::auth': + password => 'a_big_secret', + } + class { '::ceilometer::client': } + class { '::ceilometer::collector': } + class { '::ceilometer::expirer': } + class { '::ceilometer::alarm::evaluator': } + class { '::ceilometer::alarm::notifier': } + class { '::ceilometer::agent::central': } + class { '::ceilometer::agent::notification': } + class { '::ceilometer::api': + enabled => true, + keystone_password => 'a_big_secret', + keystone_identity_uri => 'http://127.0.0.1:35357/', + } + EOS + + + # Run it twice and test for idempotency + apply_manifest(pp, :catch_failures => true) + apply_manifest(pp, :catch_changes => true) + end + + describe port(8777) do + it { is_expected.to be_listening.with('tcp') } + end + + describe cron do + it { should have_entry('1 0 * * * ceilometer-expirer').with_user('ceilometer') } + end + + end +end diff --git a/spec/acceptance/nodesets/default.yml b/spec/acceptance/nodesets/default.yml new file mode 100644 index 0000000..a2c1ecc --- /dev/null +++ b/spec/acceptance/nodesets/default.yml @@ -0,0 +1,9 @@ +HOSTS: + ubuntu-14.04-amd64: + roles: + - master + platform: ubuntu-14.04-amd64 + hypervisor : none + ip: 127.0.0.1 +CONFIG: + type: foss diff --git a/spec/acceptance/nodesets/nodepool.yml b/spec/acceptance/nodesets/nodepool.yml new file mode 100644 index 0000000..a2c1ecc --- /dev/null +++ b/spec/acceptance/nodesets/nodepool.yml @@ -0,0 +1,9 @@ +HOSTS: + ubuntu-14.04-amd64: + roles: + - master + platform: ubuntu-14.04-amd64 + hypervisor : none + ip: 127.0.0.1 +CONFIG: + type: foss diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb new file mode 100644 index 0000000..32a0d81 --- /dev/null +++ b/spec/spec_helper_acceptance.rb @@ -0,0 +1,46 @@ +require 'beaker-rspec' + +hosts.each do |host| + + install_puppet + + on host, "mkdir -p #{host['distmoduledir']}" +end + +RSpec.configure do |c| + # Project root + proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) + + # Readable test descriptions + c.formatter = :documentation + + # Configure all nodes in nodeset + c.before :suite do + # Install module and dependencies + hosts.each do |host| + + # install git + install_package host, 'git' + + # clean out any module cruft + shell('rm -fr /etc/puppet/modules/*') + + # install library modules from the forge + on host, puppet('module','install','puppetlabs-inifile'), { :acceptable_exit_codes => 0 } + on host, puppet('module','install','puppetlabs-mongodb'), { :acceptable_exit_codes => 0 } + on host, puppet('module','install','puppetlabs-mysql'), { :acceptable_exit_codes => 0 } + on host, puppet('module','install','dprince/qpid'), { :acceptable_exit_codes => 0 } + on host, puppet('module','install','stahnma-epel'), { :acceptable_exit_codes => 0 } + on host, puppet('module','install','puppetlabs-rabbitmq'), { :acceptable_exit_codes => 0 } + + # install puppet modules from git, use master + shell('git clone https://git.openstack.org/stackforge/puppet-openstacklib /etc/puppet/modules/openstacklib') + shell('git clone https://git.openstack.org/stackforge/puppet-keystone /etc/puppet/modules/keystone') + + # Install the module being tested + puppet_module_install(:source => proj_root, :module_name => 'ceilometer') + # List modules installed to help with debugging + on hosts[0], puppet('module','list'), { :acceptable_exit_codes => 0 } + end + end +end -- 2.45.2