Skip to content

Commit

Permalink
Merge pull request redhat-openstack#66 from hunner/update_specs
Browse files Browse the repository at this point in the history
(FM-161) Add beaker tests for parameter coverage
  • Loading branch information
Ashley Penney committed Jan 27, 2014
2 parents 664051c + eda78ab commit 467c4c5
Show file tree
Hide file tree
Showing 17 changed files with 582 additions and 9 deletions.
2 changes: 1 addition & 1 deletion .fixtures.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
fixtures:
symlinks:
inifile: '#{source_dir}'
inifile: "#{source_dir}"
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ group :development, :test do
gem 'rspec-puppet', :require => false
gem 'puppetlabs_spec_helper', :require => false
gem 'simplecov', :require => false
gem 'beaker', :require => false
gem 'beaker-rspec', :require => false
gem 'puppet-lint', :require => false
gem 'serverspec', :require => false
gem 'pry', :require => false
end

Expand Down
12 changes: 12 additions & 0 deletions spec/acceptance/basic_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
require 'spec_helper_acceptance'

# Here we put the more basic fundamental tests, ultra obvious stuff.
describe "basic tests:" do
it 'copies the module across' do
# No point diagnosing any more if the module wasn't copied properly
shell "ls #{default['distmoduledir']}/inifile" do |r|
expect(r.stdout).to match(/Modulefile/)
expect(r.stderr).to be_empty
end
end
end
288 changes: 288 additions & 0 deletions spec/acceptance/ini_setting_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,288 @@
require 'spec_helper_acceptance'

describe 'ini_setting resource' do
after :all do
shell("rm /tmp/*.ini", :acceptable_exit_codes => [0,1])
end

shared_examples 'has_content' do |path,pp,content|
before :all do
shell("rm #{path}", :acceptable_exit_codes => [0,1])
end
after :all do
shell("cat #{path}", :acceptable_exit_codes => [0,1])
shell("rm #{path}", :acceptable_exit_codes => [0,1])
end

it 'applies the manifest twice with no stderr' do
expect(apply_manifest(pp, :catch_failures => true).stderr).to eq("")
expect(apply_manifest(pp, :catch_changes => true).stderr).to eq("")
end

describe file(path) do
it { should be_file }
it { should contain(content) }
end
end

shared_examples 'has_error' do |path,pp,error|
before :all do
shell("rm #{path}", :acceptable_exit_codes => [0,1])
end
after :all do
shell("cat #{path}", :acceptable_exit_codes => [0,1])
shell("rm #{path}", :acceptable_exit_codes => [0,1])
end

it 'applies the manifest and gets a failure message' do
expect(apply_manifest(pp, :expect_failures => true).stderr).to match(error)
end

describe file(path) do
it { should_not be_file }
end
end

describe 'ensure parameter' do
context '=> present for global and section' do
pp = <<-EOS
ini_setting { 'ensure => present for section':
ensure => present,
path => '/tmp/ini_setting.ini',
section => 'one',
setting => 'two',
value => 'three',
}
ini_setting { 'ensure => present for global':
ensure => present,
path => '/tmp/ini_setting.ini',
section => '',
setting => 'four',
value => 'five',
}
EOS

it 'applies the manifest twice with no stderr' do
expect(apply_manifest(pp, :catch_failures => true).stderr).to eq("")
expect(apply_manifest(pp, :catch_changes => true).stderr).to eq("")
end

describe file('/tmp/ini_setting.ini') do
it { should be_file }
it { should contain("four = five\n[one]\ntwo = three") }
end
end

context '=> absent for key/value' do
before :all do
shell('echo -e "four = five\n[one]\ntwo = three" > /tmp/ini_setting.ini')
end

pp = <<-EOS
ini_setting { 'ensure => absent for key/value':
ensure => absent,
path => '/tmp/ini_setting.ini',
section => 'one',
setting => 'two',
value => 'three',
}
EOS

it 'applies the manifest twice with no stderr' do
expect(apply_manifest(pp, :catch_failures => true).stderr).to eq("")
expect(apply_manifest(pp, :catch_changes => true).stderr).to eq("")
end

describe file('/tmp/ini_setting.ini') do
it { should be_file }
it { should contain('four = five') }
it { should contain('[one]') }
it { should_not contain('two = three') }
end
end

context '=> absent for section', :pending => "cannot ensure absent on a section" do
before :all do
shell('echo -e "four = five\n[one]\ntwo = three" > /tmp/ini_setting.ini')
end
after :all do
shell("cat /tmp/ini_setting.ini", :acceptable_exit_codes => [0,1])
shell("rm /tmp/ini_setting.ini", :acceptable_exit_codes => [0,1])
end

pp = <<-EOS
ini_setting { 'ensure => absent for section':
ensure => absent,
path => '/tmp/ini_setting.ini',
section => 'one',
}
EOS

