puppet 6.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +20 -20
  4. data/Guardfile.example +76 -0
  5. data/LICENSE +189 -4
  6. data/README.md +3 -3
  7. data/Rakefile +5 -2
  8. data/ext/solaris/smf/svc-puppetd +8 -1
  9. data/ext/solaris/smf/svc-puppetmasterd +8 -1
  10. data/lib/puppet/application/apply.rb +100 -59
  11. data/lib/puppet/application/cert.rb +4 -114
  12. data/lib/puppet/application/device.rb +48 -32
  13. data/lib/puppet/application/script.rb +1 -1
  14. data/lib/puppet/application/ssl.rb +135 -51
  15. data/lib/puppet/application.rb +5 -0
  16. data/lib/puppet/configurer.rb +2 -3
  17. data/lib/puppet/defaults.rb +33 -49
  18. data/lib/puppet/etc.rb +20 -0
  19. data/lib/puppet/face/config.rb +3 -3
  20. data/lib/puppet/face/key.rb +1 -1
  21. data/lib/puppet/face/node/clean.rb +0 -1
  22. data/lib/puppet/feature/base.rb +1 -1
  23. data/lib/puppet/file_bucket/dipper.rb +1 -1
  24. data/lib/puppet/file_serving/fileset.rb +1 -1
  25. data/lib/puppet/functions/abs.rb +1 -1
  26. data/lib/puppet/functions/new.rb +1 -1
  27. data/lib/puppet/module/task.rb +29 -38
  28. data/lib/puppet/pal/catalog_compiler.rb +96 -0
  29. data/lib/puppet/pal/compiler.rb +221 -0
  30. data/lib/puppet/pal/function_signature.rb +52 -0
  31. data/lib/puppet/pal/json_catalog_encoder.rb +67 -0
  32. data/lib/puppet/pal/pal_api.rb +15 -0
  33. data/lib/puppet/pal/pal_impl.rb +523 -0
  34. data/lib/puppet/pal/plan_signature.rb +71 -0
  35. data/lib/puppet/pal/script_compiler.rb +71 -0
  36. data/lib/puppet/pal/task_signature.rb +58 -0
  37. data/lib/puppet/parser/catalog_compiler.rb +24 -0
  38. data/lib/puppet/parser/compiler.rb +3 -1
  39. data/lib/puppet/parser/functions/generate.rb +7 -6
  40. data/lib/puppet/plugins/configuration.rb +5 -1
  41. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +3 -1
  42. data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -0
  43. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -1
  44. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -3
  45. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  46. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +19 -10
  47. data/lib/puppet/pops/loader/task_instantiator.rb +13 -70
  48. data/lib/puppet/pops/parser/heredoc_support.rb +1 -2
  49. data/lib/puppet/pops/parser/lexer2.rb +1 -1
  50. data/lib/puppet/pops/pcore.rb +10 -33
  51. data/lib/puppet/pops/serialization/to_data_converter.rb +9 -1
  52. data/lib/puppet/pops/serialization.rb +1 -0
  53. data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
  54. data/lib/puppet/pops/types/string_converter.rb +18 -4
  55. data/lib/puppet/pops/validation/checker4_0.rb +17 -2
  56. data/lib/puppet/provider/exec.rb +59 -57
  57. data/lib/puppet/provider/group/aix.rb +18 -2
  58. data/lib/puppet/provider/group/windows_adsi.rb +7 -3
  59. data/lib/puppet/provider/nameservice.rb +1 -25
  60. data/lib/puppet/provider/package/dnf.rb +2 -0
  61. data/lib/puppet/provider/package/pkgng.rb +37 -21
  62. data/lib/puppet/provider/package/portage.rb +2 -2
  63. data/lib/puppet/provider/package/windows/exe_package.rb +16 -10
  64. data/lib/puppet/provider/package/windows/msi_package.rb +8 -0
  65. data/lib/puppet/provider/package/windows/package.rb +9 -1
  66. data/lib/puppet/provider/package/windows.rb +2 -2
  67. data/lib/puppet/provider/package/yum.rb +1 -1
  68. data/lib/puppet/provider/parsedfile.rb +25 -4
  69. data/lib/puppet/provider/service/launchd.rb +19 -3
  70. data/lib/puppet/provider/service/smf.rb +54 -0
  71. data/lib/puppet/provider/service/systemd.rb +19 -0
  72. data/lib/puppet/provider/service/upstart.rb +1 -0
  73. data/lib/puppet/provider/service/windows.rb +22 -5
  74. data/lib/puppet/provider/user/aix.rb +48 -2
  75. data/lib/puppet/provider/user/useradd.rb +2 -10
  76. data/lib/puppet/provider/user/windows_adsi.rb +9 -1
  77. data/lib/puppet/resource/catalog.rb +1 -5
  78. data/lib/puppet/resource.rb +3 -1
  79. data/lib/puppet/ssl/host.rb +26 -16
  80. data/lib/puppet/syntax_checkers/epp.rb +34 -0
  81. data/lib/puppet/syntax_checkers/pp.rb +34 -0
  82. data/lib/puppet/transaction/event_manager.rb +13 -1
  83. data/lib/puppet/transaction/persistence.rb +1 -1
  84. data/lib/puppet/transaction/resource_harness.rb +3 -1
  85. data/lib/puppet/type/group.rb +29 -1
  86. data/lib/puppet/type/package.rb +5 -1
  87. data/lib/puppet/type/resources.rb +12 -2
  88. data/lib/puppet/type/schedule.rb +7 -0
  89. data/lib/puppet/type/service.rb +12 -0
  90. data/lib/puppet/type/user.rb +5 -2
  91. data/lib/puppet/type.rb +6 -0
  92. data/lib/puppet/util/command_line.rb +2 -3
  93. data/lib/puppet/util/execution.rb +15 -1
  94. data/lib/puppet/util/filetype.rb +56 -8
  95. data/lib/puppet/util/log/destinations.rb +3 -2
  96. data/lib/puppet/util/logging.rb +3 -2
  97. data/lib/puppet/util/posix.rb +15 -0
  98. data/lib/puppet/util/selinux.rb +1 -1
  99. data/lib/puppet/util/storage.rb +12 -0
  100. data/lib/puppet/util/windows/adsi.rb +79 -2
  101. data/lib/puppet/util/windows/api_types.rb +1 -1
  102. data/lib/puppet/util/windows/process.rb +23 -3
  103. data/lib/puppet/util/windows/registry.rb +29 -5
  104. data/lib/puppet/util/windows/security.rb +14 -0
  105. data/lib/puppet/util/windows/service.rb +294 -74
  106. data/lib/puppet/util/windows/user.rb +3 -5
  107. data/lib/puppet/util.rb +7 -3
  108. data/lib/puppet/version.rb +1 -1
  109. data/lib/puppet.rb +1 -0
  110. data/lib/puppet_pal.rb +5 -1099
  111. data/locales/ja/puppet.po +952 -986
  112. data/locales/puppet.pot +592 -347
  113. data/man/man5/puppet.conf.5 +26 -31
  114. data/man/man8/puppet-agent.8 +1 -1
  115. data/man/man8/puppet-apply.8 +1 -1
  116. data/man/man8/puppet-catalog.8 +1 -1
  117. data/man/man8/puppet-config.8 +4 -4
  118. data/man/man8/puppet-describe.8 +1 -1
  119. data/man/man8/puppet-device.8 +23 -19
  120. data/man/man8/puppet-doc.8 +1 -1
  121. data/man/man8/puppet-epp.8 +1 -1
  122. data/man/man8/puppet-facts.8 +1 -1
  123. data/man/man8/puppet-filebucket.8 +1 -1
  124. data/man/man8/puppet-generate.8 +1 -1
  125. data/man/man8/puppet-help.8 +1 -1
  126. data/man/man8/puppet-key.8 +2 -2
  127. data/man/man8/puppet-lookup.8 +1 -1
  128. data/man/man8/puppet-man.8 +1 -1
  129. data/man/man8/puppet-module.8 +1 -1
  130. data/man/man8/puppet-node.8 +1 -1
  131. data/man/man8/puppet-parser.8 +1 -1
  132. data/man/man8/puppet-plugin.8 +1 -1
  133. data/man/man8/puppet-report.8 +1 -1
  134. data/man/man8/puppet-resource.8 +1 -1
  135. data/man/man8/puppet-script.8 +1 -1
  136. data/man/man8/puppet-ssl.8 +26 -3
  137. data/man/man8/puppet-status.8 +1 -1
  138. data/man/man8/puppet.8 +2 -2
  139. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load.rb +11 -0
  140. data/spec/fixtures/unit/provider/package/pkgng/pkg.query +7 -1
  141. data/spec/fixtures/unit/provider/package/pkgng/pkg.query.zsh +1 -0
  142. data/spec/fixtures/unit/provider/service/smf/svcs_fmri.out +6 -0
  143. data/spec/fixtures/unit/provider/service/smf/svcs_multiple_fmris.out +13 -0
  144. data/spec/integration/application/apply_spec.rb +4 -1
  145. data/spec/integration/parser/collection_spec.rb +4 -8
  146. data/spec/integration/provider/service/windows_spec.rb +5 -5
  147. data/spec/integration/ssl/key_spec.rb +0 -4
  148. data/spec/integration/transaction_spec.rb +559 -0
  149. data/spec/integration/type/file_spec.rb +6 -6
  150. data/spec/integration/util/windows/registry_spec.rb +39 -0
  151. data/spec/integration/util/windows/security_spec.rb +10 -7
  152. data/spec/integration/util/windows/user_spec.rb +37 -17
  153. data/spec/lib/puppet/test_ca.rb +1 -1
  154. data/spec/spec_helper.rb +1 -1
  155. data/spec/unit/agent_spec.rb +2 -2
  156. data/spec/unit/application/apply_spec.rb +55 -2
  157. data/spec/unit/application/device_spec.rb +10 -7
  158. data/spec/unit/application/face_base_spec.rb +1 -1
  159. data/spec/unit/application/lookup_spec.rb +2 -1
  160. data/spec/unit/application/ssl_spec.rb +178 -109
  161. data/spec/unit/application_spec.rb +29 -11
  162. data/spec/unit/configurer/downloader_spec.rb +1 -1
  163. data/spec/unit/configurer_spec.rb +16 -5
  164. data/spec/unit/etc_spec.rb +25 -0
  165. data/spec/unit/face/node_spec.rb +1 -3
  166. data/spec/unit/face/parser_spec.rb +15 -0
  167. data/spec/unit/file_serving/fileset_spec.rb +11 -11
  168. data/spec/unit/functions/logging_spec.rb +10 -3
  169. data/spec/unit/indirector/catalog/json_spec.rb +9 -3
  170. data/spec/unit/indirector/yaml_spec.rb +1 -1
  171. data/spec/unit/network/http/connection_spec.rb +2 -2
  172. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +36 -0
  173. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +22 -4
  174. data/spec/unit/pops/loaders/loader_spec.rb +9 -17
  175. data/spec/unit/pops/loaders/loaders_spec.rb +48 -0
  176. data/spec/unit/pops/loaders/module_loaders_spec.rb +7 -7
  177. data/spec/unit/pops/parser/parse_heredoc_spec.rb +16 -0
  178. data/spec/unit/pops/serialization/to_from_hr_spec.rb +9 -0
  179. data/spec/unit/pops/types/p_timespan_type_spec.rb +22 -0
  180. data/spec/unit/pops/types/p_timestamp_type_spec.rb +19 -0
  181. data/spec/unit/pops/types/string_converter_spec.rb +25 -1
  182. data/spec/unit/pops/types/task_spec.rb +42 -116
  183. data/spec/unit/pops/validator/validator_spec.rb +24 -10
  184. data/spec/unit/provider/exec/posix_spec.rb +24 -0
  185. data/spec/unit/provider/group/aix_spec.rb +20 -6
  186. data/spec/unit/provider/group/ldap_spec.rb +22 -25
  187. data/spec/unit/provider/group/pw_spec.rb +7 -10
  188. data/spec/unit/provider/group/windows_adsi_spec.rb +42 -33
  189. data/spec/unit/provider/nameservice/directoryservice_spec.rb +97 -103
  190. data/spec/unit/provider/package/aix_spec.rb +5 -8
  191. data/spec/unit/provider/package/apt_spec.rb +3 -6
  192. data/spec/unit/provider/package/dnf_spec.rb +38 -25
  193. data/spec/unit/provider/package/dpkg_spec.rb +18 -21
  194. data/spec/unit/provider/package/freebsd_spec.rb +4 -7
  195. data/spec/unit/provider/package/gem_spec.rb +41 -41
  196. data/spec/unit/provider/package/hpux_spec.rb +7 -10
  197. data/spec/unit/provider/package/macports_spec.rb +13 -15
  198. data/spec/unit/provider/package/nim_spec.rb +3 -10
  199. data/spec/unit/provider/package/openbsd_spec.rb +14 -17
  200. data/spec/unit/provider/package/pip3_spec.rb +3 -6
  201. data/spec/unit/provider/package/pip_spec.rb +45 -49
  202. data/spec/unit/provider/package/pkgin_spec.rb +13 -18
  203. data/spec/unit/provider/package/pkgng_spec.rb +32 -27
  204. data/spec/unit/provider/package/puppet_gem_spec.rb +6 -9
  205. data/spec/unit/provider/package/tdnf_spec.rb +9 -12
  206. data/spec/unit/provider/package/windows/exe_package_spec.rb +3 -3
  207. data/spec/unit/provider/package/windows_spec.rb +4 -4
  208. data/spec/unit/provider/package/yum_spec.rb +30 -16
  209. data/spec/unit/provider/package/zypper_spec.rb +17 -19
  210. data/spec/unit/provider/service/bsd_spec.rb +7 -9
  211. data/spec/unit/provider/service/daemontools_spec.rb +12 -16
  212. data/spec/unit/provider/service/debian_spec.rb +6 -10
  213. data/spec/unit/provider/service/freebsd_spec.rb +2 -2
  214. data/spec/unit/provider/service/launchd_spec.rb +19 -0
  215. data/spec/unit/provider/service/openbsd_spec.rb +13 -17
  216. data/spec/unit/provider/service/rcng_spec.rb +2 -4
  217. data/spec/unit/provider/service/redhat_spec.rb +12 -11
  218. data/spec/unit/provider/service/runit_spec.rb +7 -14
  219. data/spec/unit/provider/service/smf_spec.rb +77 -13
  220. data/spec/unit/provider/service/src_spec.rb +11 -16
  221. data/spec/unit/provider/service/systemd_spec.rb +39 -1
  222. data/spec/unit/provider/service/windows_spec.rb +39 -7
  223. data/spec/unit/provider/user/aix_spec.rb +43 -2
  224. data/spec/unit/provider/user/hpux_spec.rb +3 -5
  225. data/spec/unit/provider/user/ldap_spec.rb +29 -32
  226. data/spec/unit/provider/user/pw_spec.rb +10 -13
  227. data/spec/unit/provider/user/useradd_spec.rb +2 -2
  228. data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
  229. data/spec/unit/puppet_pal_2pec.rb +6 -6
  230. data/spec/unit/puppet_pal_catalog_spec.rb +58 -0
  231. data/spec/unit/resource/catalog_spec.rb +2 -2
  232. data/spec/unit/resource_spec.rb +31 -0
  233. data/spec/unit/ssl/host_spec.rb +22 -1
  234. data/spec/unit/ssl/key_spec.rb +2 -4
  235. data/spec/unit/task_spec.rb +50 -5
  236. data/spec/unit/transaction/event_manager_spec.rb +12 -1
  237. data/spec/unit/transaction/persistence_spec.rb +4 -4
  238. data/spec/unit/transaction/resource_harness_spec.rb +18 -0
  239. data/spec/unit/type/group_spec.rb +11 -3
  240. data/spec/unit/type/resources_spec.rb +18 -0
  241. data/spec/unit/type/service_spec.rb +27 -1
  242. data/spec/unit/util/execution_spec.rb +77 -0
  243. data/spec/unit/util/filetype_spec.rb +13 -5
  244. data/spec/unit/util/log/destinations_spec.rb +10 -0
  245. data/spec/unit/util/logging_spec.rb +58 -41
  246. data/spec/unit/util/monkey_patches_spec.rb +18 -5
  247. data/spec/unit/util/posix_spec.rb +28 -0
  248. data/spec/unit/util/selinux_spec.rb +4 -0
  249. data/spec/unit/util/storage_spec.rb +107 -0
  250. data/spec/unit/util/suidmanager_spec.rb +1 -3
  251. data/spec/unit/util/windows/adsi_spec.rb +95 -0
  252. data/spec/unit/util/windows/service_spec.rb +377 -131
  253. metadata +24 -11
  254. data/ext/autotest/Rakefile +0 -8
  255. data/ext/autotest/config +0 -43
  256. data/ext/autotest/readme.rst +0 -16
  257. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +0 -7
  258. data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +0 -1
  259. data/spec/watchr.rb +0 -137
