puppet 2.7.6 → 2.7.8
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/CHANGELOG +168 -0
- data/conf/auth.conf +5 -4
- data/conf/redhat/puppet.spec +16 -1
- data/conf/solaris/pkginfo +2 -2
- data/conf/suse/puppet.spec +9 -3
- data/ext/upload_facts.rb +120 -0
- data/install.rb +11 -16
- data/lib/puppet.rb +1 -1
- data/lib/puppet/application/agent.rb +0 -3
- data/lib/puppet/application/apply.rb +0 -3
- data/lib/puppet/application/queue.rb +21 -1
- data/lib/puppet/defaults.rb +6 -4
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/feature/base.rb +2 -1
- data/lib/puppet/file_bucket/dipper.rb +3 -2
- data/lib/puppet/file_serving/content.rb +1 -1
- data/lib/puppet/file_serving/metadata.rb +5 -2
- data/lib/puppet/indirector/facts/inventory_service.rb +20 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +3 -2
- data/lib/puppet/indirector/report/processor.rb +1 -1
- data/lib/puppet/network/handler/filebucket.rb +2 -0
- data/lib/puppet/network/handler/fileserver.rb +1 -1
- data/lib/puppet/network/handler/master.rb +1 -0
- data/lib/puppet/network/handler/report.rb +2 -0
- data/lib/puppet/network/handler/runner.rb +1 -0
- data/lib/puppet/network/handler/status.rb +2 -0
- data/lib/puppet/network/http/mongrel/rest.rb +8 -1
- data/lib/puppet/network/http_server.rb +3 -0
- data/lib/puppet/network/http_server/mongrel.rb +129 -0
- data/lib/puppet/network/rest_authconfig.rb +12 -4
- data/lib/puppet/parameter.rb +18 -0
- data/lib/puppet/parser/compiler.rb +1 -1
- data/lib/puppet/parser/grammar.ra +1 -1
- data/lib/puppet/parser/parser.rb +360 -350
- data/lib/puppet/property.rb +3 -3
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +6 -7
- data/lib/puppet/provider/file/windows.rb +9 -2
- data/lib/puppet/provider/group/aix.rb +8 -8
- data/lib/puppet/provider/group/groupadd.rb +1 -3
- data/lib/puppet/provider/group/ldap.rb +8 -10
- data/lib/puppet/provider/group/windows_adsi.rb +8 -2
- data/lib/puppet/provider/package/aix.rb +1 -1
- data/lib/puppet/provider/package/macports.rb +3 -3
- data/lib/puppet/provider/package/msi.rb +12 -5
- data/lib/puppet/provider/package/nim.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -3
- data/lib/puppet/provider/package/ports.rb +1 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +560 -0
- data/lib/puppet/provider/service/base.rb +2 -2
- data/lib/puppet/provider/service/bsd.rb +4 -3
- data/lib/puppet/provider/service/daemontools.rb +25 -25
- data/lib/puppet/provider/service/debian.rb +6 -4
- data/lib/puppet/provider/service/freebsd.rb +1 -1
- data/lib/puppet/provider/service/gentoo.rb +4 -3
- data/lib/puppet/provider/service/init.rb +3 -8
- data/lib/puppet/provider/service/launchd.rb +129 -96
- data/lib/puppet/provider/service/redhat.rb +2 -3
- data/lib/puppet/provider/service/runit.rb +20 -20
- data/lib/puppet/provider/service/smf.rb +8 -7
- data/lib/puppet/provider/service/src.rb +5 -6
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/service/upstart.rb +3 -5
- data/lib/puppet/provider/service/windows.rb +7 -7
- data/lib/puppet/provider/sshkey/parsed.rb +2 -3
- data/lib/puppet/provider/user/aix.rb +21 -21
- data/lib/puppet/provider/user/hpux.rb +3 -1
- data/lib/puppet/provider/user/ldap.rb +7 -7
- data/lib/puppet/provider/user/user_role_add.rb +10 -6
- data/lib/puppet/provider/user/useradd.rb +3 -1
- data/lib/puppet/provider/user/windows_adsi.rb +4 -3
- data/lib/puppet/rb_tree_map.rb +388 -0
- data/lib/puppet/reference/configuration.rb +7 -7
- data/lib/puppet/reference/indirection.rb +5 -6
- data/lib/puppet/reference/metaparameter.rb +3 -1
- data/lib/puppet/reference/network.rb +8 -8
- data/lib/puppet/reference/providers.rb +17 -21
- data/lib/puppet/reference/type.rb +12 -9
- data/lib/puppet/resource.rb +2 -5
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/ssl/certificate_request.rb +70 -0
- data/lib/puppet/ssl/host.rb +6 -0
- data/lib/puppet/transaction.rb +158 -55
- data/lib/puppet/transaction/event_manager.rb +1 -1
- data/lib/puppet/type.rb +60 -30
- data/lib/puppet/type/augeas.rb +83 -49
- data/lib/puppet/type/computer.rb +1 -1
- data/lib/puppet/type/cron.rb +11 -11
- data/lib/puppet/type/exec.rb +28 -21
- data/lib/puppet/type/file.rb +17 -7
- data/lib/puppet/type/file/content.rb +2 -2
- data/lib/puppet/type/file/ensure.rb +15 -12
- data/lib/puppet/type/file/mode.rb +30 -5
- data/lib/puppet/type/file/source.rb +11 -10
- data/lib/puppet/type/file/target.rb +2 -2
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +4 -5
- data/lib/puppet/type/host.rb +1 -1
- data/lib/puppet/type/interface.rb +13 -10
- data/lib/puppet/type/k5login.rb +6 -6
- data/lib/puppet/type/macauthorization.rb +37 -36
- data/lib/puppet/type/maillist.rb +2 -2
- data/lib/puppet/type/mcx.rb +6 -6
- data/lib/puppet/type/mount.rb +3 -2
- data/lib/puppet/type/notify.rb +1 -1
- data/lib/puppet/type/package.rb +24 -23
- data/lib/puppet/type/router.rb +4 -1
- data/lib/puppet/type/schedule.rb +52 -44
- data/lib/puppet/type/scheduled_task.rb +222 -0
- data/lib/puppet/type/selmodule.rb +10 -6
- data/lib/puppet/type/service.rb +11 -11
- data/lib/puppet/type/ssh_authorized_key.rb +2 -5
- data/lib/puppet/type/sshkey.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/tidy.rb +10 -8
- data/lib/puppet/type/user.rb +61 -53
- data/lib/puppet/type/vlan.rb +4 -4
- data/lib/puppet/type/whit.rb +6 -2
- data/lib/puppet/type/yumrepo.rb +33 -31
- data/lib/puppet/type/zfs.rb +34 -32
- data/lib/puppet/type/zone.rb +21 -19
- data/lib/puppet/type/zpool.rb +3 -3
- data/lib/puppet/util.rb +24 -6
- data/lib/puppet/util/adsi.rb +12 -7
- data/lib/puppet/util/checksums.rb +1 -1
- data/lib/puppet/util/diff.rb +1 -1
- data/lib/puppet/util/nagios_maker.rb +2 -2
- data/lib/puppet/util/reference.rb +16 -17
- data/lib/puppet/util/settings/file_setting.rb +14 -2
- data/lib/puppet/util/windows/security.rb +96 -32
- data/spec/integration/file_serving/terminus_helper_spec.rb +1 -1
- data/spec/integration/indirector/direct_file_server_spec.rb +9 -15
- data/spec/integration/indirector/file_content/file_server_spec.rb +1 -1
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -1
- data/spec/integration/provider/package_spec.rb +4 -0
- data/spec/integration/provider/service/init_spec.rb +8 -2
- data/spec/integration/reference/providers_spec.rb +1 -1
- data/spec/integration/ssl/certificate_request_spec.rb +1 -2
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -2
- data/spec/integration/ssl/host_spec.rb +1 -2
- data/spec/integration/transaction_spec.rb +25 -17
- data/spec/integration/type/exec_spec.rb +77 -0
- data/spec/integration/type/file_spec.rb +322 -2
- data/spec/integration/util/windows/security_spec.rb +393 -230
- data/spec/integration/util_spec.rb +16 -0
- data/spec/lib/puppet_spec/files.rb +3 -7
- data/spec/unit/application/apply_spec.rb +0 -9
- data/spec/unit/application/inspect_spec.rb +1 -0
- data/spec/unit/configurer/downloader_spec.rb +3 -3
- data/spec/unit/face/certificate_spec.rb +6 -2
- data/spec/unit/file_bucket/dipper_spec.rb +67 -10
- data/spec/unit/file_bucket/file_spec.rb +22 -28
- data/spec/unit/file_serving/content_spec.rb +1 -1
- data/spec/unit/file_serving/metadata_spec.rb +30 -3
- data/spec/unit/indirector/facts/inventory_service_spec.rb +22 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +21 -24
- data/spec/unit/indirector/node/store_configs_spec.rb +1 -0
- data/spec/unit/indirector/resource/ral_spec.rb +1 -1
- data/spec/unit/indirector/resource_type/parser_spec.rb +2 -2
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/network/handler/ca_spec.rb +1 -1
- data/spec/unit/network/http/mongrel/rest_spec.rb +54 -25
- data/spec/unit/parameter_spec.rb +36 -0
- data/spec/unit/parser/parser_spec.rb +4 -0
- data/spec/unit/property_spec.rb +2 -2
- data/spec/unit/provider/exec/windows_spec.rb +2 -8
- data/spec/unit/provider/file/posix_spec.rb +6 -0
- data/spec/unit/provider/file/windows_spec.rb +18 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +22 -6
- data/spec/unit/provider/mount/parsed_spec.rb +1 -1
- data/spec/unit/provider/package/msi_spec.rb +2 -2
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +1571 -0
- data/spec/unit/provider/service/launchd_spec.rb +143 -130
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -0
- data/spec/unit/provider/user/user_role_add_spec.rb +39 -9
- data/spec/unit/provider/user/useradd_spec.rb +1 -1
- data/spec/unit/provider/user/windows_adsi_spec.rb +8 -1
- data/spec/unit/rb_tree_map_spec.rb +572 -0
- data/spec/unit/resource/catalog_spec.rb +1 -1
- data/spec/unit/simple_graph_spec.rb +9 -9
- data/spec/unit/ssl/host_spec.rb +60 -12
- data/spec/unit/transaction/report_spec.rb +3 -3
- data/spec/unit/transaction_spec.rb +394 -11
- data/spec/unit/type/exec_spec.rb +35 -15
- data/spec/unit/type/file/content_spec.rb +11 -10
- data/spec/unit/type/file/mode_spec.rb +73 -19
- data/spec/unit/type/file/source_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +15 -0
- data/spec/unit/type/group_spec.rb +1 -1
- data/spec/unit/type/mount_spec.rb +5 -5
- data/spec/unit/type/resources_spec.rb +3 -3
- data/spec/unit/type/scheduled_task_spec.rb +102 -0
- data/spec/unit/type/ssh_authorized_key_spec.rb +2 -3
- data/spec/unit/type/user_spec.rb +2 -1
- data/spec/unit/type_spec.rb +48 -4
- data/spec/unit/util/adsi_spec.rb +18 -7
- data/spec/unit/util/checksums_spec.rb +20 -2
- data/spec/unit/util/execution_stub_spec.rb +10 -5
- data/spec/unit/util/logging_spec.rb +6 -6
- data/spec/unit/util/rdoc/parser_spec.rb +1 -1
- data/spec/unit/util/reference_spec.rb +29 -0
- data/spec/unit/util/settings/file_setting_spec.rb +8 -2
- data/spec/unit/util_spec.rb +115 -0
- data/test/other/transactions.rb +5 -11
- data/test/ral/type/exec.rb +1 -1
- metadata +24 -11
@@ -1,203 +1,216 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Unit testing for the launchd service provider
|
1
|
+
# Spec Tests for the Launchd provider
|
4
2
|
#
|
5
3
|
|
6
4
|
require 'spec_helper'
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
describe provider_class do
|
13
|
-
|
14
|
-
before :each do
|
15
|
-
# Create a mock resource
|
16
|
-
@resource = stub 'resource'
|
17
|
-
|
18
|
-
@provider = provider_class.new
|
19
|
-
@joblabel = "com.foo.food"
|
20
|
-
@jobplist = {}
|
21
|
-
|
22
|
-
# A catch all; no parameters set
|
23
|
-
@resource.stubs(:[]).returns(nil)
|
24
|
-
|
25
|
-
# But set name, ensure and enable
|
26
|
-
@resource.stubs(:[]).with(:name).returns @joblabel
|
27
|
-
@resource.stubs(:[]).with(:ensure).returns :enabled
|
28
|
-
@resource.stubs(:[]).with(:enable).returns :true
|
29
|
-
@resource.stubs(:ref).returns "Service[#{@joblabel}]"
|
30
|
-
|
31
|
-
# stub out the provider methods that actually touch the filesystem
|
32
|
-
# or execute commands
|
33
|
-
@provider.stubs(:plist_from_label).returns([@joblabel, @jobplist])
|
34
|
-
@provider.stubs(:execute).returns("")
|
35
|
-
@provider.stubs(:resource).returns @resource
|
36
|
-
|
37
|
-
# We stub this out for the normal case as 10.6 is "special".
|
38
|
-
provider_class.stubs(:get_macosx_version_major).returns("10.5")
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should have a start method for #{@provider.object_id}" do
|
43
|
-
@provider.should respond_to(:start)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should have a stop method" do
|
47
|
-
@provider.should respond_to(:stop)
|
48
|
-
end
|
6
|
+
describe Puppet::Type.type(:service).provider(:launchd) do
|
7
|
+
let (:joblabel) { "com.foo.food" }
|
8
|
+
let (:provider) { subject.class }
|
9
|
+
let (:launchd_overrides) { '/var/db/launchd.db/com.apple.launchd/overrides.plist' }
|
49
10
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
it "should have an enable method" do
|
55
|
-
@provider.should respond_to(:enable)
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should have a disable method" do
|
59
|
-
@provider.should respond_to(:disable)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should have a status method" do
|
63
|
-
@provider.should respond_to(:status)
|
11
|
+
describe "the type interface" do
|
12
|
+
%w{ start stop enabled? enable disable status}.each do |method|
|
13
|
+
it { should respond_to method.to_sym }
|
14
|
+
end
|
64
15
|
end
|
65
16
|
|
66
|
-
|
67
|
-
describe "when checking status" do
|
17
|
+
describe 'the status of the services' do
|
68
18
|
it "should call the external command 'launchctl list' once" do
|
69
|
-
|
70
|
-
|
19
|
+
provider.expects(:launchctl).with(:list).returns(joblabel)
|
20
|
+
provider.expects(:jobsearch).with(nil).returns({joblabel => "/Library/LaunchDaemons/#{joblabel}"})
|
21
|
+
provider.prefetch({})
|
71
22
|
end
|
72
23
|
it "should return stopped if not listed in launchctl list output" do
|
73
|
-
|
74
|
-
|
24
|
+
provider.expects(:launchctl).with(:list).returns('com.bar.is_running')
|
25
|
+
provider.expects(:jobsearch).with(nil).returns({'com.bar.is_not_running' => "/Library/LaunchDaemons/com.bar.is_not_running"})
|
26
|
+
provider.prefetch({}).last.status.should eq :stopped
|
75
27
|
end
|
76
28
|
it "should return running if listed in launchctl list output" do
|
77
|
-
|
78
|
-
|
29
|
+
provider.expects(:launchctl).with(:list).returns('com.bar.is_running')
|
30
|
+
provider.expects(:jobsearch).with(nil).returns({'com.bar.is_running' => "/Library/LaunchDaemons/com.bar.is_running"})
|
31
|
+
provider.prefetch({}).last.status.should eq :running
|
32
|
+
end
|
33
|
+
after :each do
|
34
|
+
provider.instance_variable_set(:@job_list, nil)
|
79
35
|
end
|
80
36
|
end
|
81
37
|
|
82
|
-
describe "when checking whether the service is enabled" do
|
83
|
-
it "should return true if the job plist says disabled is false" do
|
84
|
-
|
85
|
-
|
38
|
+
describe "when checking whether the service is enabled on OS X 10.5" do
|
39
|
+
it "should return true in if the job plist says disabled is false" do
|
40
|
+
Facter.stubs(:value).with(:macosx_productversion_major).returns('10.5')
|
41
|
+
Facter.stubs(:value).with(:kernel).returns('Darwin')
|
42
|
+
Facter.stubs(:value).with(:macaddress).returns('')
|
43
|
+
Facter.stubs(:value).with(:arp).returns('')
|
44
|
+
subject.expects(:plist_from_label).with(joblabel).returns(["foo", {"Disabled" => false}])
|
45
|
+
subject.expects(:resource).returns({:name => joblabel})
|
46
|
+
subject.enabled?.should == :true
|
86
47
|
end
|
87
|
-
it "should return true if the job plist has no disabled key" do
|
88
|
-
|
89
|
-
|
48
|
+
it "should return true in if the job plist has no disabled key" do
|
49
|
+
subject.expects(:resource).returns({:name => joblabel})
|
50
|
+
subject.stubs(:plist_from_label).returns(["foo", {}])
|
51
|
+
subject.enabled?.should == :true
|
90
52
|
end
|
91
|
-
it "should return false if the job plist says disabled is true" do
|
92
|
-
|
93
|
-
|
53
|
+
it "should return false in if the job plist says disabled is true" do
|
54
|
+
subject.expects(:resource).returns({:name => joblabel})
|
55
|
+
subject.stubs(:plist_from_label).returns(["foo", {"Disabled" => true}])
|
56
|
+
subject.enabled?.should == :false
|
94
57
|
end
|
95
58
|
end
|
96
59
|
|
97
60
|
describe "when checking whether the service is enabled on OS X 10.6" do
|
98
61
|
it "should return true if the job plist says disabled is true and the global overrides says disabled is false" do
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
FileTest.expects(:file?).with(
|
103
|
-
|
62
|
+
provider.expects(:get_macosx_version_major).returns("10.6")
|
63
|
+
subject.expects(:plist_from_label).returns([joblabel, {"Disabled" => true}])
|
64
|
+
provider.stubs(:read_plist).returns({joblabel => {"Disabled" => false}})
|
65
|
+
FileTest.expects(:file?).with(launchd_overrides).returns(true)
|
66
|
+
subject.stubs(:resource).returns({:name => joblabel})
|
67
|
+
subject.enabled?.should == :true
|
104
68
|
end
|
105
69
|
it "should return false if the job plist says disabled is false and the global overrides says disabled is true" do
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
FileTest.expects(:file?).with(
|
110
|
-
|
70
|
+
provider.expects(:get_macosx_version_major).returns("10.6")
|
71
|
+
subject.expects(:plist_from_label).returns([joblabel, {"Disabled" => false}])
|
72
|
+
provider.stubs(:read_plist).returns({joblabel => {"Disabled" => true}})
|
73
|
+
FileTest.expects(:file?).with(launchd_overrides).returns(true)
|
74
|
+
subject.stubs(:resource).returns({:name => joblabel})
|
75
|
+
subject.enabled?.should == :false
|
111
76
|
end
|
112
77
|
it "should return true if the job plist and the global overrides have no disabled keys" do
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
FileTest.expects(:file?).with(
|
117
|
-
|
78
|
+
provider.expects(:get_macosx_version_major).returns("10.6")
|
79
|
+
subject.expects(:plist_from_label).returns([joblabel, {}])
|
80
|
+
provider.stubs(:read_plist).returns({})
|
81
|
+
FileTest.expects(:file?).with(launchd_overrides).returns(true)
|
82
|
+
subject.stubs(:resource).returns({:name => joblabel})
|
83
|
+
subject.enabled?.should == :true
|
118
84
|
end
|
119
85
|
end
|
120
86
|
|
121
87
|
describe "when starting the service" do
|
122
88
|
it "should look for the relevant plist once" do
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
89
|
+
subject.expects(:plist_from_label).returns([joblabel, {}]).once
|
90
|
+
subject.stubs(:enabled?).returns :true
|
91
|
+
subject.stubs(:execute).with([:launchctl, :load, joblabel])
|
92
|
+
subject.stubs(:resource).returns({:name => joblabel})
|
93
|
+
subject.start
|
94
|
+
end
|
95
|
+
it "should execute 'launchctl load' once without writing to the plist if the job is enabled" do
|
96
|
+
subject.stubs(:plist_from_label).returns([joblabel, {}])
|
97
|
+
subject.stubs(:enabled?).returns :true
|
98
|
+
subject.expects(:execute).with([:launchctl, :load, joblabel]).once
|
99
|
+
subject.stubs(:resource).returns({:name => joblabel})
|
100
|
+
subject.start
|
130
101
|
end
|
131
102
|
it "should execute 'launchctl load' with writing to the plist once if the job is disabled" do
|
132
|
-
|
133
|
-
|
134
|
-
|
103
|
+
subject.stubs(:plist_from_label).returns([joblabel, {}])
|
104
|
+
subject.stubs(:enabled?).returns(:false)
|
105
|
+
subject.stubs(:resource).returns({:name => joblabel})
|
106
|
+
subject.expects(:execute).with([:launchctl, :load, "-w", joblabel]).once
|
107
|
+
subject.start
|
135
108
|
end
|
136
109
|
it "should disable the job once if the job is disabled and should be disabled at boot" do
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
110
|
+
subject.stubs(:plist_from_label).returns([joblabel, {"Disabled" => true}])
|
111
|
+
subject.stubs(:enabled?).returns :false
|
112
|
+
subject.stubs(:execute).with([:launchctl, :load, "-w", joblabel])
|
113
|
+
subject.stubs(:resource).returns({:name => joblabel, :enable => :false})
|
114
|
+
subject.expects(:disable).once
|
115
|
+
subject.start
|
141
116
|
end
|
142
117
|
end
|
143
118
|
|
144
119
|
describe "when stopping the service" do
|
145
120
|
it "should look for the relevant plist once" do
|
146
|
-
|
147
|
-
|
121
|
+
subject.expects(:plist_from_label).returns([joblabel, {}]).once
|
122
|
+
subject.stubs(:enabled?).returns :true
|
123
|
+
subject.stubs(:execute).with([:launchctl, :unload, '-w', joblabel])
|
124
|
+
subject.stubs(:resource).returns({:name => joblabel})
|
125
|
+
subject.stop
|
148
126
|
end
|
149
127
|
it "should execute 'launchctl unload' once without writing to the plist if the job is disabled" do
|
150
|
-
|
151
|
-
|
152
|
-
|
128
|
+
subject.stubs(:plist_from_label).returns([joblabel, {}])
|
129
|
+
subject.stubs(:enabled?).returns :false
|
130
|
+
subject.expects(:execute).with([:launchctl, :unload, joblabel]).once
|
131
|
+
subject.stubs(:resource).returns({:name => joblabel})
|
132
|
+
subject.stop
|
153
133
|
end
|
154
134
|
it "should execute 'launchctl unload' with writing to the plist once if the job is enabled" do
|
155
|
-
|
156
|
-
|
157
|
-
|
135
|
+
subject.stubs(:plist_from_label).returns([joblabel, {}])
|
136
|
+
subject.stubs(:enabled?).returns :true
|
137
|
+
subject.expects(:execute).with([:launchctl, :unload, '-w', joblabel]).once
|
138
|
+
subject.stubs(:resource).returns({:name => joblabel})
|
139
|
+
subject.stop
|
158
140
|
end
|
159
141
|
it "should enable the job once if the job is enabled and should be enabled at boot" do
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
142
|
+
subject.stubs(:plist_from_label).returns([joblabel, {"Disabled" => false}])
|
143
|
+
subject.stubs(:enabled?).returns :true
|
144
|
+
subject.stubs(:execute).with([:launchctl, :unload, "-w", joblabel])
|
145
|
+
subject.stubs(:resource).returns({:name => joblabel, :enable => :true})
|
146
|
+
subject.expects(:enable).once
|
147
|
+
subject.stop
|
164
148
|
end
|
165
149
|
end
|
166
150
|
|
167
151
|
describe "when enabling the service" do
|
168
|
-
it "should look for the relevant plist once" do
|
169
|
-
|
170
|
-
|
152
|
+
it "should look for the relevant plist once" do ### Do we need this test? Differentiating it?
|
153
|
+
subject.expects(:plist_from_label).returns([joblabel, {}]).once
|
154
|
+
subject.stubs(:enabled?).returns :false
|
155
|
+
subject.stubs(:execute).with([:launchctl, :unload, joblabel])
|
156
|
+
subject.stubs(:resource).returns({:name => joblabel, :enable => :true})
|
157
|
+
subject.stop
|
171
158
|
end
|
172
159
|
it "should check if the job is enabled once" do
|
173
|
-
|
174
|
-
|
160
|
+
subject.stubs(:plist_from_label).returns([joblabel, {}]).once
|
161
|
+
subject.expects(:enabled?).once
|
162
|
+
subject.stubs(:execute).with([:launchctl, :unload, joblabel])
|
163
|
+
subject.stubs(:resource).returns({:name => joblabel, :enable => :true})
|
164
|
+
subject.stop
|
175
165
|
end
|
176
166
|
end
|
177
167
|
|
178
168
|
describe "when disabling the service" do
|
179
169
|
it "should look for the relevant plist once" do
|
180
|
-
|
181
|
-
|
170
|
+
subject.expects(:plist_from_label).returns([joblabel, {}]).once
|
171
|
+
subject.stubs(:enabled?).returns :true
|
172
|
+
subject.stubs(:execute).with([:launchctl, :unload, '-w', joblabel])
|
173
|
+
subject.stubs(:resource).returns({:name => joblabel, :enable => :false})
|
174
|
+
subject.stop
|
182
175
|
end
|
183
176
|
end
|
184
177
|
|
185
178
|
describe "when enabling the service on OS X 10.6" do
|
186
179
|
it "should write to the global launchd overrides file once" do
|
187
|
-
|
188
|
-
|
180
|
+
provider.stubs(:get_macosx_version_major).returns("10.6")
|
181
|
+
provider.stubs(:read_plist).returns({})
|
189
182
|
Plist::Emit.expects(:save_plist).once
|
190
|
-
|
183
|
+
subject.stubs(:resource).returns({:name => joblabel, :enable => :true})
|
184
|
+
subject.enable
|
191
185
|
end
|
192
186
|
end
|
193
187
|
|
194
188
|
describe "when disabling the service on OS X 10.6" do
|
195
189
|
it "should write to the global launchd overrides file once" do
|
196
|
-
|
197
|
-
|
190
|
+
provider.stubs(:get_macosx_version_major).returns("10.6")
|
191
|
+
provider.stubs(:read_plist).returns({})
|
198
192
|
Plist::Emit.expects(:save_plist).once
|
199
|
-
|
193
|
+
subject.stubs(:resource).returns({:name => joblabel, :enable => :false})
|
194
|
+
subject.enable
|
200
195
|
end
|
201
196
|
end
|
202
197
|
|
198
|
+
describe "when using an incompatible version of Facter" do
|
199
|
+
before :each do
|
200
|
+
provider.instance_variable_set(:@macosx_version_major, nil)
|
201
|
+
end
|
202
|
+
it "should display a deprecation warning" do
|
203
|
+
Facter.stubs(:value).with(:macosx_productversion_major).returns(nil)
|
204
|
+
Facter.stubs(:value).with(:kernel).returns('Darwin')
|
205
|
+
Facter.stubs(:value).with(:macosx_productversion).returns('10.5.8')
|
206
|
+
Puppet::Util::Warnings.expects(:maybe_log)
|
207
|
+
provider.stubs(:read_plist).returns({joblabel => {"Disabled" => false}})
|
208
|
+
subject.stubs(:plist_from_label).returns([joblabel, {"Disabled" => false}])
|
209
|
+
subject.stubs(:enabled?).returns :false
|
210
|
+
subject.stubs(:execute).with([:launchctl, :load, '-w', joblabel]).returns('')
|
211
|
+
File.stubs(:open).returns('')
|
212
|
+
subject.stubs(:resource).returns({:name => joblabel, :enable => :true})
|
213
|
+
subject.enable
|
214
|
+
end
|
215
|
+
end
|
203
216
|
end
|
@@ -63,6 +63,11 @@ describe provider_class, :unless => Puppet.features.microsoft_windows? do
|
|
63
63
|
genkey(key).should == "from=\"192.168.1.1\",no-pty,no-X11-forwarding ssh-rsa AAAAfsfddsjldjgksdflgkjsfdlgkj root@localhost\n"
|
64
64
|
end
|
65
65
|
|
66
|
+
it "should be able to parse name if it includes whitespace" do
|
67
|
+
@provider_class.parse_line('ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC7pHZ1XRj3tXbFpPFhMGU1bVwz7jr13zt/wuE+pVIJA8GlmHYuYtIxHPfDHlkixdwLachCpSQUL9NbYkkRFRn9m6PZ7125ohE4E4m96QS6SGSQowTiRn4Lzd9LV38g93EMHjPmEkdSq7MY4uJEd6DUYsLvaDYdIgBiLBIWPA3OrQ== fancy user')[:name].should == 'fancy user'
|
68
|
+
@provider_class.parse_line('from="host1.reductlivelabs.com,host.reductivelabs.com",command="/usr/local/bin/run",ssh-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC7pHZ1XRj3tXbFpPFhMGU1bVwz7jr13zt/wuE+pVIJA8GlmHYuYtIxHPfDHlkixdwLachCpSQUL9NbYkkRFRn9m6PZ7125ohE4E4m96QS6SGSQowTiRn4Lzd9LV38g93EMHjPmEkdSq7MY4uJEd6DUYsLvaDYdIgBiLBIWPA3OrQ== fancy user')[:name].should == 'fancy user'
|
69
|
+
end
|
70
|
+
|
66
71
|
it "should be able to parse options containing commas via its parse_options method" do
|
67
72
|
options = %w{from="host1.reductlivelabs.com,host.reductivelabs.com" command="/usr/local/bin/run" ssh-pty}
|
68
73
|
optionstr = options.join(", ")
|
@@ -1,9 +1,12 @@
|
|
1
1
|
#!/usr/bin/env rspec
|
2
2
|
require 'spec_helper'
|
3
|
+
require 'puppet_spec/files'
|
3
4
|
|
4
5
|
provider_class = Puppet::Type.type(:user).provider(:user_role_add)
|
5
6
|
|
6
|
-
describe provider_class
|
7
|
+
describe provider_class do
|
8
|
+
include PuppetSpec::Files
|
9
|
+
|
7
10
|
before do
|
8
11
|
@resource = stub("resource", :name => "myuser", :managehome? => nil)
|
9
12
|
@resource.stubs(:should).returns "fakeval"
|
@@ -243,17 +246,44 @@ describe provider_class, :fails_on_windows => true do
|
|
243
246
|
end
|
244
247
|
|
245
248
|
describe "when setting the password" do
|
246
|
-
|
247
|
-
|
248
|
-
File.
|
249
|
+
before :each do
|
250
|
+
@shadow_file = tmpfile('shadow')
|
251
|
+
File.open(@shadow_file, 'w') do |f|
|
252
|
+
f.puts 'fakeval:password:0'
|
253
|
+
end
|
254
|
+
@provider.stubs(:shadow_file).returns(@shadow_file)
|
255
|
+
end
|
256
|
+
|
257
|
+
it 'opens #shadow_file for reading' do
|
258
|
+
File.expects(:open).with(@shadow_file, "r")
|
249
259
|
File.stubs(:rename)
|
250
|
-
|
260
|
+
|
261
|
+
@provider.password = "hashedpassword"
|
251
262
|
end
|
252
263
|
|
253
|
-
it
|
254
|
-
File.stubs(:
|
255
|
-
File.
|
256
|
-
@provider.password=
|
264
|
+
it 'writes to "#{shadow_file}_tmp"' do
|
265
|
+
File.stubs(:rename)
|
266
|
+
File.stubs(:unlink)
|
267
|
+
@provider.password = 'hashedpassword'
|
268
|
+
|
269
|
+
File.read("#{@shadow_file}_tmp").should =~ /hashedpassword/
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'renames "#{shadow_file}_tmp" to shadow_file' do
|
273
|
+
File.stubs(:open)
|
274
|
+
File.expects(:rename).with("#{@shadow_file}_tmp", @shadow_file)
|
275
|
+
|
276
|
+
@provider.password = "hashedpassword"
|
277
|
+
end
|
278
|
+
|
279
|
+
it 'updates the last changed field' do
|
280
|
+
Time.stubs(:now).returns(42 * 86400)
|
281
|
+
|
282
|
+
File.read(@shadow_file).should == "fakeval:password:0\n"
|
283
|
+
|
284
|
+
@provider.password = 'hashedpassword'
|
285
|
+
|
286
|
+
File.read(@shadow_file).should == "fakeval:hashedpassword:42"
|
257
287
|
end
|
258
288
|
end
|
259
289
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
provider_class = Puppet::Type.type(:user).provider(:useradd)
|
5
5
|
|
6
|
-
describe provider_class
|
6
|
+
describe provider_class do
|
7
7
|
before do
|
8
8
|
@resource = stub("resource", :name => "myuser", :managehome? => nil)
|
9
9
|
@resource.stubs(:should).returns "fakeval"
|
@@ -73,7 +73,9 @@ describe Puppet::Type.type(:user).provider(:windows_adsi) do
|
|
73
73
|
|
74
74
|
user.stubs(:groups).returns(['group2', 'group3'])
|
75
75
|
|
76
|
-
|
76
|
+
create = sequence('create')
|
77
|
+
user.expects(:commit).in_sequence(create)
|
78
|
+
user.expects(:set_groups).with('group1,group2', false).in_sequence(create)
|
77
79
|
user.expects(:[]=).with('Description', 'a test user')
|
78
80
|
user.expects(:[]=).with('HomeDirectory', 'C:\Users\testuser')
|
79
81
|
|
@@ -101,6 +103,11 @@ describe Puppet::Type.type(:user).provider(:windows_adsi) do
|
|
101
103
|
provider.password.should == :absent
|
102
104
|
end
|
103
105
|
|
106
|
+
it 'should not create a user if a group by the same name exists' do
|
107
|
+
Puppet::Util::ADSI::User.expects(:create).with('testuser').raises( Puppet::Error.new("Cannot create user if group 'testuser' exists.") )
|
108
|
+
expect{ provider.create }.to raise_error( Puppet::Error,
|
109
|
+
/Cannot create user if group 'testuser' exists./ )
|
110
|
+
end
|
104
111
|
end
|
105
112
|
|
106
113
|
it 'should be able to test whether a user exists' do
|