From 6b27efb4346e61280f041b63dd8df7ad1f2e7f81 Mon Sep 17 00:00:00 2001 From: varac Date: Mon, 7 Dec 2015 00:22:50 +0100 Subject: Add inital puppet rspec test for custom facts --- .gitignore | 12 ++++++++ Gemfile | 37 +++++++++++++++++++++++ README | 8 +++++ Rakefile | 19 ++++++++++++ spec/spec_helper.rb | 12 ++++++++ spec/unit/custom_facts_spec.rb | 67 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 155 insertions(+) create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 Rakefile create mode 100644 spec/spec_helper.rb create mode 100644 spec/unit/custom_facts_spec.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a54aa97 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +/pkg/ +/Gemfile.lock +/vendor/ +/spec/fixtures/manifests/* +/spec/fixtures/modules/* +!/spec/fixtures/modules/apt +!/spec/fixtures/modules/apt/* +/.vagrant/ +/.bundle/ +/coverage/ +/.idea/ +*.iml diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..4033611 --- /dev/null +++ b/Gemfile @@ -0,0 +1,37 @@ +source "https://rubygems.org" + +def location_for(place, fake_version = nil) + if place =~ /^(git[:@][^#]*)#(.*)/ + [fake_version, { :git => $1, :branch => $2, :require => false }].compact + elsif place =~ /^file:\/\/(.*)/ + ['>= 0', { :path => File.expand_path($1), :require => false }] + else + [place, { :require => false }] + end +end + + +group :test do + gem "rake" + gem "rspec", '< 3.2.0' + gem "rspec-puppet" + gem "puppetlabs_spec_helper" + gem "metadata-json-lint" + gem "rspec-puppet-facts" + gem "mocha" +end + +facterversion = ENV['GEM_FACTER_VERSION'] || ENV['FACTER_GEM_VERSION'] +if facterversion + gem 'facter', *location_for(facterversion) +else + gem 'facter', :require => false +end + +puppetversion = ENV['GEM_PUPPET_VERSION'] || ENV['PUPPET_GEM_VERSION'] +if puppetversion + gem 'puppet', *location_for(puppetversion) +else + gem 'puppet', :require => false +end + diff --git a/README b/README index e46a3c7..e08cc5b 100644 --- a/README +++ b/README @@ -568,6 +568,14 @@ make sure APT indexes are up-to-date before a package upgrade is attempted, but don't want "apt-get update" to happen on every Puppet run. +Tests +===== + +To run pupept rspec tests: + + bundle install --path vendor/bundle + bundle exec rake spec + Licensing ========= diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..85326bb --- /dev/null +++ b/Rakefile @@ -0,0 +1,19 @@ +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 + +task :test => [:lint, :syntax , :validate, :spec] diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..21d1a98 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,12 @@ +# https://puppetlabs.com/blog/testing-modules-in-the-puppet-forge +require 'rspec-puppet' +require 'mocha/api' + +RSpec.configure do |c| + + c.module_path = File.expand_path(File.join(File.dirname(__FILE__), '..', '..')) + c.color = true + + #Puppet.features.stubs(:root? => true) + +end diff --git a/spec/unit/custom_facts_spec.rb b/spec/unit/custom_facts_spec.rb new file mode 100644 index 0000000..2d36bd7 --- /dev/null +++ b/spec/unit/custom_facts_spec.rb @@ -0,0 +1,67 @@ +require "spec_helper" + +describe "Facter::Util::Fact" do + before { + Facter.clear + } + + describe 'custom facts' do + + context 'Debian 7' do + before do + Facter.fact(:operatingsystem).stubs(:value).returns("Debian") + Facter.fact(:operatingsystemrelease).stubs(:value).returns("7.8") + Facter.fact(:lsbdistcodename).stubs(:value).returns("wheezy") + end + + it "debian_release = oldstable" do + expect(Facter.fact(:debian_release).value).to eq('oldstable') + end + + it "debian_codename = wheezy" do + expect(Facter.fact(:debian_codename).value).to eq('wheezy') + end + end + + context 'Debian 8' do + before do + Facter.fact(:operatingsystem).stubs(:value).returns("Debian") + Facter.fact(:operatingsystemrelease).stubs(:value).returns("8.0") + Facter.fact(:lsbdistcodename).stubs(:value).returns("jessie") + end + + it "debian_release = stable" do + expect(Facter.fact(:debian_release).value).to eq('stable') + end + + it "debian_codename = jessie" do + expect(Facter.fact(:debian_codename).value).to eq('jessie') + end + end + + context 'Ubuntu 15.10' do + before do + Facter.fact(:operatingsystem).stubs(:value).returns("Ubuntu") + Facter.fact(:operatingsystemrelease).stubs(:value).returns("15.10") + Facter.fact(:lsbdistcodename).stubs(:value).returns("Vivid") + end + + it "ubuntu_codename = Vivid" do + expect(Facter.fact(:ubuntu_codename).value).to eq('Vivid') + end + end + + end + + describe "Test 'apt_running' fact" do + it "should return true when apt-get is running" do + Facter::Util::Resolution.stubs(:exec).with("pgrep apt-get >/dev/null 2>&1 && echo true || echo false").returns("true") + expect(Facter.fact(:apt_running).value).to eq('true') + end + it "should return false when apt-get is not running" do + Facter::Util::Resolution.stubs(:exec).with("pgrep apt-get >/dev/null 2>&1 && echo true || echo false").returns("false") + expect(Facter.fact(:apt_running).value).to eq('false') + end + end + +end -- cgit v1.2.3 From a70c52c1d4f399c22fa6c71289031350a1da44b5 Mon Sep 17 00:00:00 2001 From: varac Date: Mon, 7 Dec 2015 14:27:04 +0100 Subject: Fix loading of util/debian.rb for custom facts requirering the facter/util/debian.rb module causes puppet warnings on wheezy hosts, and custom facts like `$::debian_codename` cannot be evaluated. warning: Could not load fact file /srv/dev/projects/puppet/shared-modules//apt/lib/facter/debian_nextcodename.rb: no such file to load -- facter/util/debian Removing the require line solves this. --- lib/facter/debian_codename.rb | 2 ++ lib/facter/debian_lts.rb | 2 ++ lib/facter/debian_nextcodename.rb | 2 ++ lib/facter/debian_release.rb | 2 ++ lib/facter/ubuntu_nextcodename.rb | 2 ++ 5 files changed, 10 insertions(+) diff --git a/lib/facter/debian_codename.rb b/lib/facter/debian_codename.rb index 06ec5ff..254877a 100644 --- a/lib/facter/debian_codename.rb +++ b/lib/facter/debian_codename.rb @@ -1,5 +1,7 @@ begin require 'facter/util/debian' +rescue LoadError + require "#{File.dirname(__FILE__)}/util/debian" end def version_to_codename(version) diff --git a/lib/facter/debian_lts.rb b/lib/facter/debian_lts.rb index 1c137e1..f53a9eb 100644 --- a/lib/facter/debian_lts.rb +++ b/lib/facter/debian_lts.rb @@ -1,5 +1,7 @@ begin require 'facter/util/debian' +rescue LoadError + require "#{File.dirname(__FILE__)}/util/debian" end Facter.add(:debian_lts) do diff --git a/lib/facter/debian_nextcodename.rb b/lib/facter/debian_nextcodename.rb index af16cc8..6e994a4 100644 --- a/lib/facter/debian_nextcodename.rb +++ b/lib/facter/debian_nextcodename.rb @@ -1,5 +1,7 @@ begin require 'facter/util/debian' +rescue LoadError + require "#{File.dirname(__FILE__)}/util/debian" end def debian_codename_to_next(codename) diff --git a/lib/facter/debian_release.rb b/lib/facter/debian_release.rb index 09e8eef..2c334cc 100644 --- a/lib/facter/debian_release.rb +++ b/lib/facter/debian_release.rb @@ -1,5 +1,7 @@ begin require 'facter/util/debian' +rescue LoadError + require "#{File.dirname(__FILE__)}/util/debian" end def debian_codename_to_release(codename) diff --git a/lib/facter/ubuntu_nextcodename.rb b/lib/facter/ubuntu_nextcodename.rb index 38b64ad..ba985bf 100644 --- a/lib/facter/ubuntu_nextcodename.rb +++ b/lib/facter/ubuntu_nextcodename.rb @@ -1,5 +1,7 @@ begin require 'facter/util/ubuntu' +rescue LoadError + require "#{File.dirname(__FILE__)}/util/debian" end def ubuntu_codename_to_next(codename) -- cgit v1.2.3