@@ -1,10 +1,8 @@
1
- #!/usr/bin/env ruby
2
1
  require 'spec_helper'
3
2
  require 'etc'
4
3
 
5
- provider_class = Puppet::Type.type(:user).provider(:hpuxuseradd)
6
-
7
- describe provider_class, :unless => Puppet::Util::Platform.windows? do
4
+ describe Puppet::Type.type(:user).provider(:hpuxuseradd),
5
+ unless: Puppet::Util::Platform.windows? do
8
6
  let :resource do
9
7
  Puppet::Type.type(:user).new(
10
8
  :title => 'testuser',
@@ -39,7 +37,7 @@ describe provider_class, :unless => Puppet::Util::Platform.windows? do
39
37
  end
40
38
 
41
39
  it "should have feature manages_passwords" do
42
- expect(provider_class).to be_manages_passwords
40
+ expect(described_class).to be_manages_passwords
43
41
  end
44
42
 
45
43
  it "should return nil if user does not exist" do
@@ -1,27 +1,24 @@
1
- #! /usr/bin/env ruby
2
1
  require 'spec_helper'
3
2
 
4
- provider_class = Puppet::Type.type(:user).provider(:ldap)
5
-
6
- describe provider_class do
3
+ describe Puppet::Type.type(:user).provider(:ldap) do
7
4
  it "should have the Ldap provider class as its baseclass" do
8
- expect(provider_class.superclass).to equal(Puppet::Provider::Ldap)
5
+ expect(described_class.superclass).to equal(Puppet::Provider::Ldap)
9
6
  end
10
7
 
11
8
  it "should manage :posixAccount and :person objectclasses" do
12
- expect(provider_class.manager.objectclasses).to eq([:posixAccount, :person])
9
+ expect(described_class.manager.objectclasses).to eq([:posixAccount, :person])
13
10
  end
14
11
 
15
12
  it "should use 'ou=People' as its relative base" do
16
- expect(provider_class.manager.location).to eq("ou=People")
13
+ expect(described_class.manager.location).to eq("ou=People")
17
14
  end
18
15
 
19
16
  it "should use :uid as its rdn" do
20
- expect(provider_class.manager.rdn).to eq(:uid)
17
+ expect(described_class.manager.rdn).to eq(:uid)
21
18
  end
22
19
 
23
20
  it "should be able to manage passwords" do
24
- expect(provider_class).to be_manages_passwords
21
+ expect(described_class).to be_manages_passwords
25
22
  end
26
23
 
27
24
  {:name => "uid",
@@ -33,15 +30,15 @@ describe provider_class do
33
30
  :shell => "loginShell"
34
31
  }.each do |puppet, ldap|
35
32
  it "should map :#{puppet.to_s} to '#{ldap}'" do
36
- expect(provider_class.manager.ldap_name(puppet)).to eq(ldap)
33
+ expect(described_class.manager.ldap_name(puppet)).to eq(ldap)
37
34
  end
38
35
  end
39
36
 
40
- describe "when being created" do
37
+ context "when being created" do
41
38
  before do
42
39
  # So we don't try to actually talk to ldap
43
40
  @connection = mock 'connection'
44
- provider_class.manager.stubs(:connect).yields @connection
41
+ described_class.manager.stubs(:connect).yields @connection
45
42
  end
46
43
 
47
44
  it "should generate the sn as the last field of the cn" do
@@ -50,7 +47,7 @@ describe provider_class do
50
47
  resource = stub 'resource', :should => %w{whatever}
51
48
  resource.stubs(:should).with(:comment).returns ["Luke Kanies"]
52
49
  resource.stubs(:should).with(:ensure).returns :present
53
- instance = provider_class.new(:name => "luke", :ensure => :absent)
50
+ instance = described_class.new(:name => "luke", :ensure => :absent)
54
51
 
55
52
  instance.stubs(:resource).returns resource
56
53
 
@@ -66,7 +63,7 @@ describe provider_class do
66
63
  resource = stub 'resource', :should => %w{whatever}
67
64
  resource.stubs(:should).with(:gid).returns 'bar'
68
65
  resource.stubs(:should).with(:ensure).returns :present
69
- instance = provider_class.new(:name => "luke", :ensure => :absent)
66
+ instance = described_class.new(:name => "luke", :ensure => :absent)
70
67
  instance.stubs(:resource).returns resource
71
68
 
72
69
  @connection.expects(:add).with { |dn, attrs| attrs["gidNumber"] == ["101"] }
@@ -75,18 +72,18 @@ describe provider_class do
75
72
  instance.flush
76
73
  end
77
74
 
78
- describe "with no uid specified" do
75
+ context "with no uid specified" do
79
76
  it "should pick the first available UID after the largest existing UID" do
80
77
  Puppet::Type.type(:group).provider(:ldap).expects(:name2id).with(["whatever"]).returns [123]
81
78
 
82
79
  low = {:name=>["luke"], :shell=>:absent, :uid=>["600"], :home=>["/h"], :gid=>["1000"], :password=>["blah"], :comment=>["l k"]}
83
80
  high = {:name=>["testing"], :shell=>:absent, :uid=>["640"], :home=>["/h"], :gid=>["1000"], :password=>["blah"], :comment=>["t u"]}
84
- provider_class.manager.expects(:search).returns([low, high])
81
+ described_class.manager.expects(:search).returns([low, high])
85
82
 
86
83
  resource = stub 'resource', :should => %w{whatever}
87
84
  resource.stubs(:should).with(:uid).returns nil
88
85
  resource.stubs(:should).with(:ensure).returns :present
89
- instance = provider_class.new(:name => "luke", :ensure => :absent)
86
+ instance = described_class.new(:name => "luke", :ensure => :absent)
90
87
  instance.stubs(:resource).returns resource
91
88
 
92
89
  @connection.expects(:add).with { |dn, attrs| attrs["uidNumber"] == ["641"] }
@@ -98,12 +95,12 @@ describe provider_class do
98
95
  it "should pick 501 of no users exist" do
99
96
  Puppet::Type.type(:group).provider(:ldap).expects(:name2id).with(["whatever"]).returns [123]
100
97
 
101
- provider_class.manager.expects(:search).returns nil
98
+ described_class.manager.expects(:search).returns nil
102
99
 
103
100
  resource = stub 'resource', :should => %w{whatever}
104
101
  resource.stubs(:should).with(:uid).returns nil
105
102
  resource.stubs(:should).with(:ensure).returns :present
106
- instance = provider_class.new(:name => "luke", :ensure => :absent)
103
+ instance = described_class.new(:name => "luke", :ensure => :absent)
107
104
  instance.stubs(:resource).returns resource
108
105
 
109
106
  @connection.expects(:add).with { |dn, attrs| attrs["uidNumber"] == ["501"] }
@@ -114,11 +111,11 @@ describe provider_class do
114
111
  end
115
112
  end
116
113
 
117
- describe "when flushing" do
114
+ context "when flushing" do
118
115
  before do
119
- provider_class.stubs(:suitable?).returns true
116
+ described_class.stubs(:suitable?).returns true
120
117
 
121
- @instance = provider_class.new(:name => "myname", :groups => %w{whatever}, :uid => "400")
118
+ @instance = described_class.new(:name => "myname", :groups => %w{whatever}, :uid => "400")
122
119
  end
123
120
 
124
121
  it "should remove the :groups value before updating" do
@@ -144,13 +141,13 @@ describe provider_class do
144
141
  end
145
142
  end
146
143
 
147
- describe "when checking group membership" do
144
+ context "when checking group membership" do
148
145
  before do
149
146
  @groups = Puppet::Type.type(:group).provider(:ldap)
150
147
  @group_manager = @groups.manager
151
- provider_class.stubs(:suitable?).returns true
148
+ described_class.stubs(:suitable?).returns true
152
149
 
153
- @instance = provider_class.new(:name => "myname")
150
+ @instance = described_class.new(:name => "myname")
154
151
  end
155
152
 
156
153
  it "should show its group membership as the sorted list of all groups returned by an ldap query of group memberships" do
@@ -175,11 +172,11 @@ describe provider_class do
175
172
  end
176
173
  end
177
174
 
178
- describe "when modifying group membership" do
175
+ context "when modifying group membership" do
179
176
  before do
180
177
  @groups = Puppet::Type.type(:group).provider(:ldap)
181
178
  @group_manager = @groups.manager
182
- provider_class.stubs(:suitable?).returns true
179
+ described_class.stubs(:suitable?).returns true
183
180
 
184
181
  @one = {:name => "one", :gid => "500"}
185
182
  @group_manager.stubs(:find).with("one").returns(@one)
@@ -187,7 +184,7 @@ describe provider_class do
187
184
  @two = {:name => "one", :gid => "600"}
188
185
  @group_manager.stubs(:find).with("two").returns(@two)
189
186
 
190
- @instance = provider_class.new(:name => "myname")
187
+ @instance = described_class.new(:name => "myname")
191
188
 
192
189
  @instance.stubs(:groups).returns :absent
193
190
  end
@@ -231,7 +228,7 @@ describe provider_class do
231
228
  @instance.groups = "one"
232
229
  end
233
230
 
234
- describe "for groups that have no members" do
231
+ context "for groups that have no members" do
235
232
  it "should create a new members attribute with its value being the user's name" do
236
233
  @group_manager.expects(:update).with { |name, is, should| should[:members] == %w{myname} }
237
234
 
@@ -239,7 +236,7 @@ describe provider_class do
239
236
  end
240
237
  end
241
238
 
242
- describe "for groups it is being removed from" do
239
+ context "for groups it is being removed from" do
243
240
  it "should replace the group's member list with one missing the user's name" do
244
241
  @one[:members] = %w{myname a}
245
242
  @two[:members] = %w{myname b}
@@ -261,7 +258,7 @@ describe provider_class do
261
258
  end
262
259
  end
263
260
 
264
- describe "for groups that already have members" do
261
+ context "for groups that already have members" do
265
262
  it "should replace each group's member list with a new list including the user's name" do
266
263
  @one[:members] = %w{a b}
267
264
  @group_manager.expects(:update).with { |name, is, should| should[:members] == %w{a b myname} }
@@ -272,7 +269,7 @@ describe provider_class do
272
269
  end
273
270
  end
274
271
 
275
- describe "for groups of which it is a member" do
272
+ context "for groups of which it is a member" do
276
273
  it "should do nothing" do
277
274
  @one[:members] = %w{a b}
278
275
  @group_manager.expects(:update).with { |name, is, should| should[:members] == %w{a b myname} }
@@ -1,14 +1,11 @@
1
- #! /usr/bin/env ruby
2
1
  require 'spec_helper'
3
2
 
4
- provider_class = Puppet::Type.type(:user).provider(:pw)
5
-
6
- describe provider_class do
3
+ describe Puppet::Type.type(:user).provider(:pw) do
7
4
  let :resource do
8
5
  Puppet::Type.type(:user).new(:name => "testuser", :provider => :pw)
9
6
  end
10
7
 
11
- describe "when creating users" do
8
+ context "when creating users" do
12
9
  let :provider do
13
10
  prov = resource.provider
14
11
  prov.expects(:exists?).returns nil
@@ -16,8 +13,8 @@ describe provider_class do
16
13
  end
17
14
 
18
15
  it "should run pw with no additional flags when no properties are given" do
19
- expect(provider.addcmd).to eq([provider_class.command(:pw), "useradd", "testuser"])
20
- provider.expects(:execute).with([provider_class.command(:pw), "useradd", "testuser"], kind_of(Hash))
16
+ expect(provider.addcmd).to eq([described_class.command(:pw), "useradd", "testuser"])
17
+ provider.expects(:execute).with([described_class.command(:pw), "useradd", "testuser"], kind_of(Hash))
21
18
  provider.create
22
19
  end
23
20
 
@@ -104,12 +101,12 @@ describe provider_class do
104
101
  end
105
102
  end
106
103
 
107
- describe "when deleting users" do
104
+ context "when deleting users" do
108
105
  it "should run pw with no additional flags" do
109
106
  provider = resource.provider
110
107
  provider.expects(:exists?).returns true
111
- expect(provider.deletecmd).to eq([provider_class.command(:pw), "userdel", "testuser"])
112
- provider.expects(:execute).with([provider_class.command(:pw), "userdel", "testuser"], has_entry(:custom_environment, {}))
108
+ expect(provider.deletecmd).to eq([described_class.command(:pw), "userdel", "testuser"])
109
+ provider.expects(:execute).with([described_class.command(:pw), "userdel", "testuser"], has_entry(:custom_environment, {}))
113
110
  provider.delete
114
111
  end
115
112
 
@@ -133,14 +130,14 @@ describe provider_class do
133
130
  end
134
131
  end
135
132
 
136
- describe "when modifying users" do
133
+ context "when modifying users" do
137
134
  let :provider do
138
135
  resource.provider
139
136
  end
140
137
 
141
138
  it "should run pw with the correct arguments" do
142
- expect(provider.modifycmd("uid", 12345)).to eq([provider_class.command(:pw), "usermod", "testuser", "-u", 12345])
143
- provider.expects(:execute).with([provider_class.command(:pw), "usermod", "testuser", "-u", 12345], has_entry(:custom_environment, {}))
139
+ expect(provider.modifycmd("uid", 12345)).to eq([described_class.command(:pw), "usermod", "testuser", "-u", 12345])
140
+ provider.expects(:execute).with([described_class.command(:pw), "usermod", "testuser", "-u", 12345], has_entry(:custom_environment, {}))
144
141
  provider.uid = 12345
145
142
  end
146
143
 
@@ -138,10 +138,10 @@ describe Puppet::Type.type(:user).provider(:useradd) do
138
138
  provider.create
139
139
  end
140
140
 
141
- it "should not use -e with luseradd, should call lusermod with -e after luseradd when expiry is set" do
141
+ it "should not use -e with luseradd, should call usermod with -e after luseradd when expiry is set" do
142
142
  resource[:expiry] = '2038-01-24'
143
143
  provider.expects(:execute).with(all_of(includes('/usr/sbin/luseradd'), Not(includes('-e'))), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
144
- provider.expects(:execute).with(all_of(includes('/usr/sbin/lusermod'), includes('-e')), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
144
+ provider.expects(:execute).with(all_of(includes('/usr/sbin/usermod'), includes('-e')), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
145
145
  provider.create
146
146
  end
147
147
 
@@ -218,6 +218,9 @@ describe Puppet::Type.type(:user).provider(:windows_adsi), :if => Puppet::Util::
218
218
  end
219
219
 
220
220
  it "should set a user's password" do
221
+ provider.user.expects(:disabled?).returns(false)
222
+ provider.user.expects(:locked_out?).returns(false)
223
+ provider.user.expects(:expired?).returns(false)
221
224
  provider.user.expects(:password=).with('plaintextbad')
222
225
 
223
226
  provider.password = "plaintextbad"
@@ -259,10 +262,7 @@ describe Puppet::Type.type(:user).provider(:windows_adsi), :if => Puppet::Util::
259
262
  connection.expects(:Put).with('UserFlags', true)
260
263
  connection.expects(:SetInfo).raises( WIN32OLERuntimeError.new("(in OLE method `SetInfo': )\n OLE error code:8007089A in Active Directory\n The specified username is invalid.\r\n\n HRESULT error code:0x80020009\n Exception occurred."))
261
264
 
262
- expect{ provider.create }.to raise_error(
263
- Puppet::Error,
264
- /not able to create\/delete domain users/
265
- )
265
+ expect{ provider.create }.to raise_error(Puppet::Error)
266
266
  end
267
267
  end
268
268
 
@@ -767,13 +767,13 @@ describe 'Puppet Pal' do
767
767
  [ signature.runnable_with?('string_param' => 'foo', 'int_param' => 10),
768
768
  signature.runnable_with?('anything_goes' => 'foo'),
769
769
  signature.task_hash['name'],
770
- signature.task_hash['parameters']['string_param']['description'],
771
- signature.task.description,
772
- signature.task.parameters['int_param']['type'],
770
+ signature.task_hash['metadata']['parameters']['string_param']['description'],
771
+ signature.task_hash['metadata']['description'],
772
+ signature.task_hash['metadata']['parameters']['int_param']['type'],
773
773
  ]
774
774
  end
775
775
  end
776
- expect(result).to eq([true, false, 'b::atask', 'A string parameter', 'test task b::atask', Puppet::Pops::Types::PIntegerType::DEFAULT])
776
+ expect(result).to eq([true, false, 'b::atask', 'A string parameter', 'test task b::atask', 'Integer'])
777
777
  end
778
778
 
779
779
  it '"TaskSignature#runnable_with?" calls a given lambda if there is an error' do
@@ -802,7 +802,7 @@ describe 'Puppet Pal' do
802
802
  signature.task_hash
803
803
  end
804
804
  end
805
- expect(result['input_method']).to be_nil
805
+ expect(result['metadata']['input_method']).to be_nil
806
806
  end
807
807
 
808
808
  it 'task input_method is parsed from task metadata' do
@@ -812,7 +812,7 @@ describe 'Puppet Pal' do
812
812
  signature.task_hash
813
813
  end
814
814
  end
815
- expect(result['input_method']).to eq('stdin')
815
+ expect(result['metadata']['input_method']).to eq('stdin')
816
816
  end
817
817
 
818
818
  it '"list_tasks" returns an array with all tasks that can be loaded' do
@@ -463,6 +463,64 @@ describe 'Puppet Pal' do
463
463
  end.to raise_error(/does not represent a literal value/)
464
464
  end
465
465
 
466
+ it 'the "evaluate" method evaluates but does not evaluate lazy constructs' do
467
+ result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
468
+ ctx.with_catalog_compiler do |c|
469
+ c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: }'))
470
+ c.with_json_encoding() {|encoder| encoder.encode }
471
+ end
472
+ end
473
+ parsed = JSON.parse(result)
474
+ expect(parsed['resources']).to_not include(include('type' => 'Notify'))
475
+ end
476
+
477
+ it 'an "evaluate" followed by "compile_additions" evaluates lazy constructs' do
478
+ result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
479
+ ctx.with_catalog_compiler do |c|
480
+ c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: }'))
481
+ c.compile_additions
482
+ c.with_json_encoding() {|encoder| encoder.encode }
483
+ end
484
+ end
485
+ parsed = JSON.parse(result)
486
+ expect(parsed['resources']).to include(include('type' => 'Notify'))
487
+ end
488
+
489
+ it 'an "evaluate" followed by "compile_additions" validates the result' do
490
+ expect do
491
+ Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
492
+ ctx.with_catalog_compiler do |c|
493
+ c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: before =>"Bar[nope]"}'))
494
+ c.compile_additions
495
+ end
496
+ end
497
+ end.to raise_error(Puppet::Error, /Could not find resource 'Bar\[nope\]'/)
498
+ end
499
+
500
+ it 'an "evaluate" followed by "evaluate_additions" does not validate the result' do
501
+ result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
502
+ ctx.with_catalog_compiler do |c|
503
+ c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: before =>"Bar[nope]"}'))
504
+ c.evaluate_additions
505
+ c.with_json_encoding() {|encoder| encoder.encode }
506
+ end
507
+ end
508
+ parsed = JSON.parse(result)
509
+ expect(parsed['resources']).to include(include('type' => 'Notify'))
510
+ end
511
+
512
+ it 'an "evaluate" followed by "evaluate_additions" and "validate" validates the result' do
513
+ expect do
514
+ Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
515
+ ctx.with_catalog_compiler do |c|
516
+ c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: before =>"Bar[nope]"}'))
517
+ c.compile_additions
518
+ c.validate
519
+ end
520
+ end
521
+ end.to raise_error(Puppet::Error, /Could not find resource 'Bar\[nope\]'/)
522
+ end
523
+
466
524
  end
