From 91273a5a2b0c88e7129908406fd0933a0d88ef11 Mon Sep 17 00:00:00 2001 From: Chris Price Date: Thu, 14 Jun 2012 11:42:49 -0700 Subject: Started writing some tests, work has been punted --- spec/spec_helper.rb | 4 + spec/unit/puppet/provider/ini_setting/ruby_spec.rb | 204 +++++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 100644 spec/spec_helper.rb create mode 100644 spec/unit/puppet/provider/ini_setting/ruby_spec.rb (limited to 'spec') diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..3ded441 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,4 @@ +dir = File.expand_path(File.dirname(__FILE__)) +$LOAD_PATH.unshift File.join(dir, 'lib') + +require 'puppetlabs_spec_helper/puppetlabs_spec_helper' diff --git a/spec/unit/puppet/provider/ini_setting/ruby_spec.rb b/spec/unit/puppet/provider/ini_setting/ruby_spec.rb new file mode 100644 index 0000000..7eb4c6d --- /dev/null +++ b/spec/unit/puppet/provider/ini_setting/ruby_spec.rb @@ -0,0 +1,204 @@ +require 'spec_helper' +require 'puppet' + +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 +# 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 +} + + def validate_file(expected_content) + File.read(tmpfile).should == expected_content + end + + + before :each do + File.open(tmpfile, 'w') do |fh| + fh.write(orig_content) + end + end + + context "when ensuring that a setting is present" do + let(:common_params) { { + :title => 'ini_setting_ensure_present_test', + :file => 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.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 +yahoo = yippee + EOS +) + end + + it "should modify an existing setting with a different value" do + fail + end + + it "should recognize an existing setting with the specified value and leave it intact" do + fail + 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 -- cgit v1.2.3