summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-18 18:00:26 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-03-18 18:00:26 +0000
commit2a3f56cc91a38cc6046aeb7f301058561d8d55f7 (patch)
treeb59735414badd0a0144055d193da2fd5bbba33e5
parentfe2f0d9ffc2c3fd324d9f85d57ff6a7262a3b185 (diff)
downloadpuppet-2a3f56cc91a38cc6046aeb7f301058561d8d55f7.tar.gz
puppet-2a3f56cc91a38cc6046aeb7f301058561d8d55f7.tar.xz
puppet-2a3f56cc91a38cc6046aeb7f301058561d8d55f7.zip
Fixing #529 -- specified targets keep their values. The problem was that I was using model[:target] instead of model.should(:target) and model.is(:target). The real problem was that my tests were using a parameter for tests but all of the real code uses properties.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2290 980ebf18-57e1-0310-9a29-db15c13687c0
-rwxr-xr-xlib/puppet/provider/parsedfile.rb13
-rwxr-xr-xtest/ral/providers/parsedfile.rb42
2 files changed, 49 insertions, 6 deletions
diff --git a/lib/puppet/provider/parsedfile.rb b/lib/puppet/provider/parsedfile.rb
index bb6546095..3c1ee0943 100755
--- a/lib/puppet/provider/parsedfile.rb
+++ b/lib/puppet/provider/parsedfile.rb
@@ -195,6 +195,11 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
target_records = prefetch_hook(target_records)
end
+ unless target_records
+ raise Puppet::DevError, "Prefetch hook for provider %s returned nil" %
+ self.name
+ end
+
@records += target_records
# Set current property on any existing resource instances.
@@ -264,7 +269,13 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
# Lastly, check the file from any model instances
self.model.each do |model|
- targets << model[:target]
+ targets << model.value(:target)
+
+ # This is only the case for properties, and targets should always
+ # be properties.
+ if model.respond_to?(:is)
+ targets << model.is(:target)
+ end
end
targets.uniq.reject { |t| t.nil? }
diff --git a/test/ral/providers/parsedfile.rb b/test/ral/providers/parsedfile.rb
index 8a3b0ca97..cfc966a6c 100755
--- a/test/ral/providers/parsedfile.rb
+++ b/test/ral/providers/parsedfile.rb
@@ -27,7 +27,8 @@ class TestParsedFile < Test::Unit::TestCase
newparam(:name) do
end
- newparam(:target) do
+ # The target should always be a property, not a parameter.
+ newproperty(:target) do
defaultto { @parent.class.defaultprovider.default_target }
end
end
@@ -51,7 +52,7 @@ class TestParsedFile < Test::Unit::TestCase
def mkprovider(name = :parsed)
@provider = @type.provide(name, :parent => Puppet::Provider::ParsedFile,
- :filetype => :ram) do
+ :filetype => :ram, :default_target => "yayness") do
record_line name, :fields => %w{name one two}
end
end
@@ -298,12 +299,16 @@ class TestParsedFile < Test::Unit::TestCase
files[:inmemory] = inmem
prov.target_object(inmem).write("inmem yay ness")
- # Lastly, create a model
+ # Lastly, create a model with separate is and should values
mtarget = tempfile()
+ istarget = tempfile()
files[:models] = mtarget
+ files[:ismodels] = istarget
model = mkmodel "yay", :target => mtarget
+ model.is = [:target, istarget]
- assert(model[:target], "Did not get a value for target")
+ assert(model.should(:target), "Did not get a value for target")
+ assert(model.is(:target), "Did not get a value for target")
list = nil
assert_nothing_raised do
@@ -612,6 +617,7 @@ class TestParsedFile < Test::Unit::TestCase
:filetype => :ram, :default_target => :yayness) do
def self.prefetch_hook(records)
+ records
end
record_line :test, :fields => %w{name two}
@@ -626,10 +632,36 @@ class TestParsedFile < Test::Unit::TestCase
prov.expects(:retrieve).with(target).returns([targeted])
prov.expects(:target_records).with(target).returns([targeted])
- prov.expects(:prefetch_hook).with([targeted])
+ prov.expects(:prefetch_hook).with([targeted]).returns([targeted])
prov.prefetch_target(target)
end
+
+ # #529
+ def test_keep_content_with_target
+ mkprovider
+ @provider.filetype = :flat
+ dpath = tempfile
+ opath = tempfile
+ @provider.default_target = dpath
+
+ dtarget = @provider.target_object(dpath)
+ otarget = @provider.target_object(opath)
+
+ dtarget.write("dname a c\n")
+ otarget.write("oname b d\n")
+
+ # Now make a resource that targets elsewhat.
+ res = @type.create(:name => "test", :one => "a", :two => "c",
+ :target => opath)
+
+ assert(res.property(:target), "Target is a parameter, not a property")
+
+ assert_apply(res)
+
+ assert_equal("oname b d\ntest a c\n", otarget.read,
+ "did not get correct results in specified target")
+ end
end
# $Id$