From 9c76b6af1200c71e7ae72e0e2f349919a3081738 Mon Sep 17 00:00:00 2001 From: Chris Price Date: Sat, 28 Jul 2012 21:59:54 -0700 Subject: First (basic) working version of ini_setting provider --- spec/spec_helper.rb | 8 +- spec/unit/puppet/provider/ini_setting/ruby_spec.rb | 186 ++++++--------------- spec/unit/puppet/util/ini_file_spec.rb | 47 ++++++ 3 files changed, 106 insertions(+), 135 deletions(-) create mode 100644 spec/unit/puppet/util/ini_file_spec.rb (limited to 'spec') 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 -- cgit v1.2.3