summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Helwig <jacob@puppetlabs.com>2011-04-22 15:19:54 -0700
committerJacob Helwig <jacob@puppetlabs.com>2011-04-22 15:19:54 -0700
commit1ee6f949416a269cc7103dc1ae863fc0f91c7a8b (patch)
tree7a750e930eb6fbfb8c3593fc5dd85d08a1777a23
parent0b9c7adce13cad4325d514f9d97562364042319c (diff)
parentc306db2037a12fcf5064ab496b96eaa3011d5e71 (diff)
downloadpuppet-1ee6f949416a269cc7103dc1ae863fc0f91c7a8b.tar.gz
puppet-1ee6f949416a269cc7103dc1ae863fc0f91c7a8b.tar.xz
puppet-1ee6f949416a269cc7103dc1ae863fc0f91c7a8b.zip
Merge branch 'tickets/2.6.x/6487-help-directoryservice-provider-work-on-future-OSX-versions' into 2.6.next
* tickets/2.6.x/6487-help-directoryservice-provider-work-on-future-OSX-versions: (#6487) Add some testing for OS X version support in DirectoryService provider (#6487) Directoryservice provider will fail in future OS releases
-rw-r--r--lib/puppet/provider/nameservice/directoryservice.rb19
-rwxr-xr-xspec/unit/provider/nameservice/directoryservice_spec.rb60
2 files changed, 71 insertions, 8 deletions
diff --git a/lib/puppet/provider/nameservice/directoryservice.rb b/lib/puppet/provider/nameservice/directoryservice.rb
index b01880360..aab491122 100644
--- a/lib/puppet/provider/nameservice/directoryservice.rb
+++ b/lib/puppet/provider/nameservice/directoryservice.rb
@@ -235,11 +235,12 @@ class DirectoryService < Puppet::Provider::NameService
# have a lot of choice. Ultimately this should all be done using Ruby
# to access the DirectoryService APIs directly, but that's simply not
# feasible for a while yet.
- case self.get_macosx_version_major
- when "10.4"
- dscl_plist = self.parse_dscl_url_data(dscl_output)
- when "10.5", "10.6"
+ if self.get_macosx_version_major > "10.4"
dscl_plist = self.parse_dscl_plist_data(dscl_output)
+ elsif self.get_macosx_version_major == "10.4"
+ dscl_plist = self.parse_dscl_url_data(dscl_output)
+ else
+ fail("Puppet does not support OS X versions < 10.4")
end
self.generate_attribute_hash(dscl_plist, *type_properties)
@@ -257,12 +258,14 @@ class DirectoryService < Puppet::Provider::NameService
# different format for the -url output with objects with spaces in
# their values. *sigh*. Use -url for 10.4 in the hope this can be
# deprecated one day, and use -plist for 10.5 and higher.
- case self.get_macosx_version_major
- when "10.4"
- command_vector = [ command(:dscl), "-url", "." ]
- when "10.5", "10.6"
+ if self.get_macosx_version_major > "10.4"
command_vector = [ command(:dscl), "-plist", "." ]
+ elsif self.get_macosx_version_major == "10.4"
+ command_vector = [ command(:dscl), "-url", "." ]
+ else
+ fail("Puppet does not support OS X versions < 10.4")
end
+
# JJM: The actual action to perform. See "man dscl"
# Common actiosn: -create, -delete, -merge, -append, -passwd
command_vector << ds_action
diff --git a/spec/unit/provider/nameservice/directoryservice_spec.rb b/spec/unit/provider/nameservice/directoryservice_spec.rb
index 661899db9..07f75e3f4 100755
--- a/spec/unit/provider/nameservice/directoryservice_spec.rb
+++ b/spec/unit/provider/nameservice/directoryservice_spec.rb
@@ -36,3 +36,63 @@ require File.dirname(__FILE__) + '/../../../spec_helper'
end
end
end
+
+describe 'DirectoryService.single_report' do
+ it 'should fail on OS X < 10.4' do
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_macosx_version_major).returns("10.3")
+
+ lambda {
+ Puppet::Provider::NameService::DirectoryService.single_report('resource_name')
+ }.should raise_error(RuntimeError, "Puppet does not support OS X versions < 10.4")
+ end
+
+ it 'should use url data on 10.4' do
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_macosx_version_major).returns("10.4")
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_ds_path).returns('Users')
+ Puppet::Provider::NameService::DirectoryService.stubs(:list_all_present).returns(
+ ['root', 'user1', 'user2', 'resource_name']
+ )
+ Puppet::Provider::NameService::DirectoryService.stubs(:generate_attribute_hash)
+ Puppet::Provider::NameService::DirectoryService.stubs(:execute)
+ Puppet::Provider::NameService::DirectoryService.expects(:parse_dscl_url_data)
+
+ Puppet::Provider::NameService::DirectoryService.single_report('resource_name')
+ end
+
+ it 'should use plist data on > 10.4' do
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_macosx_version_major).returns("10.5")
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_ds_path).returns('Users')
+ Puppet::Provider::NameService::DirectoryService.stubs(:list_all_present).returns(
+ ['root', 'user1', 'user2', 'resource_name']
+ )
+ Puppet::Provider::NameService::DirectoryService.stubs(:generate_attribute_hash)
+ Puppet::Provider::NameService::DirectoryService.stubs(:execute)
+ Puppet::Provider::NameService::DirectoryService.expects(:parse_dscl_plist_data)
+
+ Puppet::Provider::NameService::DirectoryService.single_report('resource_name')
+ end
+end
+
+describe 'DirectoryService.get_exec_preamble' do
+ it 'should fail on OS X < 10.4' do
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_macosx_version_major).returns("10.3")
+
+ lambda {
+ Puppet::Provider::NameService::DirectoryService.get_exec_preamble('-list')
+ }.should raise_error(RuntimeError, "Puppet does not support OS X versions < 10.4")
+ end
+
+ it 'should use url data on 10.4' do
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_macosx_version_major).returns("10.4")
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_ds_path).returns('Users')
+
+ Puppet::Provider::NameService::DirectoryService.get_exec_preamble('-list').should include("-url")
+ end
+
+ it 'should use plist data on > 10.4' do
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_macosx_version_major).returns("10.5")
+ Puppet::Provider::NameService::DirectoryService.stubs(:get_ds_path).returns('Users')
+
+ Puppet::Provider::NameService::DirectoryService.get_exec_preamble('-list').should include("-plist")
+ end
+end