it 'applies the manifest twice with no stderr' do
expect(apply_manifest(pp, :catch_failures => true).stderr).to eq("")
expect(apply_manifest(pp, :catch_changes => true).stderr).to eq("")
end

describe file('/tmp/ini_setting.ini') do
it { should be_file }
it { should contain('four = five') }
it { should_not contain('[one]') }
it { should_not contain('two = three') }
end
end

context '=> absent for global' do
before :all do
shell('echo -e "four = five\n[one]\ntwo = three" > /tmp/ini_setting.ini')
end
after :all do
shell("cat /tmp/ini_setting.ini", :acceptable_exit_codes => [0,1])
shell("rm /tmp/ini_setting.ini", :acceptable_exit_codes => [0,1])
end

pp = <<-EOS
ini_setting { 'ensure => absent for global':
ensure => absent,
path => '/tmp/ini_setting.ini',
section => '',
setting => 'four',
value => 'five',
}
EOS

it 'applies the manifest twice with no stderr' do
expect(apply_manifest(pp, :catch_failures => true).stderr).to eq("")
expect(apply_manifest(pp, :catch_changes => true).stderr).to eq("")
end

describe file('/tmp/ini_setting.ini') do
it { should be_file }
it { should_not contain('four = five') }
it { should contain('[one]') }
it { should contain('two = three') }
end
end
end

describe 'section, setting, value parameters' do
{
"section => 'test', setting => 'foo', value => 'bar'," => "[test]\nfoo = bar",
"section => 'more', setting => 'baz', value => 'quux'," => "[more]\nbaz = quux",
"section => '', setting => 'top', value => 'level'," => "top = level",
}.each do |parameter_list, content|
context parameter_list do
pp = <<-EOS
ini_setting { "#{parameter_list}":
ensure => present,
path => '/tmp/ini_setting.ini',
#{parameter_list}
}
EOS

it_behaves_like 'has_content', '/tmp/ini_setting.ini', pp, content
end
end

{
"section => 'test'," => /setting is a required.+value is a required/,
"setting => 'foo', value => 'bar'," => /section is a required/,
"section => 'test', setting => 'foo'," => /value is a required/,
"section => 'test', value => 'bar'," => /setting is a required/,
"value => 'bar'," => /section is a required.+setting is a required/,
"setting => 'foo'," => /section is a required.+value is a required/,
}.each do |parameter_list, error|
context parameter_list, :pending => 'no error checking yet' do
pp = <<-EOS
ini_setting { "#{parameter_list}":
ensure => present,
path => '/tmp/ini_setting.ini',
#{parameter_list}
}
EOS

it_behaves_like 'has_error', '/tmp/ini_setting.ini', pp, error
end
end
end

describe 'path parameter' do
[
"/tmp/one.ini",
"/tmp/two.ini",
"/tmp/three.ini",
].each do |path|
context "path => #{path}" do
pp = <<-EOS
ini_setting { 'path => #{path}':
ensure => present,
section => 'one',
setting => 'two',
value => 'three',
path => '#{path}',
}
EOS

it_behaves_like 'has_content', path, pp, "[one]\ntwo = three"
end
end

context "path => foo" do
pp = <<-EOS
ini_setting { 'path => foo':
ensure => present,
section => 'one',
setting => 'two',
value => 'three',
path => 'foo',
}
EOS

it_behaves_like 'has_error', 'foo', pp, /must be fully qualified/
end
end

describe 'key_val_separator parameter' do
{
"" => "two = three",
"key_val_separator => '='," => "two=three",
"key_val_separator => ' = '," => "two = three",
}.each do |parameter, content|
context "with \"#{parameter}\" makes \"#{content}\"" do
pp = <<-EOS
ini_setting { "with #{parameter} makes #{content}":
ensure => present,
section => 'one',
setting => 'two',
value => 'three',
path => '/tmp/key_val_separator.ini',
#{parameter}
}
EOS

it_behaves_like 'has_content', '/tmp/key_val_separator.ini', pp, content
end
end

{
"key_val_separator => ''," => /must contain exactly one/,
"key_val_separator => ','," => /must contain exactly one/,
"key_val_separator => ' '," => /must contain exactly one/,
"key_val_separator => ' == '," => /must contain exactly one/,
}.each do |parameter, error|
context "with \"#{parameter}\" raises \"#{error}\"" do
pp = <<-EOS
ini_setting { "with #{parameter} raises #{error}":
ensure => present,
section => 'one',
setting => 'two',
value => 'three',
path => '/tmp/key_val_separator.ini',
#{parameter}
}
EOS

it_behaves_like 'has_error', '/tmp/key_val_separator.ini', pp, error
end
end
end
end
Loading

0 comments on commit 467c4c5

Please sign in to comment.