467
525
  end
468
526
 
@@ -48,8 +48,8 @@ describe Puppet::Resource::Catalog, "when compiling" do
48
48
  catalog.add_resource(res, res2, res3, res4, comp_res)
49
49
  catalog.write_resource_file
50
50
  expect(File.readlines(resourcefile).map(&:chomp)).to match_array([
51
- "file[#{File.expand_path('/tmp/sam')}]",
52
- "exec[#{File.expand_path('/bin/rm')} -rf /]"
51
+ "file[#{res.title.downcase}]",
52
+ "exec[#{res2.title.downcase}]"
53
53
  ])
54
54
  end
55
55
 
@@ -1082,6 +1082,18 @@ describe Puppet::Resource do
1082
1082
  newparam(:admits_to_age)
1083
1083
  newparam(:name)
1084
1084
  end
1085
+
1086
+ Puppet::Type.newtype('brown') do
1087
+ newproperty(:ensure)
1088
+ newparam(:admits_to_dying_hair)
1089
+ newparam(:admits_to_age)
1090
+ newparam(:hair_length)
1091
+ newparam(:name)
1092
+
1093
+ def self.parameters_to_include
1094
+ [:admits_to_dying_hair, :admits_to_age]
1095
+ end
1096
+ end
1085
1097
  end
