summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorChris Price <chris@puppetlabs.com>2012-07-28 21:59:54 -0700
committerChris Price <chris@puppetlabs.com>2012-07-28 21:59:54 -0700
commit9c76b6af1200c71e7ae72e0e2f349919a3081738 (patch)
treee3dc5ca1824f1fcf74c08e78d649eed394408a78 /spec
parent91273a5a2b0c88e7129908406fd0933a0d88ef11 (diff)
downloadpuppet-inifile-9c76b6af1200c71e7ae72e0e2f349919a3081738.tar.gz
puppet-inifile-9c76b6af1200c71e7ae72e0e2f349919a3081738.tar.bz2
First (basic) working version of ini_setting provider
Diffstat (limited to 'spec')
-rw-r--r--spec/spec_helper.rb8
-rw-r--r--spec/unit/puppet/provider/ini_setting/ruby_spec.rb186
-rw-r--r--spec/unit/puppet/util/ini_file_spec.rb47
3 files changed, 106 insertions, 135 deletions
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 3ded441..ddbcd6e 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,4 +1,8 @@
-dir = File.expand_path(File.dirname(__FILE__))
-$LOAD_PATH.unshift File.join(dir, 'lib')
+gem 'rspec', '>=2.0.0'
+require 'rspec/expectations'
+
require 'puppetlabs_spec_helper/puppetlabs_spec_helper'
+
+require 'puppetlabs_spec_helper/puppetlabs_spec/files'
+
diff --git a/spec/unit/puppet/provider/ini_setting/ruby_spec.rb b/spec/unit/puppet/provider/ini_setting/ruby_spec.rb
index 7eb4c6d..91d3050 100644
--- a/spec/unit/puppet/provider/ini_setting/ruby_spec.rb
+++ b/spec/unit/puppet/provider/ini_setting/ruby_spec.rb
@@ -5,7 +5,6 @@ provider_class = Puppet::Type.type(:ini_setting).provider(:ruby)
describe provider_class do
include PuppetlabsSpec::Files
-
let(:tmpfile) { tmpfilename("ini_setting_test") }
let(:orig_content) {
<<-EOS
@@ -38,20 +37,15 @@ baz=bazvalue
context "when ensuring that a setting is present" do
let(:common_params) { {
:title => 'ini_setting_ensure_present_test',
- :file => tmpfile,
+ :path => tmpfile,
:section => 'section2',
} }
it "should add a missing setting to the correct section" do
- puts "common params (#{common_params.class}:"
- require 'pp'
- pp common_params
resource = Puppet::Type::Ini_setting.new(common_params.merge(
:setting => 'yahoo', :value => 'yippee'))
- puts "parse title..."
- pp resource.parse_title
provider = described_class.new(resource)
- provider.exists?.should be_nil
+ provider.exists?.should == false
provider.create
validate_file(<<-EOS
# This is a comment
@@ -72,133 +66,59 @@ yahoo = yippee
end
it "should modify an existing setting with a different value" do
- fail
+ resource = Puppet::Type::Ini_setting.new(common_params.merge(
+ :setting => 'baz', :value => 'bazvalue2'))
+ provider = described_class.new(resource)
+ provider.exists?.should == false
+ provider.create
+ validate_file(<<-EOS
+# This is a comment
+[section1]
+; This is also a comment
+foo=foovalue
+
+bar = barvalue
+[section2]
+
+foo= foovalue2
+baz = bazvalue2
+ #another comment
+ ; yet another comment
+ EOS
+ )
end
- it "should recognize an existing setting with the specified value and leave it intact" do
- fail
+ it "should recognize an existing setting with the specified value" do
+ resource = Puppet::Type::Ini_setting.new(common_params.merge(
+ :setting => 'baz', :value => 'bazvalue'))
+ provider = described_class.new(resource)
+ provider.exists?.should == true
+ end
+
+ it "should add a new section if the section does not exist" do
+ resource = Puppet::Type::Ini_setting.new(common_params.merge(
+ :section => "section3", :setting => 'huzzah', :value => 'shazaam'))
+ provider = described_class.new(resource)
+ provider.exists?.should == false
+ provider.create
+ validate_file(<<-EOS
+# This is a comment
+[section1]
+; This is also a comment
+foo=foovalue
+
+bar = barvalue
+[section2]
+
+foo= foovalue2
+baz=bazvalue
+ #another comment
+ ; yet another comment
+
+[section3]
+huzzah = shazaam
+ EOS
+ )
end
end
- #it "should pass" do
- # File.read(@tmpfile).should == orig_content
- #end
-
- #context "when adding" do
- # before :each do
- # #tmp = tmpfilename
- # #
- # #@resource = Puppet::Type::File_line.new(
- # # {:name => 'foo', :path => @tmpfile, :line => 'foo'}
- # #)
- # #@provider = provider_class.new(@resource)
- # end
- # it 'should detect if the line exists in the file' do
- # File.open(@tmpfile, 'w') do |fh|
- # fh.write('foo')
- # end
- # @provider.exists?.should be_true
- # end
- # it 'should detect if the line does not exist in the file' do
- # File.open(@tmpfile, 'w') do |fh|
- # fh.write('foo1')
- # end
- # @provider.exists?.should be_nil
- # end
- # it 'should append to an existing file when creating' do
- # @provider.create
- # File.read(@tmpfile).chomp.should == 'foo'
- # end
- #end
- #
- #context "when matching" do
- # before :each do
- # # TODO: these should be ported over to use the PuppetLabs spec_helper
- # # file fixtures once the following pull request has been merged:
- # # https://github.com/puppetlabs/puppetlabs-stdlib/pull/73/files
- # tmp = Tempfile.new('tmp')
- # @tmpfile = tmp.path
- # tmp.close!
- # @resource = Puppet::Type::File_line.new(
- # {
- # :name => 'foo',
- # :path => @tmpfile,
- # :line => 'foo = bar',
- # :match => '^foo\s*=.*$',
- # }
- # )
- # @provider = provider_class.new(@resource)
- # end
- #
- # it 'should raise an error if more than one line matches, and should not have modified the file' do
- # File.open(@tmpfile, 'w') do |fh|
- # fh.write("foo1\nfoo=blah\nfoo2\nfoo=baz")
- # end
- # @provider.exists?.should be_nil
- # expect { @provider.create }.to raise_error(Puppet::Error, /More than one line.*matches/)
- # File.read(@tmpfile).should eql("foo1\nfoo=blah\nfoo2\nfoo=baz")
- # end
- #
- # it 'should replace a line that matches' do
- # File.open(@tmpfile, 'w') do |fh|
- # fh.write("foo1\nfoo=blah\nfoo2")
- # end
- # @provider.exists?.should be_nil
- # @provider.create
- # File.read(@tmpfile).chomp.should eql("foo1\nfoo = bar\nfoo2")
- # end
- # it 'should add a new line if no lines match' do
- # File.open(@tmpfile, 'w') do |fh|
- # fh.write("foo1\nfoo2")
- # end
- # @provider.exists?.should be_nil
- # @provider.create
- # File.read(@tmpfile).should eql("foo1\nfoo2\nfoo = bar\n")
- # end
- # it 'should do nothing if the exact line already exists' do
- # File.open(@tmpfile, 'w') do |fh|
- # fh.write("foo1\nfoo = bar\nfoo2")
- # end
- # @provider.exists?.should be_true
- # @provider.create
- # File.read(@tmpfile).chomp.should eql("foo1\nfoo = bar\nfoo2")
- # end
- #end
- #
- #context "when removing" do
- # before :each do
- # # TODO: these should be ported over to use the PuppetLabs spec_helper
- # # file fixtures once the following pull request has been merged:
- # # https://github.com/puppetlabs/puppetlabs-stdlib/pull/73/files
- # tmp = Tempfile.new('tmp')
- # @tmpfile = tmp.path
- # tmp.close!
- # @resource = Puppet::Type::File_line.new(
- # {:name => 'foo', :path => @tmpfile, :line => 'foo', :ensure => 'absent' }
- # )
- # @provider = provider_class.new(@resource)
- # end
- # it 'should remove the line if it exists' do
- # File.open(@tmpfile, 'w') do |fh|
- # fh.write("foo1\nfoo\nfoo2")
- # end
- # @provider.destroy
- # File.read(@tmpfile).should eql("foo1\nfoo2")
- # end
- #
- # it 'should remove the line without touching the last new line' do
- # File.open(@tmpfile, 'w') do |fh|
- # fh.write("foo1\nfoo\nfoo2\n")
- # end
- # @provider.destroy
- # File.read(@tmpfile).should eql("foo1\nfoo2\n")
- # end
- #
- # it 'should remove any occurence of the line' do
- # File.open(@tmpfile, 'w') do |fh|
- # fh.write("foo1\nfoo\nfoo2\nfoo\nfoo")
- # end
- # @provider.destroy
- # File.read(@tmpfile).should eql("foo1\nfoo2\n")
- # end
- #end
end
diff --git a/spec/unit/puppet/util/ini_file_spec.rb b/spec/unit/puppet/util/ini_file_spec.rb
new file mode 100644
index 0000000..7e7458a
--- /dev/null
+++ b/spec/unit/puppet/util/ini_file_spec.rb
@@ -0,0 +1,47 @@
+require 'spec_helper'
+require 'puppet/util/ini_file'
+
+describe Puppet::Util::IniFile do
+ context "when parsing a file" do
+ let(:subject) { Puppet::Util::IniFile.new("/my/ini/file/path") }
+ let(:sample_content) {
+ template = <<-EOS
+# This is a comment
+[section1]
+; This is also a comment
+foo=foovalue
+
+bar = barvalue
+[section2]
+
+foo= foovalue2
+baz=bazvalue
+ #another comment
+ ; yet another comment
+ EOS
+ template.split("\n")
+ }
+
+ before :each do
+ described_class.should_receive(:readlines).once.with("/my/ini/file/path") do
+ sample_content
+ end
+ end
+
+ it "should parse the correct number of sections" do
+ subject.section_names.length.should == 2
+ end
+
+ it "should parse the correct section_names" do
+ subject.section_names.should == ["section1", "section2"]
+ end
+
+ it "should expose settings for sections" do
+ subject.get_value("section1", "foo").should == "foovalue"
+ subject.get_value("section1", "bar").should == "barvalue"
+ subject.get_value("section2", "foo").should == "foovalue2"
+ subject.get_value("section2", "baz").should == "bazvalue"
+ end
+
+ end
+end \ No newline at end of file