summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorChris Price <chris@puppetlabs.com>2012-06-14 11:42:49 -0700
committerChris Price <chris@puppetlabs.com>2012-06-14 11:42:49 -0700
commit91273a5a2b0c88e7129908406fd0933a0d88ef11 (patch)
tree1aaedf588f44cf0a1fc4069095687d59676f0fc7 /spec
parent74fbedcf5b0cef8e5272a95ab55fc6bd83a13228 (diff)
downloadpuppet-inifile-91273a5a2b0c88e7129908406fd0933a0d88ef11.tar.gz
puppet-inifile-91273a5a2b0c88e7129908406fd0933a0d88ef11.tar.bz2
Started writing some tests, work has been punted
Diffstat (limited to 'spec')
-rw-r--r--spec/spec_helper.rb4
-rw-r--r--spec/unit/puppet/provider/ini_setting/ruby_spec.rb204
2 files changed, 208 insertions, 0 deletions
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