1086
1098
 
1087
1099
  it "should strip all parameters and strip properties that are nil, empty or absent except for ensure" do
@@ -1124,5 +1136,24 @@ describe Puppet::Resource do
1124
1136
  })
1125
1137
  )
1126
1138
  end
1139
+
1140
+ context "when the resource type has a default set of parameters it wants to include" do
1141
+ it "should leave those parameters alone" do
1142
+ resource = Puppet::Resource.new("brown", "Esmeralda", :parameters => {
1143
+ :admits_to_age => true,
1144
+ :admits_to_dying_hair => false,
1145
+ :hair_length => 10
1146
+ })
1147
+
1148
+ pruned_resource = resource.prune_parameters
1149
+ expected_resource = Puppet::Resource.new(
1150
+ "brown",
1151
+ "Esmeralda",
1152
+ :parameters => { :admits_to_age => true, :admits_to_dying_hair => false }
1153
+ )
1154
+
1155
+ expect(pruned_resource).to eq(expected_resource)
1156
+ end
1157
+ end
1127
1158
  end
1128
1159
  end
@@ -155,6 +155,27 @@ describe Puppet::SSL::Host, if: !Puppet::Util::Platform.jruby? do
155
155
  expect{ host.validate_certificate_with_key(certificate) }.not_to raise_error
