My general "ouch" sense for design that I am going to mess up using
some time has gone off for exactly this reason here, too.  I would
much rather avoid this sort of magic wrapper or whatever if it was
even remotely possible.

    Daniel

On Tue, Jan 25, 2011 at 15:35, Luke Kanies <[email protected]> wrote:
> Why even call this method if there's no @should value?
>
> The reason I removed the code that did exactly this was because I (thought I) 
> moved the check for that value into the resource_harness class, which made 
> the check in the insync? method redundant.
>
> One comment below.
>
> On Jan 25, 2011, at 3:16 PM, Paul Berry wrote:
>
>> Created a method safe_insync? which first checks whether the property
>> has a "should" value of nil, and if so returns true.  Most insync?
>> methods were already doing this, but a few were not, leading to bugs
>> if a property was being audited but not set.
>>
>> Types should continue to override the insync? method, but callers of
>> insync? should call safe_insync? instead.
>>
>> Paired-with: Jesse Wolfe <[email protected]>
>> Signed-off-by: Paul Berry <[email protected]>
>> ---
>> lib/puppet/property.rb                     |   17 ++++++++++++++++-
>> lib/puppet/property/keyvalue.rb            |    2 --
>> lib/puppet/property/list.rb                |    2 --
>> lib/puppet/provider/file/posix.rb          |    2 --
>> lib/puppet/provider/file/win32.rb          |    2 --
>> lib/puppet/provider/zone/solaris.rb        |    2 +-
>> lib/puppet/transaction/resource_harness.rb |    4 ++--
>> lib/puppet/type.rb                         |    4 ++--
>> lib/puppet/type/cron.rb                    |    6 +-----
>> lib/puppet/type/file.rb                    |    2 +-
>> lib/puppet/type/file/content.rb            |    1 -
>> lib/puppet/type/file/target.rb             |    2 +-
>> lib/puppet/type/mount.rb                   |    2 +-
>> lib/puppet/type/package.rb                 |    2 --
>> lib/puppet/type/service.rb                 |    2 +-
>> lib/puppet/type/user.rb                    |    2 --
>> lib/puppet/type/yumrepo.rb                 |    4 ++--
>> lib/puppet/type/zpool.rb                   |    4 ----
>> spec/unit/property/keyvalue_spec.rb        |   10 +++++-----
>> spec/unit/property/list_spec.rb            |   14 +++++++-------
>> spec/unit/type/file/content_spec.rb        |   24 ++++++++++++++----------
>> spec/unit/type/file/ensure_spec.rb         |   15 ++++++++-------
>> spec/unit/type/file/group_spec.rb          |   10 +++++-----
>> spec/unit/type/file/owner_spec.rb          |   14 +++++++-------
>> spec/unit/type/file/selinux_spec.rb        |    4 ++--
>> spec/unit/type/file_spec.rb                |   14 ++++++++++++++
>> spec/unit/type/mount_spec.rb               |    8 ++++----
>> spec/unit/type/ssh_authorized_key_spec.rb  |    2 +-
>> spec/unit/type/user_spec.rb                |    6 +++---
>> spec/unit/type/zpool_spec.rb               |   24 ++++++++++++------------
>> 30 files changed, 110 insertions(+), 97 deletions(-)
>>
>> diff --git a/lib/puppet/property.rb b/lib/puppet/property.rb
>> index 84e1a03..12f496a 100644
>> --- a/lib/puppet/property.rb
>> +++ b/lib/puppet/property.rb
>> @@ -152,9 +152,24 @@ class Puppet::Property < Puppet::Parameter
>>   # since we cannot fix it.  Otherwise, we expect our should value
>>   # to be an array, and if @is matches any of those values, then
>>   # we consider it to be in-sync.
>> -  def insync?(is)
>> +  #
>> +  # Don't override this method.
>> +  def safe_insync?(is)
>> +    # If there is no @should value, consider the property to be in sync.
>>     return true unless @should
>>
>> +    # Otherwise delegate to the (possibly derived) insync? method.
>> +    insync?(is)
>> +  end
>> +
>> +  def self.method_added(sym)
>> +    raise "Puppet::Property#safe_insync? shouldn't be overridden; please 
>> override insync? instead" if sym == :safe_insync?
>> +  end
>
> This quite frightens me; have we done this anywhere else?  Why the 
> significant concern on whether this particular method gets overridden?
>
>> +  # This method should be overridden by derived classes if necessary
>> +  # to provide extra logic to determine whether the property is in
>> +  # sync.
>> +  def insync?(is)
>>     self.devfail "#{self.class.name}'s should is not array" unless 
>> @should.is_a?(Array)
>>
>>     # an empty array is analogous to no should values
>> diff --git a/lib/puppet/property/keyvalue.rb 
>> b/lib/puppet/property/keyvalue.rb
>> index 0181708..57d0ea2 100644
>> --- a/lib/puppet/property/keyvalue.rb
>> +++ b/lib/puppet/property/keyvalue.rb
>> @@ -77,8 +77,6 @@ module Puppet
>>       end
>>
>>       def insync?(is)
>> -        return true unless @should
>> -
>>         return true unless is
>>
>>         (is == self.should)
>> diff --git a/lib/puppet/property/list.rb b/lib/puppet/property/list.rb
>> index dcee85d..b86dc87 100644
>> --- a/lib/puppet/property/list.rb
>> +++ b/lib/puppet/property/list.rb
>> @@ -66,8 +66,6 @@ module Puppet
>>       end
>>
>>       def insync?(is)
>> -        return true unless @should
>> -
>>         return true unless is
>>
>>         (prepare_is_for_comparison(is) == self.should)
>> diff --git a/lib/puppet/provider/file/posix.rb 
>> b/lib/puppet/provider/file/posix.rb
>> index 415a5af..f7b8c97 100644
>> --- a/lib/puppet/provider/file/posix.rb
>> +++ b/lib/puppet/provider/file/posix.rb
>> @@ -28,8 +28,6 @@ Puppet::Type.type(:file).provide :posix do
>>   end
>>
>>   def is_owner_insync?(current, should)
>> -    return true unless should
>> -
>>     should.each do |value|
>>       if value =~ /^\d+$/
>>         uid = Integer(value)
>> diff --git a/lib/puppet/provider/file/win32.rb 
>> b/lib/puppet/provider/file/win32.rb
>> index 23aa491..21e7ca9 100644
>> --- a/lib/puppet/provider/file/win32.rb
>> +++ b/lib/puppet/provider/file/win32.rb
>> @@ -15,8 +15,6 @@ Puppet::Type.type(:file).provide :microsoft_windows do
>>   end
>>
>>   def is_owner_insync?(current, should)
>> -    return true unless should
>> -
>>     should.each do |value|
>>       if value =~ /^\d+$/
>>         uid = Integer(value)
>> diff --git a/lib/puppet/provider/zone/solaris.rb 
>> b/lib/puppet/provider/zone/solaris.rb
>> index c114449..f46337b 100644
>> --- a/lib/puppet/provider/zone/solaris.rb
>> +++ b/lib/puppet/provider/zone/solaris.rb
>> @@ -40,7 +40,7 @@ Puppet::Type.type(:zone).provide(:solaris) do
>>     # Then perform all of our configuration steps.  It's annoying
>>     # that we need this much internal info on the resource.
>>     @resource.send(:properties).each do |property|
>> -      str += property.configtext + "\n" if property.is_a? 
>> ZoneConfigProperty and ! property.insync?(properties[property.name])
>> +      str += property.configtext + "\n" if property.is_a? 
>> ZoneConfigProperty and ! property.safe_insync?(properties[property.name])
>>     end
>>
>>     str += "commit\n"
>> diff --git a/lib/puppet/transaction/resource_harness.rb 
>> b/lib/puppet/transaction/resource_harness.rb
>> index 0abab10..4a3d35e 100644
>> --- a/lib/puppet/transaction/resource_harness.rb
>> +++ b/lib/puppet/transaction/resource_harness.rb
>> @@ -52,13 +52,13 @@ class Puppet::Transaction::ResourceHarness
>>     # Update the machine state & create logs/events
>>     events = []
>>     ensure_param = resource.parameter(:ensure)
>> -    if desired_values[:ensure] && 
>> !ensure_param.insync?(current_values[:ensure])
>> +    if desired_values[:ensure] && 
>> !ensure_param.safe_insync?(current_values[:ensure])
>>       events << apply_parameter(ensure_param, current_values[:ensure], 
>> audited_params.include?(:ensure), historical_values[:ensure])
>>       synced_params << :ensure
>>     elsif current_values[:ensure] != :absent
>>       work_order = resource.properties # Note: only the resource knows what 
>> order to apply changes in
>>       work_order.each do |param|
>> -        if desired_values[param.name] && 
>> !param.insync?(current_values[param.name])
>> +        if desired_values[param.name] && 
>> !param.safe_insync?(current_values[param.name])
>>           events << apply_parameter(param, current_values[param.name], 
>> audited_params.include?(param.name), historical_values[param.name])
>>           synced_params << param.name
>>         end
>> diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
>> index ea3944b..e03650b 100644
>> --- a/lib/puppet/type.rb
>> +++ b/lib/puppet/type.rb
>> @@ -648,7 +648,7 @@ class Type
>>           "The is value is not in the is array for '#{property.name}'"
>>       end
>>       ensureis = is[property]
>> -      if property.insync?(ensureis) and property.should == :absent
>> +      if property.safe_insync?(ensureis) and property.should == :absent
>>         return true
>>       end
>>     end
>> @@ -660,7 +660,7 @@ class Type
>>       end
>>
>>       propis = is[property]
>> -      unless property.insync?(propis)
>> +      unless property.safe_insync?(propis)
>>         property.debug("Not in sync: #{propis.inspect} vs 
>> #{property.should.inspect}")
>>         insync = false
>>       #else
>> diff --git a/lib/puppet/type/cron.rb b/lib/puppet/type/cron.rb
>> index 76399d6..4b18e71 100755
>> --- a/lib/puppet/type/cron.rb
>> +++ b/lib/puppet/type/cron.rb
>> @@ -54,11 +54,7 @@ Puppet::Type.newtype(:cron) do
>>     # We have to override the parent method, because we consume the entire
>>     # "should" array
>>     def insync?(is)
>> -      if @should
>> -        self.is_to_s(is) == self.should_to_s
>> -      else
>> -        true
>> -      end
>> +      self.is_to_s(is) == self.should_to_s
>>     end
>>
>>     # A method used to do parameter input handling.  Converts integers
>> diff --git a/lib/puppet/type/file.rb b/lib/puppet/type/file.rb
>> index eee948c..0d69446 100644
>> --- a/lib/puppet/type/file.rb
>> +++ b/lib/puppet/type/file.rb
>> @@ -779,7 +779,7 @@ Puppet::Type.newtype(:file) do
>>       # Make sure we get a new stat objct
>>       expire
>>       currentvalue = thing.retrieve
>> -      thing.sync unless thing.insync?(currentvalue)
>> +      thing.sync unless thing.safe_insync?(currentvalue)
>>     end
>>   end
>> end
>> diff --git a/lib/puppet/type/file/content.rb 
>> b/lib/puppet/type/file/content.rb
>> index b8f30a9..04b917a 100755
>> --- a/lib/puppet/type/file/content.rb
>> +++ b/lib/puppet/type/file/content.rb
>> @@ -96,7 +96,6 @@ module Puppet
>>       end
>>
>>       return true if ! @resource.replace?
>> -      return true unless self.should
>>
>>       result = super
>>
>> diff --git a/lib/puppet/type/file/target.rb b/lib/puppet/type/file/target.rb
>> index 9e7229d..b9fe921 100644
>> --- a/lib/puppet/type/file/target.rb
>> +++ b/lib/puppet/type/file/target.rb
>> @@ -14,7 +14,7 @@ module Puppet
>>
>>       # Only call mklink if ensure didn't call us in the first place.
>>       currentensure  = @resource.property(:ensure).retrieve
>> -      mklink if @resource.property(:ensure).insync?(currentensure)
>> +      mklink if @resource.property(:ensure).safe_insync?(currentensure)
>>     end
>>
>>     # Create our link.
>> diff --git a/lib/puppet/type/mount.rb b/lib/puppet/type/mount.rb
>> index d048c90..36fb553 100755
>> --- a/lib/puppet/type/mount.rb
>> +++ b/lib/puppet/type/mount.rb
>> @@ -89,7 +89,7 @@ module Puppet
>>           if prop.name == :ensure
>>             false
>>           else
>> -            ! prop.insync?(currentvalues[prop])
>> +            ! prop.safe_insync?(currentvalues[prop])
>>           end
>>         end.each { |prop| prop.sync }.length
>>         @resource.flush if oos > 0
>> diff --git a/lib/puppet/type/package.rb b/lib/puppet/type/package.rb
>> index 51a8663..d73d90d 100644
>> --- a/lib/puppet/type/package.rb
>> +++ b/lib/puppet/type/package.rb
>> @@ -109,8 +109,6 @@ module Puppet
>>       # Override the parent method, because we've got all kinds of
>>       # funky definitions of 'in sync'.
>>       def insync?(is)
>> -        @should ||= []
>> -
>>         @latest ||= nil
>>         @lateststamp ||= (Time.now.to_i - 1000)
>>         # Iterate across all of the should values, and see how they
>> diff --git a/lib/puppet/type/service.rb b/lib/puppet/type/service.rb
>> index c00f027..973a76c 100644
>> --- a/lib/puppet/type/service.rb
>> +++ b/lib/puppet/type/service.rb
>> @@ -73,7 +73,7 @@ module Puppet
>>
>>         if property = @resource.property(:enable)
>>           val = property.retrieve
>> -          property.sync unless property.insync?(val)
>> +          property.sync unless property.safe_insync?(val)
>>         end
>>
>>         event
>> diff --git a/lib/puppet/type/user.rb b/lib/puppet/type/user.rb
>> index 761d5d7..5de73e3 100755
>> --- a/lib/puppet/type/user.rb
>> +++ b/lib/puppet/type/user.rb
>> @@ -112,8 +112,6 @@ module Puppet
>>       end
>>
>>       def insync?(is)
>> -        return true unless self.should
>> -
>>         # We know the 'is' is a number, so we need to convert the 'should' 
>> to a number,
>>         # too.
>>         @should.each do |value|
>> diff --git a/lib/puppet/type/yumrepo.rb b/lib/puppet/type/yumrepo.rb
>> index 160b216..9b4c794 100644
>> --- a/lib/puppet/type/yumrepo.rb
>> +++ b/lib/puppet/type/yumrepo.rb
>> @@ -7,14 +7,14 @@ module Puppet
>>   class IniProperty < Puppet::Property
>>     def insync?(is)
>>       # A should property of :absent is the same as nil
>> -      if is.nil? && (should.nil? || should == :absent)
>> +      if is.nil? && should == :absent
>>         return true
>>       end
>>       super(is)
>>     end
>>
>>     def sync
>> -      if insync?(retrieve)
>> +      if safe_insync?(retrieve)
>>         result = nil
>>       else
>>         result = set(self.should)
>> diff --git a/lib/puppet/type/zpool.rb b/lib/puppet/type/zpool.rb
>> index 49cce55..df06522 100755
>> --- a/lib/puppet/type/zpool.rb
>> +++ b/lib/puppet/type/zpool.rb
>> @@ -8,8 +8,6 @@ module Puppet
>>       end
>>
>>       def insync?(is)
>> -        return true unless self.should
>> -
>>         return @should == [:absent] if is == :absent
>>
>>         flatten_and_sort(is) == flatten_and_sort(@should)
>> @@ -18,8 +16,6 @@ module Puppet
>>
>>     class MultiVDev < VDev
>>       def insync?(is)
>> -        return true unless self.should
>> -
>>         return @should == [:absent] if is == :absent
>>
>>         return false unless is.length == @should.length
>> diff --git a/spec/unit/property/keyvalue_spec.rb 
>> b/spec/unit/property/keyvalue_spec.rb
>> index 7666def..a44d891 100644
>> --- a/spec/unit/property/keyvalue_spec.rb
>> +++ b/spec/unit/property/keyvalue_spec.rb
>> @@ -134,7 +134,7 @@ describe klass do
>>       end
>>     end
>>
>> -    describe "when calling insync?" do
>> +    describe "when calling safe_insync?" do
>>       before do
>>         @provider = mock("provider")
>>         @property.stubs(:provider).returns(@provider)
>> @@ -142,26 +142,26 @@ describe klass do
>>       end
>>
>>       it "should return true unless @should is defined and not nil" do
>> -        @property.insync?("foo") == true
>> +        @property.safe_insync?("foo") == true
>>       end
>>
>>       it "should return true if the passed in values is nil" do
>>         @property.should = "foo"
>> -        @property.insync?(nil) == true
>> +        @property.safe_insync?(nil) == true
>>       end
>>
>>       it "should return true if hashified should value == (retrieved) value 
>> passed in" do
>>         @provider.stubs(:prop_name).returns({ :foo => "baz", :bar => "boo" })
>>         @property.should = ["foo=baz", "bar=boo"]
>>         @property.expects(:inclusive?).returns(true)
>> -        @property.insync?({ :foo => "baz", :bar => "boo" }).must == true
>> +        @property.safe_insync?({ :foo => "baz", :bar => "boo" }).must == 
>> true
>>       end
>>
>>       it "should return false if prepared value != should value" do
>>         @provider.stubs(:prop_name).returns({ "foo" => "bee", "bar" => "boo" 
>> })
>>         @property.should = ["foo=baz", "bar=boo"]
>>         @property.expects(:inclusive?).returns(true)
>> -        @property.insync?({ "foo" => "bee", "bar" => "boo" }).must == false
>> +        @property.safe_insync?({ "foo" => "bee", "bar" => "boo" }).must == 
>> false
>>       end
>>     end
>>   end
>> diff --git a/spec/unit/property/list_spec.rb 
>> b/spec/unit/property/list_spec.rb
>> index 3e8cc54..c6c5db1 100644
>> --- a/spec/unit/property/list_spec.rb
>> +++ b/spec/unit/property/list_spec.rb
>> @@ -118,39 +118,39 @@ describe list_class do
>>       end
>>     end
>>
>> -    describe "when calling insync?" do
>> +    describe "when calling safe_insync?" do
>>       it "should return true unless @should is defined and not nil" do
>> -        @property.must be_insync("foo")
>> +        @property.must be_safe_insync("foo")
>>       end
>>
>>       it "should return true unless the passed in values is not nil" do
>>         @property.should = "foo"
>> -        @property.must be_insync(nil)
>> +        @property.must be_safe_insync(nil)
>>       end
>>
>>       it "should call prepare_is_for_comparison with value passed in and 
>> should" do
>>         @property.should = "foo"
>>         @property.expects(:prepare_is_for_comparison).with("bar")
>>         @property.expects(:should)
>> -        @property.insync?("bar")
>> +        @property.safe_insync?("bar")
>>       end
>>
>>       it "should return true if 'is' value is array of comma delimited 
>> should values" do
>>         @property.should = "bar,foo"
>>         @property.expects(:inclusive?).returns(true)
>> -        @property.must be_insync(["bar","foo"])
>> +        @property.must be_safe_insync(["bar","foo"])
>>       end
>>
>>       it "should return true if 'is' value is :absent and should value is 
>> empty string" do
>>         @property.should = ""
>>         @property.expects(:inclusive?).returns(true)
>> -        @property.must be_insync([])
>> +        @property.must be_safe_insync([])
>>       end
>>
>>       it "should return false if prepared value != should value" do
>>         @property.should = "bar,baz,foo"
>>         @property.expects(:inclusive?).returns(true)
>> -        @property.must_not be_insync(["bar","foo"])
>> +        @property.must_not be_safe_insync(["bar","foo"])
>>       end
>>     end
>>
>> diff --git a/spec/unit/type/file/content_spec.rb 
>> b/spec/unit/type/file/content_spec.rb
>> index cde643f..3ec57f0 100755
>> --- a/spec/unit/type/file/content_spec.rb
>> +++ b/spec/unit/type/file/content_spec.rb
>> @@ -141,17 +141,20 @@ describe content do
>>
>>     it "should return true if the resource shouldn't be a regular file" do
>>       @resource.expects(:should_be_file?).returns false
>> -      @content.must be_insync("whatever")
>> +      @content.should = "foo"
>> +      @content.must be_safe_insync("whatever")
>>     end
>>
>>     it "should return false if the current content is :absent" do
>> -      @content.should_not be_insync(:absent)
>> +      @content.should = "foo"
>> +      @content.should_not be_safe_insync(:absent)
>>     end
>>
>>     it "should return false if the file should be a file but is not present" 
>> do
>>       @resource.expects(:should_be_file?).returns true
>> +      @content.should = "foo"
>>
>> -      @content.should_not be_insync(:absent)
>> +      @content.should_not be_safe_insync(:absent)
>>     end
>>
>>     describe "and the file exists" do
>> @@ -161,12 +164,12 @@ describe content do
>>
>>       it "should return false if the current contents are different from the 
>> desired content" do
>>         @content.should = "some content"
>> -        @content.should_not be_insync("other content")
>> +        @content.should_not be_safe_insync("other content")
>>       end
>>
>>       it "should return true if the sum for the current contents is the same 
>> as the sum for the desired content" do
>>         @content.should = "some content"
>> -        @content.must be_insync("{md5}" + Digest::MD5.hexdigest("some 
>> content"))
>> +        @content.must be_safe_insync("{md5}" + Digest::MD5.hexdigest("some 
>> content"))
>>       end
>>
>>       describe "and Puppet[:show_diff] is set" do
>> @@ -179,14 +182,14 @@ describe content do
>>           @content.expects(:diff).returns("my diff").once
>>           @content.expects(:print).with("my diff").once
>>
>> -          @content.insync?("other content")
>> +          @content.safe_insync?("other content")
>>         end
>>
>>         it "should not display a diff if the sum for the current contents is 
>> the same as the sum for the desired content" do
>>           @content.should = "some content"
>>           @content.expects(:diff).never
>>
>> -          @content.insync?("{md5}" + Digest::MD5.hexdigest("some content"))
>> +          @content.safe_insync?("{md5}" + Digest::MD5.hexdigest("some 
>> content"))
>>         end
>>       end
>>     end
>> @@ -199,17 +202,18 @@ describe content do
>>       it "should be insync if the file exists and the content is different" 
>> do
>>         @resource.stubs(:stat).returns mock('stat')
>>
>> -        @content.must be_insync("whatever")
>> +        @content.must be_safe_insync("whatever")
>>       end
>>
>>       it "should be insync if the file exists and the content is right" do
>>         @resource.stubs(:stat).returns mock('stat')
>>
>> -        @content.must be_insync("something")
>> +        @content.must be_safe_insync("something")
>>       end
>>
>>       it "should not be insync if the file does not exist" do
>> -        @content.should_not be_insync(:absent)
>> +        @content.should = "foo"
>> +        @content.should_not be_safe_insync(:absent)
>>       end
>>     end
>>   end
>> diff --git a/spec/unit/type/file/ensure_spec.rb 
>> b/spec/unit/type/file/ensure_spec.rb
>> index ec53ed8..dbb3a10 100755
>> --- a/spec/unit/type/file/ensure_spec.rb
>> +++ b/spec/unit/type/file/ensure_spec.rb
>> @@ -41,44 +41,45 @@ describe property do
>>     end
>>
>>     it "should always be in sync if replace is 'false' unless the file is 
>> missing" do
>> +      @ensure.should = :file
>>       @resource.expects(:replace?).returns false
>> -      @ensure.insync?(:link).should be_true
>> +      @ensure.safe_insync?(:link).should be_true
>>     end
>>
>>     it "should be in sync if :ensure is set to :absent and the file does not 
>> exist" do
>>       @ensure.should = :absent
>>
>> -      @ensure.must be_insync(:absent)
>> +      @ensure.must be_safe_insync(:absent)
>>     end
>>
>>     it "should not be in sync if :ensure is set to :absent and the file 
>> exists" do
>>       @ensure.should = :absent
>>
>> -      @ensure.should_not be_insync(:file)
>> +      @ensure.should_not be_safe_insync(:file)
>>     end
>>
>>     it "should be in sync if a normal file exists and :ensure is set to 
>> :present" do
>>       @ensure.should = :present
>>
>> -      @ensure.must be_insync(:file)
>> +      @ensure.must be_safe_insync(:file)
>>     end
>>
>>     it "should be in sync if a directory exists and :ensure is set to 
>> :present" do
>>       @ensure.should = :present
>>
>> -      @ensure.must be_insync(:directory)
>> +      @ensure.must be_safe_insync(:directory)
>>     end
>>
>>     it "should be in sync if a symlink exists and :ensure is set to 
>> :present" do
>>       @ensure.should = :present
>>
>> -      @ensure.must be_insync(:link)
>> +      @ensure.must be_safe_insync(:link)
>>     end
>>
>>     it "should not be in sync if :ensure is set to :file and a directory 
>> exists" do
>>       @ensure.should = :file
>>
>> -      @ensure.should_not be_insync(:directory)
>> +      @ensure.should_not be_safe_insync(:directory)
>>     end
>>   end
>> end
>> diff --git a/spec/unit/type/file/group_spec.rb 
>> b/spec/unit/type/file/group_spec.rb
>> index 2283b57..956cd57 100755
>> --- a/spec/unit/type/file/group_spec.rb
>> +++ b/spec/unit/type/file/group_spec.rb
>> @@ -56,19 +56,19 @@ describe property do
>>   describe "when determining if the file is in sync" do
>>     it "should directly compare the group values if the desired group is an 
>> integer" do
>>       @group.should = [10]
>> -      @group.must be_insync(10)
>> +      @group.must be_safe_insync(10)
>>     end
>>
>>     it "should treat numeric strings as integers" do
>>       @group.should = ["10"]
>> -      @group.must be_insync(10)
>> +      @group.must be_safe_insync(10)
>>     end
>>
>>     it "should convert the group name to an integer if the desired group is 
>> a string" do
>>       @group.expects(:gid).with("foo").returns 10
>>       @group.should = %w{foo}
>>
>> -      @group.must be_insync(10)
>> +      @group.must be_safe_insync(10)
>>     end
>>
>>     it "should not validate that groups exist when a group is specified as 
>> an integer" do
>> @@ -80,12 +80,12 @@ describe property do
>>       @group.expects(:gid).with("foo").returns nil
>>       @group.should = %w{foo}
>>
>> -      lambda { @group.insync?(10) }.should raise_error(Puppet::Error)
>> +      lambda { @group.safe_insync?(10) }.should raise_error(Puppet::Error)
>>     end
>>
>>     it "should return false if the groups are not equal" do
>>       @group.should = [10]
>> -      @group.should_not be_insync(20)
>> +      @group.should_not be_safe_insync(20)
>>     end
>>   end
>>
>> diff --git a/spec/unit/type/file/owner_spec.rb 
>> b/spec/unit/type/file/owner_spec.rb
>> index 8e136a1..bcb8e07 100755
>> --- a/spec/unit/type/file/owner_spec.rb
>> +++ b/spec/unit/type/file/owner_spec.rb
>> @@ -68,7 +68,7 @@ describe property do
>>         @provider.expects(:warnonce)
>>
>>         @owner.should = [10]
>> -        @owner.must be_insync(20)
>> +        @owner.must be_safe_insync(20)
>>       end
>>     end
>>
>> @@ -77,24 +77,24 @@ describe property do
>>     end
>>
>>     it "should be in sync if 'should' is not provided" do
>> -      @owner.must be_insync(10)
>> +      @owner.must be_safe_insync(10)
>>     end
>>
>>     it "should directly compare the owner values if the desired owner is an 
>> integer" do
>>       @owner.should = [10]
>> -      @owner.must be_insync(10)
>> +      @owner.must be_safe_insync(10)
>>     end
>>
>>     it "should treat numeric strings as integers" do
>>       @owner.should = ["10"]
>> -      @owner.must be_insync(10)
>> +      @owner.must be_safe_insync(10)
>>     end
>>
>>     it "should convert the owner name to an integer if the desired owner is 
>> a string" do
>>       @provider.expects(:uid).with("foo").returns 10
>>       @owner.should = %w{foo}
>>
>> -      @owner.must be_insync(10)
>> +      @owner.must be_safe_insync(10)
>>     end
>>
>>     it "should not validate that users exist when a user is specified as an 
>> integer" do
>> @@ -106,12 +106,12 @@ describe property do
>>       @provider.expects(:uid).with("foo").returns nil
>>       @owner.should = %w{foo}
>>
>> -      lambda { @owner.insync?(10) }.should raise_error(Puppet::Error)
>> +      lambda { @owner.safe_insync?(10) }.should raise_error(Puppet::Error)
>>     end
>>
>>     it "should return false if the owners are not equal" do
>>       @owner.should = [10]
>> -      @owner.should_not be_insync(20)
>> +      @owner.should_not be_safe_insync(20)
>>     end
>>   end
>>
>> diff --git a/spec/unit/type/file/selinux_spec.rb 
>> b/spec/unit/type/file/selinux_spec.rb
>> index 1ca59e9..043471d 100644
>> --- a/spec/unit/type/file/selinux_spec.rb
>> +++ b/spec/unit/type/file/selinux_spec.rb
>> @@ -73,10 +73,10 @@ Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| 
>> File.exist?(f) ? require(f
>>       @sel.sync
>>     end
>>
>> -    it "should do nothing for insync? if no SELinux support" do
>> +    it "should do nothing for safe_insync? if no SELinux support" do
>>       @sel.should = %{newcontext}
>>       @sel.expects(:selinux_support?).returns false
>> -      @sel.insync?("oldcontext").should == true
>> +      @sel.safe_insync?("oldcontext").should == true
>>     end
>>   end
>> end
>> diff --git a/spec/unit/type/file_spec.rb b/spec/unit/type/file_spec.rb
>> index 22921d8..51c27c0 100755
>> --- a/spec/unit/type/file_spec.rb
>> +++ b/spec/unit/type/file_spec.rb
>> @@ -1065,4 +1065,18 @@ describe Puppet::Type.type(:file) do
>>     end
>>   end
>>
>> +  describe "when auditing" do
>> +    it "should not fail if creating a new file if group is not set" do
>> +      File.exists?(@path).should == false
>> +      file = Puppet::Type::File.new(:name => @path, :audit => "all", 
>> :content => "content")
>> +      catalog = Puppet::Resource::Catalog.new
>> +      catalog.add_resource(file)
>> +
>> +      Puppet::Util::Storage.stubs(:store) # to prevent the catalog from 
>> trying to write state.yaml
>> +      transaction = catalog.apply
>> +
>> +      transaction.report.resource_statuses["File[#{@path}]"].failed.should 
>> == false
>> +      File.exists?(@path).should == true
>> +    end
>> +  end
>> end
>> diff --git a/spec/unit/type/mount_spec.rb b/spec/unit/type/mount_spec.rb
>> index ce82cb5..0d74042 100755
>> --- a/spec/unit/type/mount_spec.rb
>> +++ b/spec/unit/type/mount_spec.rb
>> @@ -184,22 +184,22 @@ describe Puppet::Type.type(:mount)::Ensure do
>>
>>     it "should be insync if it is mounted and should be defined" do
>>       @ensure.should = :defined
>> -      @ensure.insync?(:mounted).should == true
>> +      @ensure.safe_insync?(:mounted).should == true
>>     end
>>
>>     it "should be insync if it is unmounted and should be defined" do
>>       @ensure.should = :defined
>> -      @ensure.insync?(:unmounted).should == true
>> +      @ensure.safe_insync?(:unmounted).should == true
>>     end
>>
>>     it "should be insync if it is mounted and should be present" do
>>       @ensure.should = :present
>> -      @ensure.insync?(:mounted).should == true
>> +      @ensure.safe_insync?(:mounted).should == true
>>     end
>>
>>     it "should be insync if it is unmounted and should be present" do
>>       @ensure.should = :present
>> -      @ensure.insync?(:unmounted).should == true
>> +      @ensure.safe_insync?(:unmounted).should == true
>>     end
>>   end
>>
>> diff --git a/spec/unit/type/ssh_authorized_key_spec.rb 
>> b/spec/unit/type/ssh_authorized_key_spec.rb
>> index a0b435f..666616c 100755
>> --- a/spec/unit/type/ssh_authorized_key_spec.rb
>> +++ b/spec/unit/type/ssh_authorized_key_spec.rb
>> @@ -134,7 +134,7 @@ describe ssh_authorized_key do
>>     it "should not raise spurious change events" do
>>       resource = @class.new(:name => "Test", :user => "root")
>>       target = File.expand_path("~root/.ssh/authorized_keys")
>> -      resource.property(:target).insync?(target).should == true
>> +      resource.property(:target).safe_insync?(target).should == true
>>     end
>>   end
>>
>> diff --git a/spec/unit/type/user_spec.rb b/spec/unit/type/user_spec.rb
>> index ccea9ee..0c3e2ab 100755
>> --- a/spec/unit/type/user_spec.rb
>> +++ b/spec/unit/type/user_spec.rb
>> @@ -201,21 +201,21 @@ describe user do
>>       it "should return true if no 'should' values are set" do
>>         @gid = user.attrclass(:gid).new(:resource => @resource)
>>
>> -        @gid.must be_insync(500)
>> +        @gid.must be_safe_insync(500)
>>       end
>>
>>       it "should return true if any of the specified groups are equal to the 
>> current integer" do
>>         Puppet::Util.expects(:gid).with("foo").returns 300
>>         Puppet::Util.expects(:gid).with("bar").returns 500
>>
>> -        @gid.must be_insync(500)
>> +        @gid.must be_safe_insync(500)
>>       end
>>
>>       it "should return false if none of the specified groups are equal to 
>> the current integer" do
>>         Puppet::Util.expects(:gid).with("foo").returns 300
>>         Puppet::Util.expects(:gid).with("bar").returns 500
>>
>> -        @gid.should_not be_insync(700)
>> +        @gid.should_not be_safe_insync(700)
>>       end
>>     end
>>
>> diff --git a/spec/unit/type/zpool_spec.rb b/spec/unit/type/zpool_spec.rb
>> index db12459..be8cb12 100755
>> --- a/spec/unit/type/zpool_spec.rb
>> +++ b/spec/unit/type/zpool_spec.rb
>> @@ -38,27 +38,27 @@ describe vdev_property do
>>
>>   it "should be insync if the devices are the same" do
>>     @property.should = ["dev1 dev2"]
>> -    @property.insync?(["dev2 dev1"]).must be_true
>> +    @property.safe_insync?(["dev2 dev1"]).must be_true
>>   end
>>
>>   it "should be out of sync if the devices are not the same" do
>>     @property.should = ["dev1 dev3"]
>> -    @property.insync?(["dev2 dev1"]).must be_false
>> +    @property.safe_insync?(["dev2 dev1"]).must be_false
>>   end
>>
>>   it "should be insync if the devices are the same and the should values are 
>> comma seperated" do
>>     @property.should = ["dev1", "dev2"]
>> -    @property.insync?(["dev2 dev1"]).must be_true
>> +    @property.safe_insync?(["dev2 dev1"]).must be_true
>>   end
>>
>>   it "should be out of sync if the device is absent and should has a value" 
>> do
>>     @property.should = ["dev1", "dev2"]
>> -    @property.insync?(:absent).must be_false
>> +    @property.safe_insync?(:absent).must be_false
>>   end
>>
>>   it "should be insync if the device is absent and should is absent" do
>>     @property.should = [:absent]
>> -    @property.insync?(:absent).must be_true
>> +    @property.safe_insync?(:absent).must be_true
>>   end
>> end
>>
>> @@ -73,38 +73,38 @@ describe multi_vdev_property do
>>
>>   it "should be insync if the devices are the same" do
>>     @property.should = ["dev1 dev2"]
>> -    @property.insync?(["dev2 dev1"]).must be_true
>> +    @property.safe_insync?(["dev2 dev1"]).must be_true
>>   end
>>
>>   it "should be out of sync if the devices are not the same" do
>>     @property.should = ["dev1 dev3"]
>> -    @property.insync?(["dev2 dev1"]).must be_false
>> +    @property.safe_insync?(["dev2 dev1"]).must be_false
>>   end
>>
>>   it "should be out of sync if the device is absent and should has a value" 
>> do
>>     @property.should = ["dev1", "dev2"]
>> -    @property.insync?(:absent).must be_false
>> +    @property.safe_insync?(:absent).must be_false
>>   end
>>
>>   it "should be insync if the device is absent and should is absent" do
>>     @property.should = [:absent]
>> -    @property.insync?(:absent).must be_true
>> +    @property.safe_insync?(:absent).must be_true
>>   end
>>
>>   describe "when there are multiple lists of devices" do
>>     it "should be in sync if each group has the same devices" do
>>       @property.should = ["dev1 dev2", "dev3 dev4"]
>> -      @property.insync?(["dev2 dev1", "dev3 dev4"]).must be_true
>> +      @property.safe_insync?(["dev2 dev1", "dev3 dev4"]).must be_true
>>     end
>>
>>     it "should be out of sync if any group has the different devices" do
>>       @property.should = ["dev1 devX", "dev3 dev4"]
>> -      @property.insync?(["dev2 dev1", "dev3 dev4"]).must be_false
>> +      @property.safe_insync?(["dev2 dev1", "dev3 dev4"]).must be_false
>>     end
>>
>>     it "should be out of sync if devices are in the wrong group" do
>>       @property.should = ["dev1 dev2", "dev3 dev4"]
>> -      @property.insync?(["dev2 dev3", "dev1 dev4"]).must be_false
>> +      @property.safe_insync?(["dev2 dev3", "dev1 dev4"]).must be_false
>>     end
>>   end
>> end
>> --
>> 1.7.2
>>
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "Puppet Developers" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected].
>> For more options, visit this group at 
>> http://groups.google.com/group/puppet-dev?hl=en.
>>
>
>
> --
> Dawkins's Law of Adversarial Debate:
>   When two incompatible beliefs are advocated with equal intensity,
>   the truth does not lie half way between them.
> ---------------------------------------------------------------------
> Luke Kanies  -|-   http://puppetlabs.com   -|-   +1(615)594-8199
>
>
>
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Puppet Developers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/puppet-dev?hl=en.
>
>



-- 
⎋ Puppet Labs Developer – http://puppetlabs.com
✉ Daniel Pittman <[email protected]>
✆ Contact me via gtalk, email, or phone: +1 (877) 575-9775
♲ Made with 100 percent post-consumer electrons

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to