From 5a397f2ea75e7054f1f466710808eef7373ebe3a Mon Sep 17 00:00:00 2001 From: Babu Shanmugam Date: Fri, 4 Mar 2016 05:02:58 +0000 Subject: [PATCH] Added spec classes for controller and northd --- .gitignore | 11 +++++ Gemfile | 19 ++++++-- Rakefile | 18 +------ manifests/controller.pp | 11 +++-- manifests/northd.pp | 4 +- spec/classes/init_spec.rb | 7 --- spec/classes/ovn_controller_spec.rb | 74 +++++++++++++++++++++++++++++ spec/classes/ovn_northd_spec.rb | 45 ++++++++++++++++++ spec/shared_examples.rb | 5 ++ spec/spec_helper.rb | 17 +++++++ spec/spec_helper_acceptance.rb | 1 + 11 files changed, 179 insertions(+), 33 deletions(-) create mode 100644 .gitignore delete mode 100644 spec/classes/init_spec.rb create mode 100644 spec/classes/ovn_controller_spec.rb create mode 100644 spec/classes/ovn_northd_spec.rb create mode 100644 spec/shared_examples.rb create mode 100644 spec/spec_helper_acceptance.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15c55ef --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +pkg/ +Gemfile.lock +vendor/ +spec/fixtures/ +.vagrant/ +.bundle/ +coverage/ +.idea/ +*.swp +*.iml +openstack/ diff --git a/Gemfile b/Gemfile index b33108e..824ed3e 100644 --- a/Gemfile +++ b/Gemfile @@ -2,6 +2,19 @@ source 'https://rubygems.org' puppetversion = ENV.key?('PUPPET_VERSION') ? "#{ENV['PUPPET_VERSION']}" : ['>= 3.3'] gem 'puppet', puppetversion -gem 'puppetlabs_spec_helper', '>= 0.8.2' -gem 'puppet-lint', '>= 1.0.0' -gem 'facter', '>= 1.7.0' +group :development, :test do + gem 'puppetlabs_spec_helper', '>= 0.8.2' + gem 'puppet-lint', '>= 1.0.0' + gem 'facter', '>= 1.7.0' + gem 'rspec-puppet-facts', :require => 'false' + gem 'puppet-openstack_spec_helper', + :git => 'https://git.openstack.org/openstack/puppet-openstack_spec_helper', + :require => false +end + +group :system_tests do + gem 'beaker-rspec', :require => 'false' + gem 'beaker-puppet_install_helper', :require => 'false' + gem 'r10k', :require => 'false' +end + diff --git a/Rakefile b/Rakefile index a16ed29..168d108 100644 --- a/Rakefile +++ b/Rakefile @@ -1,17 +1 @@ -require 'puppetlabs_spec_helper/rake_tasks' -require 'puppet-lint/tasks/puppet-lint' -PuppetLint.configuration.send('disable_80chars') -PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"] - -desc "Validate manifests, templates, and ruby files" -task :validate do - Dir['manifests/**/*.pp'].each do |manifest| - sh "puppet parser validate --noop #{manifest}" - end - Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file| - sh "ruby -c #{ruby_file}" unless ruby_file =~ /spec\/fixtures/ - end - Dir['templates/**/*.erb'].each do |template| - sh "erb -P -x -T '-' #{template} | ruby -c" - end -end +require 'puppet-openstack_spec_helper/rake_tasks' diff --git a/manifests/controller.pp b/manifests/controller.pp index 8e83a6d..be4ffe5 100644 --- a/manifests/controller.pp +++ b/manifests/controller.pp @@ -21,10 +21,13 @@ class ovn::controller( $ovn_encap_type = 'geneve', $ovn_encap_ip = undef ) { - include $::ovn::params - include $::vswitch + include ::ovn::params + include ::vswitch::ovs - service { 'controller': +#validate_string($ovn_remote) +#validate_ip_address($ovn_encap_ip) + + service { $::ovn::params::ovn_controller_service_name: ensure => true, name => $::ovn::params::ovn_controller_service_name, enable => true, @@ -33,7 +36,7 @@ class ovn::controller( Vs_config['external_ids:ovn-encap-ip']] } - package { 'controller': + package { $::ovn::params::ovn_package_name: ensure => present, name => $::ovn::params::ovn_package_name, before => Service['controller'] diff --git a/manifests/northd.pp b/manifests/northd.pp index 7b36b82..c1bae91 100644 --- a/manifests/northd.pp +++ b/manifests/northd.pp @@ -4,14 +4,14 @@ # installs ovn package starts the ovn-northd service # class ovn::northd() { - include $::ovn::params + include ::ovn::params service { 'northd': ensure => true, enable => true, name => $::ovn::params::ovn_northd_service_name } - package { 'ovn': + package { $::ovn::params::ovn_package_name: ensure => present, name => $::ovn::params::ovn_package_name, before => Service['northd'] diff --git a/spec/classes/init_spec.rb b/spec/classes/init_spec.rb deleted file mode 100644 index ab995dc..0000000 --- a/spec/classes/init_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'spec_helper' -describe 'ovn' do - - context 'with defaults for all parameters' do - it { should contain_class('ovn') } - end -end diff --git a/spec/classes/ovn_controller_spec.rb b/spec/classes/ovn_controller_spec.rb new file mode 100644 index 0000000..3c1196f --- /dev/null +++ b/spec/classes/ovn_controller_spec.rb @@ -0,0 +1,74 @@ +require 'spec_helper' + +describe 'ovn::controller' do + + let :redhat_platform_params do { + :ovn_package_name => 'openvswitch-ovn', + :ovn_controller_service_name => 'ovn-controller' + } + end + + shared_examples 'ovn controller' do + it 'includes params' do + is_expected.to contain_class('ovn::params') + end + + it 'includes controller' do + is_expected.to contain_class('ovn::controller') + end + + it 'starts controller' do + is_expected.to contain_service(platform_params[:ovn_controller_service_name]).with( + :ensure => true, + :name => platform_params[:ovn_controller_service_name], + :enable => true, + ) + end + + it 'installs package' do + is_expected.to contain_package(platform_params[:ovn_package_name]).with( + :ensure => 'present', + :name => platform_params[:ovn_package_name], + :before => 'Service[controller]' + ) + end + + it 'configures ovsdb' do + is_expected.to contain_vs_config('external_ids:ovn-remote').with( + :ensure => 'present', + :value => params[:ovn_remote], + :require => 'Service[openvswitch]' + ) + + is_expected.to contain_vs_config('external_ids:ovn-encap-type').with( + :ensure => 'present', + :value => params[:ovn_encap_type], + :require => 'Service[openvswitch]' + ) + + is_expected.to contain_vs_config('external_ids:ovn-encap-ip').with( + :ensure => 'present', + :value => params[:ovn_encap_ip], + :require => 'Service[openvswitch]' + ) + end + end + + context 'with redhat platform' do + let :params do { + :ovn_remote => 'tcp:x.x.x.x:5000', + :ovn_encap_type => 'geneve', + :ovn_encap_ip => '1.2.3.4' + } + end + + let :facts do + {:osfamily => 'Redhat', + } + end + + let :platform_params do redhat_platform_params end + + it_configures 'ovn controller' + end +end diff --git a/spec/classes/ovn_northd_spec.rb b/spec/classes/ovn_northd_spec.rb new file mode 100644 index 0000000..be64ec3 --- /dev/null +++ b/spec/classes/ovn_northd_spec.rb @@ -0,0 +1,45 @@ +require 'spec_helper' + +describe 'ovn::northd' do + + let :redhat_platform_params do { + :ovn_package_name => 'openvswitch-ovn', + :ovn_northd_service_name => 'ovn-northd' + } + end + + shared_examples 'ovn northd' do + it 'includes params' do + is_expected.to contain_class('ovn::params') + end + + it 'starts northd' do + is_expected.to contain_service('northd').with( + :ensure => true, + :name => platform_params[:ovn_northd_service_name], + :enable => true, + ) + end + + it 'installs package' do + is_expected.to contain_package(platform_params[:ovn_package_name]).with( + :ensure => 'present', + :name => platform_params[:ovn_package_name], + :before => 'Service[northd]' + ) + end + end + + context 'on redhat' do + let :platform_params do redhat_platform_params end + + let :facts do + {:osfamily => 'Redhat', + } + end + + it_configures 'ovn northd' + end + +end + diff --git a/spec/shared_examples.rb b/spec/shared_examples.rb new file mode 100644 index 0000000..fec0eac --- /dev/null +++ b/spec/shared_examples.rb @@ -0,0 +1,5 @@ +shared_examples_for "a Puppet::Error" do |description| + it "with message matching #{description.inspect}" do + expect { is_expected.to have_class_count(1) }.to raise_error(Puppet::Error, description) + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2c6f566..be3811c 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1 +1,18 @@ require 'puppetlabs_spec_helper/module_spec_helper' +require 'shared_examples' + +require 'puppet-openstack_spec_helper/defaults' +require 'rspec-puppet-facts' +include RspecPuppetFacts + +RSpec.configure do |c| + c.alias_it_should_behave_like_to :it_configures, 'configures' + c.alias_it_should_behave_like_to :it_raises, 'raises' + # TODO(aschultz): remove this after all tests converted to use OSDefaults + # instead of referencing @default_facts + c.before :each do + @default_facts = OSDefaults.get_facts + end +end + +at_exit { RSpec::Puppet::Coverage.report! } diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb new file mode 100644 index 0000000..9196bc9 --- /dev/null +++ b/spec/spec_helper_acceptance.rb @@ -0,0 +1 @@ +require 'puppet-openstack_spec_helper/beaker_spec_helper'