diff options
| author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-03-19 08:15:36 +0000 |
|---|---|---|
| committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-03-19 08:15:36 +0000 |
| commit | 5b2ffbcb5d2e4113efec9c8ba882c5506d53c242 (patch) | |
| tree | b4127af05cf5682f38fbca928c9fb53e0b42f52b /test | |
| parent | 80dac92b3a5ebd2cb8904505845d63759b5cebb3 (diff) | |
| download | puppet-5b2ffbcb5d2e4113efec9c8ba882c5506d53c242.tar.gz puppet-5b2ffbcb5d2e4113efec9c8ba882c5506d53c242.tar.xz puppet-5b2ffbcb5d2e4113efec9c8ba882c5506d53c242.zip | |
Adding provider features. Woot!
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2313 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'test')
| -rwxr-xr-x | test/ral/manager/provider.rb | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/test/ral/manager/provider.rb b/test/ral/manager/provider.rb index 6075697d6..870c3134a 100755 --- a/test/ral/manager/provider.rb +++ b/test/ral/manager/provider.rb @@ -47,6 +47,87 @@ class TestTypeProviders < Test::Unit::TestCase assert_equal(should, type.allattrs.reject { |p| ! should.include?(p) }, "Providify did not reorder parameters") end + + def test_features + type = Puppet::Type.newtype(:feature_test) do + newparam(:name) {} + ensurable + end + cleanup { Puppet::Type.rmtype(:feature_test) } + + features = {:numeric => [:one, :two], :alpha => [:a, :b]} + + features.each do |name, methods| + assert_nothing_raised("Could not define features") do + type.feature(name, "boo", :methods => methods) + end + end + + providers = {:numbers => features[:numeric], :letters => features[:alpha]} + providers[:both] = features[:numeric] + features[:alpha] + providers[:mixed] = [:one, :b] + providers[:neither] = [:something, :else] + + providers.each do |name, methods| + assert_nothing_raised("Could not create provider %s" % name) do + type.provide(name) do + methods.each do |name| + define_method(name) {} + end + end + end + end + + model = type.create(:name => "foo") + {:numbers => [:numeric], :letters => [:alpha], :both => [:numeric, :alpha], + :mixed => [], :neither => []}.each do |name, should| + should.sort! { |a,b| a.to_s <=> b.to_s } + provider = type.provider(name) + assert(provider, "Could not find provider %s" % name) + assert_equal(should, provider.features, + "Provider %s has incorrect features" % name) + + inst = provider.new(model) + # Make sure the boolean methods work on both the provider and + # instance. + features.keys.each do |feature| + method = feature.to_s + "?" + assert(inst.respond_to?(method), + "No boolean instance method for %s on %s" % + [name, feature]) + assert(provider.respond_to?(method), + "No boolean class method for %s on %s" % [name, feature]) + + if should.include?(feature) + assert(provider.feature?(feature), + "class missing feature? %s" % feature) + assert(inst.feature?(feature), + "instance missing feature? %s" % feature) + assert(provider.send(method), + "class missing feature %s" % feature) + assert(inst.send(method), + "instance missing feature %s" % feature) + else + assert(! provider.feature?(feature), + "class has feature? %s" % feature) + assert(! inst.feature?(feature), + "instance has feature? %s" % feature) + assert(! provider.send(method), + "class has feature %s" % feature) + assert(! inst.send(method), + "instance has feature %s" % feature) + end + end + + end + + Puppet[:trace] = true + Puppet::Type.loadall + Puppet::Type.eachtype do |type| + assert(type.respond_to?(:feature), + "No features method defined for %s" % type.name) + end + end end # $Id$ |