156
156
  end
157
157
 
158
+ it "should output agent-specific commands when validation fails" do
159
+ host = Puppet::SSL::Host.new("foo")
160
+ key = mock 'key', :content => "private_key"
161
+ sslcert = mock 'sslcert'
162
+ certificate = mock 'cert', {:content => sslcert, :fingerprint => 'DEADBEEF'}
163
+ host.stubs(:key).returns key
164
+ sslcert.expects(:check_private_key).with("private_key").returns false
165
+ expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, /puppet ssl clean \n/)
166
+ end
167
+
168
+ it "should output device-specific commands when validation fails" do
169
+ Puppet[:certname] = "device.example.com"
170
+ host = Puppet::SSL::Host.new("device.example.com", true)
171
+ key = mock 'key', :content => "private_key"
172
+ sslcert = mock 'sslcert'
173
+ certificate = mock 'cert', {:content => sslcert, :fingerprint => 'DEADBEEF'}
174
+ host.stubs(:key).returns key
175
+ sslcert.expects(:check_private_key).with("private_key").returns false
176
+ expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, /puppet ssl clean --target device.example.com/)
177
+ end
178
+
158
179
  describe "when initializing" do
159
180
  it "should default its name to the :certname setting" do
160
181
  Puppet[:certname] = "myname"
