--- /dev/null
+require 'spec_helper'
+require 'puppet'
+
+provider_class = Puppet::Type.type(:ini_subsetting).provider(:ruby)
+describe provider_class do
+ include PuppetlabsSpec::Files
+
+ let(:tmpfile) { tmpfilename("ini_setting_test") }
+
+ def validate_file(expected_content,tmpfile = tmpfile)
+ 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 subsetting is present" do
+ let(:common_params) { {
+ :title => 'ini_setting_ensure_present_test',
+ :path => tmpfile,
+ :section => '',
+ :key_val_separator => '=',
+ :setting => 'JAVA_ARGS',
+ } }
+
+ let(:orig_content) {
+ <<-EOS
+JAVA_ARGS="-Xmx192m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/pe-puppetdb/puppetdb-oom.hprof"
+ EOS
+ }
+
+ it "should add a missing subsetting" do
+ resource = Puppet::Type::Ini_subsetting.new(common_params.merge(
+ :subsetting => '-Xms', :value => '128m'))
+ provider = described_class.new(resource)
+ provider.exists?.should be_nil
+ provider.create
+ validate_file(<<-EOS
+JAVA_ARGS="-Xmx192m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/pe-puppetdb/puppetdb-oom.hprof -Xms128m"
+ EOS
+)
+ end
+
+ it "should remove an existing subsetting" do
+ resource = Puppet::Type::Ini_subsetting.new(common_params.merge(
+ :subsetting => '-Xmx'))
+ provider = described_class.new(resource)
+ provider.exists?.should == "192m"
+ provider.destroy
+ validate_file(<<-EOS
+JAVA_ARGS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/pe-puppetdb/puppetdb-oom.hprof"
+ EOS
+)
+ end
+
+ it "should modify an existing subsetting" do
+ resource = Puppet::Type::Ini_subsetting.new(common_params.merge(
+ :subsetting => '-Xmx', :value => '256m'))
+ provider = described_class.new(resource)
+ provider.exists?.should == "192m"
+ provider.value=('256m')
+ validate_file(<<-EOS
+JAVA_ARGS="-Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/pe-puppetdb/puppetdb-oom.hprof"
+ EOS
+)
+ end
+ end
+
+ context "when working with subsettings in files with unquoted settings values" do
+ let(:common_params) { {
+ :title => 'ini_setting_ensure_present_test',
+ :path => tmpfile,
+ :section => 'master',
+ :setting => 'reports',
+ } }
+
+ let(:orig_content) {
+ <<-EOS
+[master]
+
+reports = http,foo
+ EOS
+ }
+
+ it "should remove an existing subsetting" do
+ resource = Puppet::Type::Ini_subsetting.new(common_params.merge(
+ :subsetting => 'http', :subsetting_separator => ','))
+ provider = described_class.new(resource)
+ provider.exists?.should == ""
+ provider.destroy
+ validate_file(<<-EOS
+[master]
+
+reports = foo
+ EOS
+ )
+ end
+
+ it "should add a new subsetting when the 'parent' setting already exists" do
+ resource = Puppet::Type::Ini_subsetting.new(common_params.merge(
+ :subsetting => 'puppetdb', :subsetting_separator => ','))
+ provider = described_class.new(resource)
+ provider.exists?.should be_nil
+ provider.value=('')
+ validate_file(<<-EOS
+[master]
+
+reports = http,foo,puppetdb
+ EOS
+ )
+ end
+
+ it "should add a new subsetting when the 'parent' setting does not already exist" do
+ resource = Puppet::Type::Ini_subsetting.new(common_params.merge(
+ :setting => 'somenewsetting',
+ :subsetting => 'puppetdb',
+ :subsetting_separator => ','))
+ provider = described_class.new(resource)
+ provider.exists?.should be_nil
+ provider.value=('')
+ validate_file(<<-EOS
+[master]
+
+reports = http,foo
+somenewsetting = puppetdb
+ EOS
+ )
+ end
+
+ end
+end