cprice_puppet avatar cprice_puppet committed 91273a5

Started writing some tests, work has been punted

Comments (0)

Files changed (4)

Add a comment to this file

lib/puppet/provider/ini_setting/ruby.rb

Empty file added.

lib/puppet/type/ini_setting.rb

+Puppet::Type.newtype(:ini_setting) do
+
+  ensurable do
+    defaultvalues
+    defaultto :present
+  end
+end

spec/spec_helper.rb

+dir = File.expand_path(File.dirname(__FILE__))
+$LOAD_PATH.unshift File.join(dir, 'lib')
+
+require 'puppetlabs_spec_helper/puppetlabs_spec_helper'

spec/unit/puppet/provider/ini_setting/ruby_spec.rb

+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
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.