puppet 2.7.19 → 2.7.20.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CONTRIBUTING.md +61 -238
- data/Gemfile +32 -0
- data/Gemfile.lock +44 -0
- data/LICENSE +1 -1
- data/README_DEVELOPER.md +300 -5
- data/Rakefile +41 -37
- data/ext/build_defaults.yaml +20 -0
- data/ext/debian/README.Debian +8 -0
- data/ext/debian/README.source +2 -0
- data/ext/debian/TODO.Debian +1 -0
- data/ext/debian/changelog.erb +1104 -0
- data/ext/debian/compat +1 -0
- data/ext/debian/control +142 -0
- data/ext/debian/copyright +361 -0
- data/ext/debian/docs +1 -0
- data/ext/debian/fileserver.conf +17 -0
- data/ext/debian/puppet-common.dirs +8 -0
- data/ext/debian/puppet-common.install +3 -0
- data/ext/debian/puppet-common.lintian-overrides +7 -0
- data/ext/debian/puppet-common.manpages +2 -0
- data/ext/debian/puppet-common.postinst +35 -0
- data/ext/debian/puppet-common.postrm +32 -0
- data/ext/debian/puppet-el.dirs +1 -0
- data/ext/debian/puppet-el.emacsen-install +25 -0
- data/ext/debian/puppet-el.emacsen-remove +11 -0
- data/ext/debian/puppet-el.emacsen-startup +9 -0
- data/ext/debian/puppet-el.install +1 -0
- data/ext/debian/puppet-testsuite.install +3 -0
- data/ext/debian/puppet-testsuite.lintian-overrides +4 -0
- data/ext/debian/puppet.NEWS +86 -0
- data/ext/debian/puppet.conf +14 -0
- data/ext/debian/puppet.default +7 -0
- data/ext/debian/puppet.dirs +1 -0
- data/ext/debian/puppet.init +118 -0
- data/ext/debian/puppet.install +4 -0
- data/ext/debian/puppet.lintian-overrides +3 -0
- data/ext/debian/puppet.logrotate +11 -0
- data/ext/debian/puppet.manpages +36 -0
- data/ext/debian/puppet.postinst +20 -0
- data/ext/debian/puppet.postrm +20 -0
- data/ext/debian/puppet.preinst +20 -0
- data/ext/debian/puppetmaster-common.install +5 -0
- data/ext/debian/puppetmaster-common.manpages +5 -0
- data/ext/debian/puppetmaster-common.puppetqd.default +27 -0
- data/ext/debian/puppetmaster-common.puppetqd.init +84 -0
- data/ext/debian/puppetmaster-passenger.dirs +4 -0
- data/ext/debian/puppetmaster-passenger.postinst +66 -0
- data/ext/debian/puppetmaster-passenger.postrm +33 -0
- data/ext/debian/puppetmaster.NEWS +13 -0
- data/ext/debian/puppetmaster.README.debian +16 -0
- data/ext/debian/puppetmaster.default +38 -0
- data/ext/debian/puppetmaster.dirs +1 -0
- data/ext/debian/puppetmaster.init +158 -0
- data/ext/debian/puppetmaster.install +1 -0
- data/ext/debian/puppetmaster.lintian-overrides +3 -0
- data/ext/debian/puppetmaster.manpages +1 -0
- data/ext/debian/puppetmaster.postinst +20 -0
- data/ext/debian/puppetmaster.postrm +5 -0
- data/ext/debian/puppetmaster.preinst +22 -0
- data/ext/debian/rules +127 -0
- data/ext/debian/source/format +1 -0
- data/ext/debian/source/options +1 -0
- data/ext/debian/vim-puppet.README.Debian +13 -0
- data/ext/debian/vim-puppet.dirs +3 -0
- data/ext/debian/vim-puppet.yaml +5 -0
- data/ext/debian/watch +2 -0
- data/ext/emacs/puppet-mode.el +1 -0
- data/{conf → ext}/osx/PackageInfo.plist +0 -0
- data/{conf → ext}/osx/createpackage.sh +0 -0
- data/ext/osx/file_mapping.yaml +38 -0
- data/ext/osx/preflight.erb +37 -0
- data/{tasks/rake/templates → ext/osx}/prototype.plist.erb +0 -0
- data/ext/packaging/README-Solaris.md +117 -0
- data/ext/packaging/README.md +255 -0
- data/ext/packaging/spec/spec_helper.rb +12 -0
- data/ext/packaging/spec/tasks/00_utils_spec.rb +66 -0
- data/ext/packaging/tasks/00_utils.rake +382 -0
- data/ext/packaging/tasks/10_setupvars.rake +71 -0
- data/ext/packaging/tasks/20_setupextravars.rake +25 -0
- data/ext/packaging/tasks/apple.rake +201 -0
- data/ext/packaging/tasks/clean.rake +5 -0
- data/ext/packaging/tasks/deb.rake +108 -0
- data/ext/packaging/tasks/doc.rake +20 -0
- data/ext/packaging/tasks/fetch.rake +18 -0
- data/ext/packaging/tasks/gem.rake +68 -0
- data/ext/packaging/tasks/ips.rake +80 -0
- data/ext/packaging/tasks/mock.rake +126 -0
- data/ext/packaging/tasks/pe_deb.rake +9 -0
- data/ext/packaging/tasks/pe_remote.rake +45 -0
- data/ext/packaging/tasks/pe_rpm.rake +21 -0
- data/ext/packaging/tasks/pe_ship.rake +30 -0
- data/ext/packaging/tasks/pe_sign.rake +27 -0
- data/ext/packaging/tasks/pe_sles.rake +96 -0
- data/ext/packaging/tasks/release.rake +73 -0
- data/ext/packaging/tasks/remote_build.rake +78 -0
- data/ext/packaging/tasks/rpm.rake +52 -0
- data/ext/packaging/tasks/ship.rake +78 -0
- data/ext/packaging/tasks/sign.rake +82 -0
- data/ext/packaging/tasks/tag.rake +8 -0
- data/ext/packaging/tasks/tar.rake +68 -0
- data/ext/packaging/tasks/template.rake +13 -0
- data/ext/packaging/tasks/update.rake +16 -0
- data/ext/packaging/tasks/version.rake +21 -0
- data/ext/project_data.yaml +24 -0
- data/{conf/redhat/puppet.spec → ext/redhat/puppet.spec.erb} +18 -10
- data/install.rb +8 -8
- data/lib/puppet.rb +2 -6
- data/lib/puppet/agent/locker.rb +2 -0
- data/lib/puppet/application.rb +1 -1
- data/lib/puppet/application/agent.rb +1 -1
- data/lib/puppet/application/apply.rb +1 -1
- data/lib/puppet/application/cert.rb +5 -6
- data/lib/puppet/application/describe.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/kick.rb +1 -1
- data/lib/puppet/application/master.rb +1 -1
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/defaults.rb +21 -3
- data/lib/puppet/external/dot.rb +1 -1
- data/lib/puppet/face/help/global.erb +1 -1
- data/lib/puppet/face/module/install.rb +1 -1
- data/lib/puppet/face/module/list.rb +1 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/node/clean.rb +23 -18
- data/lib/puppet/face/parser.rb +11 -2
- data/lib/puppet/file_collection.rb +16 -27
- data/lib/puppet/file_collection/lookup.rb +6 -16
- data/lib/puppet/file_serving/base.rb +4 -4
- data/lib/puppet/indirector/catalog/static_compiler.rb +3 -4
- data/lib/puppet/indirector/certificate/disabled_ca.rb +22 -0
- data/lib/puppet/indirector/certificate_request/disabled_ca.rb +22 -0
- data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +22 -0
- data/lib/puppet/indirector/face.rb +2 -2
- data/lib/puppet/indirector/key/disabled_ca.rb +22 -0
- data/lib/puppet/indirector/node/exec.rb +13 -1
- data/lib/puppet/indirector/request.rb +4 -0
- data/lib/puppet/metatype/manager.rb +17 -10
- data/lib/puppet/network/authstore.rb +1 -1
- data/lib/puppet/network/rights.rb +1 -2
- data/lib/puppet/node/environment.rb +1 -0
- data/lib/puppet/parameter/value.rb +9 -3
- data/lib/puppet/parser/ast.rb +1 -4
- data/lib/puppet/parser/files.rb +1 -1
- data/lib/puppet/parser/functions.rb +68 -22
- data/lib/puppet/parser/functions/create_resources.rb +2 -3
- data/lib/puppet/parser/functions/shellquote.rb +21 -25
- data/lib/puppet/parser/lexer.rb +40 -6
- data/lib/puppet/parser/relationship.rb +3 -1
- data/lib/puppet/parser/resource.rb +2 -3
- data/lib/puppet/parser/resource/param.rb +3 -5
- data/lib/puppet/parser/scope.rb +7 -4
- data/lib/puppet/property.rb +5 -3
- data/lib/puppet/provider.rb +5 -5
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/file/windows.rb +10 -29
- data/lib/puppet/provider/group/groupadd.rb +2 -3
- data/lib/puppet/provider/group/ldap.rb +1 -1
- data/lib/puppet/provider/group/windows_adsi.rb +1 -1
- data/lib/puppet/provider/ldap.rb +5 -1
- data/lib/puppet/provider/nameservice.rb +3 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +2 -2
- data/lib/puppet/provider/package/gem.rb +6 -2
- data/lib/puppet/provider/package/portage.rb +4 -2
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +2 -2
- data/lib/puppet/provider/service/base.rb +2 -41
- data/lib/puppet/provider/service/daemontools.rb +1 -1
- data/lib/puppet/provider/service/launchd.rb +1 -1
- data/lib/puppet/provider/service/redhat.rb +6 -5
- data/lib/puppet/provider/service/runit.rb +1 -1
- data/lib/puppet/provider/service/service.rb +43 -0
- data/lib/puppet/provider/service/windows.rb +1 -8
- data/lib/puppet/provider/user/user_role_add.rb +2 -1
- data/lib/puppet/provider/user/useradd.rb +8 -3
- data/lib/puppet/provider/user/windows_adsi.rb +12 -1
- data/lib/puppet/provider/zone/solaris.rb +1 -1
- data/lib/puppet/rails/inventory_node.rb +26 -13
- data/lib/puppet/reports.rb +1 -1
- data/lib/puppet/resource.rb +20 -5
- data/lib/puppet/resource/status.rb +1 -1
- data/lib/puppet/ssl/certificate_authority.rb +2 -0
- data/lib/puppet/ssl/host.rb +31 -6
- data/lib/puppet/test/test_helper.rb +3 -1
- data/lib/puppet/transaction/event.rb +1 -1
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/type.rb +30 -25
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +2 -2
- data/lib/puppet/type/exec.rb +6 -6
- data/lib/puppet/type/file.rb +5 -15
- data/lib/puppet/type/file/content.rb +1 -1
- data/lib/puppet/type/file/ensure.rb +1 -1
- data/lib/puppet/type/file/mode.rb +1 -1
- data/lib/puppet/type/file/selcontext.rb +6 -2
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/package.rb +1 -1
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/scheduled_task.rb +1 -1
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/whit.rb +16 -9
- data/lib/puppet/util.rb +27 -11
- data/lib/puppet/util/adsi.rb +25 -23
- data/lib/puppet/util/autoload.rb +1 -1
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/feature.rb +3 -1
- data/lib/puppet/util/fileparsing.rb +9 -9
- data/lib/puppet/util/filetype.rb +55 -40
- data/lib/puppet/util/instance_loader.rb +5 -5
- data/lib/puppet/util/instrumentation.rb +3 -5
- data/lib/puppet/util/log_paths.rb +1 -3
- data/lib/puppet/util/monkey_patches.rb +34 -8
- data/lib/puppet/util/platform.rb +7 -0
- data/lib/puppet/util/posix.rb +3 -3
- data/lib/puppet/util/provider_features.rb +2 -3
- data/lib/puppet/util/rdoc.rb +4 -3
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/selinux.rb +31 -36
- data/lib/puppet/util/tagging.rb +28 -6
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/process.rb +3 -3
- data/lib/puppet/util/windows/security.rb +9 -46
- data/lib/puppet/util/windows/sid.rb +96 -0
- data/lib/puppet/util/windows/user.rb +65 -2
- data/lib/puppet/util/zaml.rb +109 -59
- data/lib/puppet/version.rb +18 -0
- data/spec/fixtures/unit/util/filetype/aixtab_output +44 -0
- data/spec/fixtures/unit/util/filetype/suntab_output +9 -0
- data/spec/integration/defaults_spec.rb +26 -7
- data/spec/integration/parser/functions_spec.rb +0 -4
- data/spec/integration/util/file_locking_spec.rb +1 -1
- data/spec/integration/util/windows/security_spec.rb +3 -23
- data/spec/lib/puppet_spec/files.rb +3 -3
- data/spec/shared_contexts/platform.rb +8 -0
- data/spec/spec_helper.rb +6 -1
- data/spec/unit/application/queue_spec.rb +2 -1
- data/spec/unit/configurer_spec.rb +1 -1
- data/spec/unit/face/{instrumentation_data.rb → instrumentation_data_spec.rb} +0 -0
- data/spec/unit/face/{instrumentation_listener.rb → instrumentation_listener_spec.rb} +0 -0
- data/spec/unit/face/{instrumentation_probe.rb → instrumentation_probe_spec.rb} +0 -0
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +194 -0
- data/spec/unit/indirector/certificate/disabled_ca_spec.rb +33 -0
- data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +33 -0
- data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +33 -0
- data/spec/unit/indirector/key/disabled_ca_spec.rb +33 -0
- data/spec/unit/indirector/request_spec.rb +22 -0
- data/spec/unit/network/http/webrick_spec.rb +0 -7
- data/spec/unit/node/environment_spec.rb +8 -8
- data/spec/unit/parser/ast_spec.rb +0 -5
- data/spec/unit/parser/collector_spec.rb +1 -0
- data/spec/unit/parser/files_spec.rb +2 -2
- data/spec/unit/parser/functions/create_resources_spec.rb +3 -4
- data/spec/unit/parser/functions/require_spec.rb +0 -6
- data/spec/unit/parser/functions/shellquote_spec.rb +0 -5
- data/spec/unit/parser/functions/template_spec.rb +6 -1
- data/spec/unit/parser/functions_spec.rb +73 -23
- data/spec/unit/parser/lexer_spec.rb +133 -8
- data/spec/unit/parser/relationship_spec.rb +24 -0
- data/spec/unit/parser/resource_spec.rb +0 -4
- data/spec/unit/parser/scope_spec.rb +2 -2
- data/spec/unit/property_spec.rb +21 -1
- data/spec/unit/provider/exec/posix_spec.rb +7 -6
- data/spec/unit/provider/file/windows_spec.rb +29 -29
- data/spec/unit/provider/group/groupadd_spec.rb +36 -30
- data/spec/unit/provider/group/windows_adsi_spec.rb +2 -2
- data/spec/unit/provider/package/gem_spec.rb +12 -0
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +14 -11
- data/spec/unit/provider/service/redhat_spec.rb +11 -1
- data/spec/unit/provider/service/windows_spec.rb +19 -0
- data/spec/unit/provider/user/ldap_spec.rb +22 -8
- data/spec/unit/provider/user/user_role_add_spec.rb +12 -0
- data/spec/unit/provider/user/useradd_spec.rb +146 -118
- data/spec/unit/provider/user/windows_adsi_spec.rb +24 -2
- data/spec/unit/puppet_spec.rb +10 -0
- data/spec/unit/resource/status_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +73 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +25 -1
- data/spec/unit/ssl/host_spec.rb +73 -27
- data/spec/unit/ssl/key_spec.rb +0 -4
- data/spec/unit/transaction/event_spec.rb +1 -1
- data/spec/unit/type/exec_spec.rb +1 -1
- data/spec/unit/type/file/content_spec.rb +6 -4
- data/spec/unit/type/file/{ctime.rb → ctime_spec.rb} +0 -0
- data/spec/unit/type/file/{mtime.rb → mtime_spec.rb} +0 -0
- data/spec/unit/type/file/{type.rb → type_spec.rb} +0 -0
- data/spec/unit/type/file_spec.rb +2 -12
- data/spec/unit/type/host_spec.rb +14 -5
- data/spec/unit/type/mount_spec.rb +8 -0
- data/spec/unit/type/scheduled_task_spec.rb +2 -2
- data/spec/unit/util/adsi_spec.rb +23 -8
- data/spec/unit/util/command_line_spec.rb +11 -2
- data/spec/unit/util/feature_spec.rb +12 -1
- data/spec/unit/util/filetype_spec.rb +161 -55
- data/spec/unit/util/log_spec.rb +1 -1
- data/spec/unit/util/monkey_patches_spec.rb +7 -0
- data/spec/unit/util/rdoc_spec.rb +8 -2
- data/spec/unit/util/selinux_spec.rb +24 -32
- data/spec/unit/util/windows/sid_spec.rb +100 -0
- data/spec/unit/util/zaml_spec.rb +165 -25
- data/spec/unit/util_spec.rb +3 -9
- data/spec/watchr.rb +2 -6
- data/tasks/rake/gem.rake +4 -2
- data/tasks/rake/sign.rake +1 -1
- data/test/language/parser.rb +1 -0
- data/test/language/scope.rb +0 -5
- data/test/language/snippets.rb +1 -2
- data/test/lib/puppettest.rb +16 -27
- data/test/lib/puppettest/parsertesting.rb +0 -1
- data/test/network/authstore.rb +2 -4
- data/test/puppet/defaults.rb +0 -4
- data/test/util/fileparsing.rb +2 -6
- metadata +1706 -1617
- data/conf/osx/preflight +0 -24
- data/spec/spec.opts +0 -4
- data/spec/unit/file_collection/lookup_spec.rb +0 -45
- data/spec/unit/file_collection_spec.rb +0 -52
- data/tasks/rake/apple.rake +0 -176
- data/test/puppet/errortest.rb +0 -19
@@ -283,6 +283,7 @@ describe Puppet::Type.type(:mount), "when modifying an existing mount entry", :u
|
|
283
283
|
before do
|
284
284
|
@provider = stub 'provider', :class => Puppet::Type.type(:mount).defaultprovider, :clear => nil, :satisfies? => true, :name => :mock, :remount => nil
|
285
285
|
Puppet::Type.type(:mount).defaultprovider.stubs(:new).returns(@provider)
|
286
|
+
|
286
287
|
@mount = Puppet::Type.type(:mount).new(:name => "yay", :ensure => :mounted)
|
287
288
|
|
288
289
|
{:device => "/foo/bar", :blockdevice => "/other/bar", :target => "/what/ever", :fstype => 'eh', :options => "", :pass => 0, :dump => 0, :atboot => 0,
|
@@ -304,6 +305,8 @@ describe Puppet::Type.type(:mount), "when modifying an existing mount entry", :u
|
|
304
305
|
it "should use the provider to change the dump value" do
|
305
306
|
@mount.provider.expects(:dump).returns 0
|
306
307
|
@mount.provider.expects(:dump=).with(1)
|
308
|
+
@mount.provider.stubs(:respond_to?).returns(false)
|
309
|
+
@mount.provider.stubs(:respond_to?).with("dump=").returns(true)
|
307
310
|
|
308
311
|
@mount[:dump] = 1
|
309
312
|
|
@@ -315,11 +318,16 @@ describe Puppet::Type.type(:mount), "when modifying an existing mount entry", :u
|
|
315
318
|
@mount.provider.expects(:options).returns 'soft'
|
316
319
|
@mount.provider.expects(:ensure).returns :mounted
|
317
320
|
|
321
|
+
@mount.provider.stubs(:respond_to?).returns(false)
|
322
|
+
@mount.provider.stubs(:respond_to?).with("options=").returns(true)
|
323
|
+
|
318
324
|
@mount.provider.expects(:unmount).in_sequence(syncorder)
|
319
325
|
@mount.provider.expects(:options=).in_sequence(syncorder).with 'hard'
|
320
326
|
@mount.expects(:flush).in_sequence(syncorder) # Call inside syncothers
|
321
327
|
@mount.expects(:flush).in_sequence(syncorder) # I guess transaction or anything calls flush again
|
322
328
|
|
329
|
+
@mount.provider.stubs(:respond_to?).with(:options=).returns(true)
|
330
|
+
|
323
331
|
@mount[:ensure] = :unmounted
|
324
332
|
@mount[:options] = 'hard'
|
325
333
|
|
@@ -34,7 +34,7 @@ describe Puppet::Type.type(:scheduled_task), :if => Puppet.features.microsoft_wi
|
|
34
34
|
described_class.new(:name => 'Test Task', :command => 'notepad.exe')
|
35
35
|
}.to raise_error(
|
36
36
|
Puppet::Error,
|
37
|
-
/Parameter command failed: Must be specified using an absolute path\./
|
37
|
+
/Parameter command failed on Scheduled_task\[Test Task\]: Must be specified using an absolute path\./
|
38
38
|
)
|
39
39
|
end
|
40
40
|
end
|
@@ -77,7 +77,7 @@ describe Puppet::Type.type(:scheduled_task), :if => Puppet.features.microsoft_wi
|
|
77
77
|
)
|
78
78
|
}.to raise_error(
|
79
79
|
Puppet::Error,
|
80
|
-
/Parameter working_dir failed: Must be specified using an absolute path/
|
80
|
+
/Parameter working_dir failed on Scheduled_task\[Test Task\]: Must be specified using an absolute path/
|
81
81
|
)
|
82
82
|
end
|
83
83
|
|
data/spec/unit/util/adsi_spec.rb
CHANGED
@@ -28,25 +28,21 @@ describe Puppet::Util::ADSI do
|
|
28
28
|
Puppet::Util::ADSI.computer_uri.should == "WinNT://testcomputername"
|
29
29
|
end
|
30
30
|
|
31
|
-
describe ".sid_for_account" do
|
31
|
+
describe ".sid_for_account", :if => Puppet.features.microsoft_windows? do
|
32
32
|
it "should return nil if the account does not exist" do
|
33
|
-
|
33
|
+
Puppet::Util::Windows::Security.expects(:name_to_sid).with('foobar').returns nil
|
34
34
|
|
35
35
|
Puppet::Util::ADSI.sid_for_account('foobar').should be_nil
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should return a SID for a passed user or group name" do
|
39
|
-
Puppet::Util::
|
40
|
-
"SELECT Sid from Win32_Account WHERE Name = 'testers' AND LocalAccount = true"
|
41
|
-
).returns([stub('acct_id', :Sid => 'S-1-5-32-547')])
|
39
|
+
Puppet::Util::Windows::Security.expects(:name_to_sid).with('testers').returns 'S-1-5-32-547'
|
42
40
|
|
43
41
|
Puppet::Util::ADSI.sid_for_account('testers').should == 'S-1-5-32-547'
|
44
42
|
end
|
45
43
|
|
46
44
|
it "should return a SID for a passed fully-qualified user or group name" do
|
47
|
-
Puppet::Util::
|
48
|
-
"SELECT Sid from Win32_Account WHERE Name = 'testers' AND Domain = 'MACHINE' AND LocalAccount = true"
|
49
|
-
).returns([stub('acct_id', :Sid => 'S-1-5-32-547')])
|
45
|
+
Puppet::Util::Windows::Security.expects(:name_to_sid).with('MACHINE\testers').returns 'S-1-5-32-547'
|
50
46
|
|
51
47
|
Puppet::Util::ADSI.sid_for_account('MACHINE\testers').should == 'S-1-5-32-547'
|
52
48
|
end
|
@@ -229,4 +225,23 @@ describe Puppet::Util::ADSI do
|
|
229
225
|
Puppet::Util::ADSI::Group.delete(groupname)
|
230
226
|
end
|
231
227
|
end
|
228
|
+
|
229
|
+
describe Puppet::Util::ADSI::UserProfile do
|
230
|
+
it "should be able to delete a user profile" do
|
231
|
+
connection.expects(:Delete).with("Win32_UserProfile.SID='S-A-B-C'")
|
232
|
+
Puppet::Util::ADSI::UserProfile.delete('S-A-B-C')
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should warn on 2003" do
|
236
|
+
connection.expects(:Delete).raises(RuntimeError,
|
237
|
+
"Delete (WIN32OLERuntimeError)
|
238
|
+
OLE error code:80041010 in SWbemServicesEx
|
239
|
+
Invalid class
|
240
|
+
HRESULT error code:0x80020009
|
241
|
+
Exception occurred.")
|
242
|
+
|
243
|
+
Puppet.expects(:warning).with("Cannot delete user profile for 'S-A-B-C' prior to Vista SP1")
|
244
|
+
Puppet::Util::ADSI::UserProfile.delete('S-A-B-C')
|
245
|
+
end
|
246
|
+
end
|
232
247
|
end
|
@@ -87,9 +87,18 @@ describe Puppet::Util::CommandLine do
|
|
87
87
|
it "should find and invoke an executable with a hyphenated name" do
|
88
88
|
commandline = Puppet::Util::CommandLine.new("puppet", ['whatever', 'argument'], @tty)
|
89
89
|
Puppet::Util.expects(:which).with('puppet-whatever').returns('/dev/null/puppet-whatever')
|
90
|
-
commandline.expects(:exec).with('/dev/null/puppet-whatever', 'argument')
|
91
90
|
|
92
|
-
|
91
|
+
# It is important that we abort at the point exec is called, because
|
92
|
+
# the code (reasonably) assumes that if `exec` is called processing
|
93
|
+
# immediately terminates, and we are replaced by the executed process.
|
94
|
+
#
|
95
|
+
# This raise isn't a perfect simulation of that, but it is enough to
|
96
|
+
# validate that the system works, and ... well, if exec is broken we
|
97
|
+
# have two problems, y'know.
|
98
|
+
commandline.expects(:exec).with('/dev/null/puppet-whatever', 'argument').
|
99
|
+
raises(SystemExit)
|
100
|
+
|
101
|
+
expect { commandline.execute }.to raise_error SystemExit
|
93
102
|
end
|
94
103
|
|
95
104
|
describe "and an external implementation cannot be found" do
|
@@ -39,7 +39,7 @@ describe Puppet::Util::Feature do
|
|
39
39
|
@features.should be_available
|
40
40
|
end
|
41
41
|
|
42
|
-
it "should cache the results of a feature load" do
|
42
|
+
it "should cache the results of a feature load via code block" do
|
43
43
|
$loaded_feature = 0
|
44
44
|
@features.add(:myfeature) { $loaded_feature += 1 }
|
45
45
|
@features.myfeature?
|
@@ -68,4 +68,15 @@ describe Puppet::Util::Feature do
|
|
68
68
|
|
69
69
|
@features.should_not be_myfeature
|
70
70
|
end
|
71
|
+
|
72
|
+
it "should change the feature to be present when its libraries become available" do
|
73
|
+
@features.add(:myfeature, :libs => %w{foo bar})
|
74
|
+
@features.expects(:require).twice().with("foo").raises(LoadError).then.returns(nil)
|
75
|
+
@features.stubs(:require).with("bar")
|
76
|
+
|
77
|
+
Puppet.expects(:debug)
|
78
|
+
|
79
|
+
@features.should_not be_myfeature
|
80
|
+
@features.should be_myfeature
|
81
|
+
end
|
71
82
|
end
|
@@ -5,58 +5,26 @@ require 'puppet/util/filetype'
|
|
5
5
|
|
6
6
|
# XXX Import all of the tests into this file.
|
7
7
|
describe Puppet::Util::FileType do
|
8
|
-
describe "when backing up a file" do
|
9
|
-
before do
|
10
|
-
@file = Puppet::Util::FileType.filetype(:flat).new("/my/file")
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should do nothing if the file does not exist" do
|
14
|
-
File.expects(:exists?).with("/my/file").returns false
|
15
|
-
@file.expects(:bucket).never
|
16
|
-
@file.backup
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should use its filebucket to backup the file if it exists" do
|
20
|
-
File.expects(:exists?).with("/my/file").returns true
|
21
|
-
|
22
|
-
bucket = mock 'bucket'
|
23
|
-
bucket.expects(:backup).with("/my/file")
|
24
|
-
|
25
|
-
@file.expects(:bucket).returns bucket
|
26
|
-
@file.backup
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should use the default filebucket" do
|
30
|
-
bucket = mock 'bucket'
|
31
|
-
bucket.expects(:bucket).returns "mybucket"
|
32
|
-
|
33
|
-
Puppet::Type.type(:filebucket).expects(:mkdefaultbucket).returns bucket
|
34
|
-
|
35
|
-
@file.bucket.should == "mybucket"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
8
|
describe "the flat filetype" do
|
40
|
-
|
41
|
-
|
42
|
-
|
9
|
+
let(:path) { '/my/file' }
|
10
|
+
let(:type) { Puppet::Util::FileType.filetype(:flat) }
|
11
|
+
let(:file) { type.new(path) }
|
12
|
+
|
43
13
|
it "should exist" do
|
44
|
-
|
14
|
+
type.should_not be_nil
|
45
15
|
end
|
46
16
|
|
47
17
|
describe "when the file already exists" do
|
48
18
|
it "should return the file's contents when asked to read it" do
|
49
|
-
|
50
|
-
File.expects(:
|
51
|
-
File.expects(:read).with("/my/file").returns "my text"
|
19
|
+
File.expects(:exist?).with(path).returns true
|
20
|
+
File.expects(:read).with(path).returns "my text"
|
52
21
|
|
53
22
|
file.read.should == "my text"
|
54
23
|
end
|
55
24
|
|
56
25
|
it "should unlink the file when asked to remove it" do
|
57
|
-
|
58
|
-
File.expects(:
|
59
|
-
File.expects(:unlink).with("/my/file")
|
26
|
+
File.expects(:exist?).with(path).returns true
|
27
|
+
File.expects(:unlink).with(path)
|
60
28
|
|
61
29
|
file.remove
|
62
30
|
end
|
@@ -64,36 +32,174 @@ describe Puppet::Util::FileType do
|
|
64
32
|
|
65
33
|
describe "when the file does not exist" do
|
66
34
|
it "should return an empty string when asked to read the file" do
|
67
|
-
|
68
|
-
File.expects(:exist?).with("/my/file").returns false
|
35
|
+
File.expects(:exist?).with(path).returns false
|
69
36
|
|
70
37
|
file.read.should == ""
|
71
38
|
end
|
72
39
|
end
|
73
40
|
|
74
41
|
describe "when writing the file" do
|
42
|
+
let(:tempfile) { stub 'tempfile', :print => nil, :close => nil, :flush => nil, :path => "/other/file" }
|
75
43
|
before do
|
76
|
-
@file = @type.new("/my/file")
|
77
44
|
FileUtils.stubs(:cp)
|
78
|
-
|
79
|
-
@tempfile = stub 'tempfile', :print => nil, :close => nil, :flush => nil, :path => "/other/file"
|
80
|
-
Tempfile.stubs(:new).returns @tempfile
|
45
|
+
Tempfile.stubs(:new).returns tempfile
|
81
46
|
end
|
82
47
|
|
83
48
|
it "should first create a temp file and copy its contents over to the file location" do
|
84
|
-
Tempfile.expects(:new).with("puppet").returns
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
FileUtils.expects(:cp).with(
|
49
|
+
Tempfile.expects(:new).with("puppet").returns tempfile
|
50
|
+
tempfile.expects(:print).with("my text")
|
51
|
+
tempfile.expects(:flush)
|
52
|
+
tempfile.expects(:close)
|
53
|
+
FileUtils.expects(:cp).with(tempfile.path, path)
|
89
54
|
|
90
|
-
|
55
|
+
file.write "my text"
|
91
56
|
end
|
92
57
|
|
93
58
|
it "should set the selinux default context on the file" do
|
94
|
-
|
95
|
-
|
59
|
+
file.expects(:set_selinux_default_context).with(path)
|
60
|
+
file.write "eh"
|
96
61
|
end
|
97
62
|
end
|
63
|
+
|
64
|
+
describe "when backing up a file" do
|
65
|
+
it "should do nothing if the file does not exist" do
|
66
|
+
File.expects(:exists?).with(path).returns false
|
67
|
+
file.expects(:bucket).never
|
68
|
+
file.backup
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should use its filebucket to backup the file if it exists" do
|
72
|
+
File.expects(:exists?).with(path).returns true
|
73
|
+
|
74
|
+
bucket = mock 'bucket'
|
75
|
+
bucket.expects(:backup).with(path)
|
76
|
+
|
77
|
+
file.expects(:bucket).returns bucket
|
78
|
+
file.backup
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should use the default filebucket" do
|
82
|
+
bucket = mock 'bucket'
|
83
|
+
bucket.expects(:bucket).returns "mybucket"
|
84
|
+
|
85
|
+
Puppet::Type.type(:filebucket).expects(:mkdefaultbucket).returns bucket
|
86
|
+
|
87
|
+
file.bucket.should == "mybucket"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
shared_examples_for "crontab provider" do
|
93
|
+
let(:cron) { type.new('no_such_user') }
|
94
|
+
let(:crontab) { File.read(my_fixture(crontab_output)) }
|
95
|
+
let(:options) { { :failonfail => true, :combine => true } }
|
96
|
+
let(:uid) { 'no_such_user' }
|
97
|
+
let(:user_options) { options.merge({:uid => uid}) }
|
98
|
+
|
99
|
+
it "should exist" do
|
100
|
+
type.should_not be_nil
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "#read" do
|
104
|
+
it "should run crontab -l as the target user" do
|
105
|
+
Puppet::Util.expects(:execute).with(['crontab', '-l'], user_options).returns crontab
|
106
|
+
cron.read.should == crontab
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should not switch user if current user is the target user" do
|
110
|
+
Puppet::Util.expects(:uid).with(uid).returns 9000
|
111
|
+
Puppet::Util::SUIDManager.expects(:uid).returns 9000
|
112
|
+
Puppet::Util.expects(:execute).with(['crontab', '-l'], options).returns crontab
|
113
|
+
cron.read.should == crontab
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should treat an absent crontab as empty" do
|
117
|
+
Puppet::Util.expects(:execute).with(['crontab', '-l'], user_options).raises(Puppet::ExecutionFailure, absent_crontab)
|
118
|
+
cron.read.should == ''
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should raise an error if the user is not authorized to use cron" do
|
122
|
+
Puppet::Util.expects(:execute).with(['crontab', '-l'], user_options).raises(Puppet::ExecutionFailure, unauthorized_crontab)
|
123
|
+
expect {
|
124
|
+
cron.read
|
125
|
+
}.to raise_error Puppet::Error, /User #{uid} not authorized to use cron/
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "#remove" do
|
130
|
+
it "should run crontab -r as the target user" do
|
131
|
+
Puppet::Util.expects(:execute).with(['crontab', '-r'], user_options)
|
132
|
+
cron.remove
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should not switch user if current user is the target user" do
|
136
|
+
Puppet::Util.expects(:uid).with(uid).returns 9000
|
137
|
+
Puppet::Util::SUIDManager.expects(:uid).returns 9000
|
138
|
+
Puppet::Util.expects(:execute).with(['crontab','-r'], options)
|
139
|
+
cron.remove
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "#write" do
|
144
|
+
before :each do
|
145
|
+
@tmp_cron = Tempfile.new("puppet_crontab_spec")
|
146
|
+
@tmp_cron_path = @tmp_cron.path
|
147
|
+
Puppet::Util.stubs(:uid).with(uid).returns 9000
|
148
|
+
Tempfile.expects(:new).with("puppet_#{name}").returns @tmp_cron
|
149
|
+
end
|
150
|
+
|
151
|
+
after :each do
|
152
|
+
File.should_not be_exist @tmp_cron_path
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should run crontab as the target user on a temporary file" do
|
156
|
+
File.expects(:chown).with(9000, nil, @tmp_cron_path)
|
157
|
+
Puppet::Util.expects(:execute).with(["crontab", @tmp_cron_path], user_options)
|
158
|
+
|
159
|
+
@tmp_cron.expects(:print).with("foo\n")
|
160
|
+
cron.write "foo\n"
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should not switch user if current user is the target user" do
|
164
|
+
Puppet::Util::SUIDManager.expects(:uid).returns 9000
|
165
|
+
File.expects(:chown).with(9000, nil, @tmp_cron_path)
|
166
|
+
Puppet::Util.expects(:execute).with(["crontab", @tmp_cron_path], options)
|
167
|
+
|
168
|
+
@tmp_cron.expects(:print).with("foo\n")
|
169
|
+
cron.write "foo\n"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe "the suntab filetype", :unless => Puppet.features.microsoft_windows? do
|
175
|
+
let(:type) { Puppet::Util::FileType.filetype(:suntab) }
|
176
|
+
let(:name) { type.name }
|
177
|
+
let(:crontab_output) { 'suntab_output' }
|
178
|
+
|
179
|
+
# possible crontab output was taken from here:
|
180
|
+
# http://docs.oracle.com/cd/E19082-01/819-2380/sysrescron-60/index.html
|
181
|
+
let(:absent_crontab) do
|
182
|
+
'crontab: can\'t open your crontab file'
|
183
|
+
end
|
184
|
+
let(:unauthorized_crontab) do
|
185
|
+
'crontab: you are not authorized to use cron. Sorry.'
|
186
|
+
end
|
187
|
+
|
188
|
+
it_should_behave_like "crontab provider"
|
189
|
+
end
|
190
|
+
|
191
|
+
describe "the aixtab filetype", :unless => Puppet.features.microsoft_windows? do
|
192
|
+
let(:type) { Puppet::Util::FileType.filetype(:aixtab) }
|
193
|
+
let(:name) { type.name }
|
194
|
+
let(:crontab_output) { 'aixtab_output' }
|
195
|
+
|
196
|
+
let(:absent_crontab) do
|
197
|
+
'0481-103 Cannot open a file in the /var/spool/cron/crontabs directory.'
|
198
|
+
end
|
199
|
+
let(:unauthorized_crontab) do
|
200
|
+
'0481-109 You are not authorized to use the cron command.'
|
201
|
+
end
|
202
|
+
|
203
|
+
it_should_behave_like "crontab provider"
|
98
204
|
end
|
99
205
|
end
|
data/spec/unit/util/log_spec.rb
CHANGED
@@ -295,7 +295,7 @@ describe Puppet::Util::Log do
|
|
295
295
|
|
296
296
|
it "should include attributes @level, @message, @source, @tags, and @time" do
|
297
297
|
log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :version => 100)
|
298
|
-
log.to_yaml_properties.should
|
298
|
+
log.to_yaml_properties.should =~ %w{@level @message @source @tags @time}
|
299
299
|
end
|
300
300
|
|
301
301
|
it "should include attributes @file and @line if specified" do
|
@@ -4,6 +4,13 @@ require 'spec_helper'
|
|
4
4
|
require 'puppet/util/monkey_patches'
|
5
5
|
|
6
6
|
|
7
|
+
describe Symbol do
|
8
|
+
it "should return self from #intern" do
|
9
|
+
symbol = :foo
|
10
|
+
symbol.should equal symbol.intern
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
7
14
|
|
8
15
|
describe "yaml deserialization" do
|
9
16
|
it "should call yaml_initialize when deserializing objects that have that method defined" do
|
data/spec/unit/util/rdoc_spec.rb
CHANGED
@@ -62,8 +62,14 @@ describe Puppet::Util::RDoc do
|
|
62
62
|
Puppet::Util::RDoc.rdoc("myoutputdir", [])
|
63
63
|
end
|
64
64
|
|
65
|
-
it "should tell RDoc to exclude
|
66
|
-
@rdoc.expects(:document).with { |args| args.include?("--exclude") and args.include?("/modules/[^/]*/files
|
65
|
+
it "should tell RDoc to exclude all files under any modules/<mod>/files section" do
|
66
|
+
@rdoc.expects(:document).with { |args| args.include?("--exclude") and args.include?("/modules/[^/]*/files/.*$") }
|
67
|
+
|
68
|
+
Puppet::Util::RDoc.rdoc("myoutputdir", [])
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should tell RDoc to exclude all files under any modules/<mod>/templates section" do
|
72
|
+
@rdoc.expects(:document).with { |args| args.include?("--exclude") and args.include?("/modules/[^/]*/templates/.*$") }
|
67
73
|
|
68
74
|
Puppet::Util::RDoc.rdoc("myoutputdir", [])
|
69
75
|
end
|