Browse Source

Fix bug in subsetting handling for new settings

Our new state variable `@quote_char` was not being initialized
property if you used `ini_subsetting` for a setting that did
not yet exist.  This fixes that bug.
Chris Price 11 years ago
parent
commit
cbea5dc

+ 3 - 1
lib/puppet/util/setting_value.rb

@@ -6,7 +6,9 @@ module Util
     def initialize(setting_value, subsetting_separator = ' ')
       @setting_value = setting_value
       @subsetting_separator = subsetting_separator
-      
+
+      @quote_char = ""
+
       if @setting_value
         unquoted, @quote_char = unquote_setting_value(setting_value)
         @subsetting_items = unquoted.scan(Regexp.new("(?:(?:[^\\#{@subsetting_separator}]|\\.)+)"))  # an item can contain escaped separator

+ 18 - 2
spec/unit/puppet/provider/ini_subsetting/ruby_spec.rb

@@ -75,7 +75,6 @@ JAVA_ARGS="-Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/pe
         :title    => 'ini_setting_ensure_present_test',
         :path     => tmpfile,
         :section  => 'master',
-        :key_val_separator => '=',
         :setting => 'reports',
     } }
 
@@ -101,7 +100,7 @@ reports = foo
       )
     end
 
-    it "should add a new subsetting" do
+    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)
@@ -115,5 +114,22 @@ reports = http,foo,puppetdb
       )
     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