@@ -601,7 +622,7 @@ describe Puppet::SSL::Host, if: !Puppet::Util::Platform.jruby? do
601
622
  @host.stubs(:generate)
602
623
  @host.stubs(:sleep)
603
624
 
604
- Puppet.expects(:err)
625
+ Puppet.expects(:log_exception)
605
626
 
606
627
  @host.wait_for_cert(1)
607
628
  end
@@ -114,8 +114,8 @@ describe Puppet::SSL::Key do
114
114
  end
115
115
 
116
116
  it "should create the private key with the keylength specified in the settings" do
117
- Puppet[:keylength] = "50"
118
- OpenSSL::PKey::RSA.expects(:new).with(50).returns(@key)
117
+ Puppet[:keylength] = 513
118
+ OpenSSL::PKey::RSA.expects(:new).with(513).returns(@key)
119
119
 
120
120
  @instance.generate
121
121
  end
@@ -157,8 +157,6 @@ describe Puppet::SSL::Key do
157
157
  end
158
158
 
159
159
  it "should export the private key to text using the password" do
160
- Puppet[:keylength] = "50"
161
-
162
160
  @instance.password_file = "/path/to/pass"
163
161
  @instance.stubs(:password).returns "my password"
164
162
 
@@ -68,8 +68,7 @@ describe Puppet::Module::Task do
68
68
  task_files = %w{task1.elf task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
69
69
  Dir.expects(:glob).with(tasks_glob).returns(task_files)
70
70
  tasks = Puppet::Module::Task.tasks_in_module(mymod)
71
- Puppet::Module::Task.any_instance.stubs(:metadata).returns({'implementations' =>
72
- [{"name" => "task1.sh"}]})
71
+ Puppet::Module::Task.any_instance.stubs(:metadata).returns({'implementations' => [{"name" => "task1.sh"}]})
73
72
 
74
73
  expect(tasks.count).to eq(1)
75
74
  expect(tasks.map{|t| t.name}).to eq(%w{mymod::task1})
@@ -77,6 +76,52 @@ describe Puppet::Module::Task do
77
76
  expect(tasks.map{|t| t.files.map{ |f| f["path"] } }).to eq([["#{tasks_path}/task1.sh"]])
78
77
  end
79
78
 
79
+ it "constructs a task as expected when task metadata declares additional files" do
80
+ task_files = %w{task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
81
+ Dir.expects(:glob).with(tasks_glob).returns(task_files)
82
+ Puppet::Module::Task.expects(:find_extra_files).returns([{'name' => 'mymod/lib/file0.elf', 'path' => "/path/to/file0.elf"}])
83
+ tasks = Puppet::Module::Task.tasks_in_module(mymod)
84
+ Puppet::Module::Task.any_instance.stubs(:metadata).returns({'files' => ["mymod/lib/file0.elf"]})
85
+
86
+ expect(tasks.count).to eq(1)
87
+ expect(tasks.map{|t| t.name}).to eq(%w{mymod::task1})
88
+ expect(tasks.map{|t| t.metadata_file}).to eq(["#{tasks_path}/task1.json"])
89
+ expect(tasks.map{|t| t.files.map{ |f| f["path"] } }).to eq([["#{tasks_path}/task1.sh", "/path/to/file0.elf"]])
90
+ end
91
+
92
+ it "constructs a task as expected when a task implementation declares additional files" do
93
+ task_files = %w{task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
94
+ Dir.expects(:glob).with(tasks_glob).returns(task_files)
95
+ Puppet::Module::Task.expects(:find_extra_files).returns([{'name' => 'mymod/lib/file0.elf', 'path' => "/path/to/file0.elf"}])
96
+ tasks = Puppet::Module::Task.tasks_in_module(mymod)
97
+ Puppet::Module::Task.any_instance.stubs(:metadata).returns({'implementations' => [{"name" => "task1.sh", "files" => ["mymod/lib/file0.elf"]}]})
98
+
99
+ expect(tasks.count).to eq(1)
100
+ expect(tasks.map{|t| t.name}).to eq(%w{mymod::task1})
101
+ expect(tasks.map{|t| t.metadata_file}).to eq(["#{tasks_path}/task1.json"])
102
+ expect(tasks.map{|t| t.files.map{ |f| f["path"] } }).to eq([["#{tasks_path}/task1.sh", "/path/to/file0.elf"]])
103
+ end
104
+
105
+ it "constructs a task as expected when task metadata and a task implementation both declare additional files" do
106
+ task_files = %w{task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
107
+ Dir.expects(:glob).with(tasks_glob).returns(task_files)
108
+ Puppet::Module::Task.expects(:find_extra_files).returns([
109
+ {'name' => 'mymod/lib/file0.elf', 'path' => "/path/to/file0.elf"},
110
+ {'name' => 'yourmod/files/file1.txt', 'path' => "/other/path/to/file1.txt"}
111
+ ])
112
+ tasks = Puppet::Module::Task.tasks_in_module(mymod)
113
+ Puppet::Module::Task.any_instance.stubs(:metadata).returns({'implementations' => [{"name" => "task1.sh", "files" => ["mymod/lib/file0.elf"]}]})
114
+
115
+ expect(tasks.count).to eq(1)
116
+ expect(tasks.map{|t| t.name}).to eq(%w{mymod::task1})
117
+ expect(tasks.map{|t| t.metadata_file}).to eq(["#{tasks_path}/task1.json"])
118
+ expect(tasks.map{|t| t.files.map{ |f| f["path"] } }).to eq([[
119
+ "#{tasks_path}/task1.sh",
120
+ "/path/to/file0.elf",
121
+ "/other/path/to/file1.txt"
122
+ ]])
123
+ end
124
+
80
125
  it "constructs a task as expected when a task has files" do
81
126
  og_files = %w{task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
82
127
  Dir.expects(:glob).with(tasks_glob).returns(og_files)
@@ -136,7 +181,7 @@ describe Puppet::Module::Task do
136
181
  it "loads metadata for a task" do
137
182
  metadata = {'desciption': 'some info'}
138
183
  Dir.expects(:glob).with(tasks_glob).returns(%w{task1.exe task1.json})
139
- Puppet::Module::Task.any_instance.stubs(:read_metadata).returns(metadata)
184
+ Puppet::Module::Task.stubs(:read_metadata).returns(metadata)
140
185
 
141
186
  tasks = Puppet::Module::Task.tasks_in_module(mymod)
142
187
 
@@ -180,7 +225,7 @@ describe Puppet::Module::Task do
180
225
  metadata = {'desciption' => 'some info',
181
226
  'implementations' => [ {"name" => "task1.exe"}, ] }
182
227
  Dir.expects(:glob).with(tasks_glob).returns(%w{task1.exe task1.sh task1.json})
183
- Puppet::Module::Task.any_instance.stubs(:read_metadata).returns(metadata)
228
+ Puppet::Module::Task.stubs(:read_metadata).returns(metadata)
184
229
 
185
230
  tasks = Puppet::Module::Task.tasks_in_module(mymod)
186
231
 
@@ -192,7 +237,7 @@ describe Puppet::Module::Task do
192
237
  metadata = {'desciption' => 'some info',
193
238
  'implementations' => [ {"name" => "task2.sh"}, ] }
194
239
  Dir.expects(:glob).with(tasks_glob).returns(%w{task1.exe task2.sh task1.json})
195
- Puppet::Module::Task.any_instance.stubs(:read_metadata).returns(metadata)
240
+ Puppet::Module::Task.stubs(:read_metadata).returns(metadata)
196
241
 
197
242
  tasks = Puppet::Module::Task.tasks_in_module(mymod)
198
243
 
@@ -174,11 +174,22 @@ describe Puppet::Transaction::EventManager do
174
174
  expect(@transaction.resource_status(@resource)).to be_restarted
175
175
  end
176
176
 
177
+ it "should have an event on the resource status" do
178
+ @manager.expects(:queued_events).with(@resource).yields(:callback1, [@event])
179
+
180
+ @resource.stubs(:callback1)
181
+
182
+ @manager.process_events(@resource) #x
183
+
184
+ expect(@transaction.resource_status(@resource).events.length).to eq(1)
185
+ end
186
+
177
187
  it "should queue a 'restarted' event generated by the resource" do
178
188
  @manager.expects(:queued_events).with(@resource).yields(:callback1, [@event])
179
189
 
180
190
  @resource.stubs(:callback1)
181
191
 
192
+ @resource.expects(:event).with(:message => "Triggered 'callback1' from 1 event", :status => 'success', :name => 'callback1')
182
193
  @resource.expects(:event).with(:name => :restarted, :status => "success").returns "myevent"
183
194
  @manager.expects(:queue_events).with(@resource, ["myevent"])
184
195
 
@@ -295,7 +306,7 @@ describe Puppet::Transaction::EventManager do
295
306
  it "should record a failed event on the resource status" do
296
307
  @manager.process_events(@resource)
297
308
 
298
- expect(@transaction.resource_status(@resource).events.length).to eq(1)
309
+ expect(@transaction.resource_status(@resource).events.length).to eq(2)
299
310
  expect(@transaction.resource_status(@resource).events[0].status).to eq('failure')
300
311
  end
301
312