puppet 6.24.0 → 6.25.0

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.

Files changed (279) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +12 -12
  4. data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
  5. data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
  6. data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
  7. data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
  8. data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
  9. data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
  10. data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
  11. data/{ext → examples}/nagios/check_puppet.rb +2 -2
  12. data/ext/README.md +13 -0
  13. data/lib/puppet/application/agent.rb +4 -0
  14. data/lib/puppet/application/apply.rb +20 -2
  15. data/lib/puppet/application/resource.rb +15 -13
  16. data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
  17. data/lib/puppet/configurer.rb +85 -57
  18. data/lib/puppet/confine/variable.rb +1 -1
  19. data/lib/puppet/defaults.rb +36 -30
  20. data/lib/puppet/environments.rb +66 -26
  21. data/lib/puppet/face/facts.rb +1 -1
  22. data/lib/puppet/facter_impl.rb +96 -0
  23. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  24. data/lib/puppet/file_serving/configuration.rb +3 -0
  25. data/lib/puppet/file_serving/mount/file.rb +4 -4
  26. data/lib/puppet/file_serving/mount/scripts.rb +24 -0
  27. data/lib/puppet/file_system/file_impl.rb +3 -1
  28. data/lib/puppet/forge.rb +1 -1
  29. data/lib/puppet/functions/find_template.rb +2 -2
  30. data/lib/puppet/http/service/compiler.rb +6 -1
  31. data/lib/puppet/indirector/catalog/compiler.rb +24 -6
  32. data/lib/puppet/indirector/catalog/rest.rb +1 -0
  33. data/lib/puppet/indirector/facts/facter.rb +6 -6
  34. data/lib/puppet/indirector/indirection.rb +1 -1
  35. data/lib/puppet/indirector/terminus.rb +4 -0
  36. data/lib/puppet/module/plan.rb +0 -1
  37. data/lib/puppet/module/task.rb +1 -1
  38. data/lib/puppet/module.rb +1 -0
  39. data/lib/puppet/module_tool/applications/installer.rb +8 -4
  40. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  41. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  42. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  43. data/lib/puppet/node/environment.rb +10 -11
  44. data/lib/puppet/pal/pal_impl.rb +1 -1
  45. data/lib/puppet/parser/scope.rb +1 -0
  46. data/lib/puppet/parser/templatewrapper.rb +1 -0
  47. data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
  48. data/lib/puppet/pops/model/ast.rb +1 -0
  49. data/lib/puppet/pops/model/factory.rb +2 -1
  50. data/lib/puppet/pops/parser/eparser.rb +201 -201
  51. data/lib/puppet/pops/parser/lexer2.rb +92 -91
  52. data/lib/puppet/pops/parser/slurp_support.rb +1 -0
  53. data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
  54. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  55. data/lib/puppet/pops/types/type_formatter.rb +4 -3
  56. data/lib/puppet/pops/types/types.rb +1 -1
  57. data/lib/puppet/provider/aix_object.rb +1 -1
  58. data/lib/puppet/provider/group/groupadd.rb +5 -2
  59. data/lib/puppet/provider/package/pkg.rb +19 -2
  60. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  61. data/lib/puppet/provider/package/yum.rb +1 -1
  62. data/lib/puppet/provider/service/base.rb +1 -1
  63. data/lib/puppet/provider/service/init.rb +5 -5
  64. data/lib/puppet/provider/service/launchd.rb +2 -2
  65. data/lib/puppet/provider/service/redhat.rb +1 -1
  66. data/lib/puppet/provider/service/smf.rb +3 -3
  67. data/lib/puppet/provider/service/systemd.rb +2 -2
  68. data/lib/puppet/provider/service/upstart.rb +5 -5
  69. data/lib/puppet/provider/user/aix.rb +44 -1
  70. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  71. data/lib/puppet/provider/user/useradd.rb +72 -16
  72. data/lib/puppet/provider.rb +1 -1
  73. data/lib/puppet/reference/providers.rb +2 -2
  74. data/lib/puppet/resource/type_collection.rb +1 -0
  75. data/lib/puppet/runtime.rb +11 -1
  76. data/lib/puppet/settings.rb +2 -2
  77. data/lib/puppet/test/test_helper.rb +4 -1
  78. data/lib/puppet/transaction/persistence.rb +11 -1
  79. data/lib/puppet/transaction/report.rb +15 -1
  80. data/lib/puppet/type/exec.rb +19 -2
  81. data/lib/puppet/type/file.rb +6 -6
  82. data/lib/puppet/type/filebucket.rb +3 -3
  83. data/lib/puppet/type/group.rb +0 -1
  84. data/lib/puppet/type/resources.rb +1 -1
  85. data/lib/puppet/type/service.rb +8 -3
  86. data/lib/puppet/type/user.rb +0 -1
  87. data/lib/puppet/type.rb +1 -1
  88. data/lib/puppet/util/command_line.rb +1 -1
  89. data/lib/puppet/util/filetype.rb +2 -2
  90. data/lib/puppet/util/json.rb +3 -0
  91. data/lib/puppet/util/log.rb +1 -2
  92. data/lib/puppet/util/logging.rb +1 -25
  93. data/lib/puppet/util/pidlock.rb +1 -1
  94. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  95. data/lib/puppet/util/suidmanager.rb +1 -2
  96. data/lib/puppet/util/tagging.rb +1 -0
  97. data/lib/puppet/util/windows/user.rb +0 -2
  98. data/lib/puppet/util.rb +4 -3
  99. data/lib/puppet/version.rb +1 -1
  100. data/lib/puppet.rb +2 -6
  101. data/locales/puppet.pot +246 -230
  102. data/man/man5/puppet.conf.5 +33 -25
  103. data/man/man8/puppet-agent.8 +4 -1
  104. data/man/man8/puppet-apply.8 +1 -1
  105. data/man/man8/puppet-catalog.8 +1 -1
  106. data/man/man8/puppet-config.8 +1 -1
  107. data/man/man8/puppet-describe.8 +1 -1
  108. data/man/man8/puppet-device.8 +1 -1
  109. data/man/man8/puppet-doc.8 +1 -1
  110. data/man/man8/puppet-epp.8 +1 -1
  111. data/man/man8/puppet-facts.8 +1 -1
  112. data/man/man8/puppet-filebucket.8 +1 -1
  113. data/man/man8/puppet-generate.8 +1 -1
  114. data/man/man8/puppet-help.8 +1 -1
  115. data/man/man8/puppet-key.8 +1 -1
  116. data/man/man8/puppet-lookup.8 +1 -1
  117. data/man/man8/puppet-man.8 +1 -1
  118. data/man/man8/puppet-module.8 +3 -3
  119. data/man/man8/puppet-node.8 +1 -1
  120. data/man/man8/puppet-parser.8 +1 -1
  121. data/man/man8/puppet-plugin.8 +1 -1
  122. data/man/man8/puppet-report.8 +1 -1
  123. data/man/man8/puppet-resource.8 +1 -1
  124. data/man/man8/puppet-script.8 +1 -1
  125. data/man/man8/puppet-ssl.8 +1 -1
  126. data/man/man8/puppet-status.8 +1 -1
  127. data/man/man8/puppet.8 +2 -2
  128. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
  129. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
  130. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
  131. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
  132. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
  133. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
  134. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
  135. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
  136. data/spec/integration/application/agent_spec.rb +113 -37
  137. data/spec/integration/application/filebucket_spec.rb +5 -0
  138. data/spec/integration/configurer_spec.rb +18 -2
  139. data/spec/integration/indirector/facts/facter_spec.rb +3 -3
  140. data/spec/integration/l10n/compiler_spec.rb +37 -0
  141. data/spec/integration/transaction/report_spec.rb +1 -1
  142. data/spec/integration/type/file_spec.rb +2 -2
  143. data/spec/integration/type/package_spec.rb +6 -6
  144. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  145. data/spec/integration/util/windows/process_spec.rb +1 -9
  146. data/spec/lib/puppet_spec/modules.rb +13 -2
  147. data/spec/lib/puppet_spec/puppetserver.rb +15 -0
  148. data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
  149. data/spec/shared_contexts/l10n.rb +27 -0
  150. data/spec/spec_helper.rb +1 -10
  151. data/spec/unit/application/apply_spec.rb +76 -56
  152. data/spec/unit/application/resource_spec.rb +29 -0
  153. data/spec/unit/configurer_spec.rb +171 -56
  154. data/spec/unit/defaults_spec.rb +1 -0
  155. data/spec/unit/environments_spec.rb +150 -1
  156. data/spec/unit/facter_impl_spec.rb +31 -0
  157. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  158. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
  159. data/spec/unit/file_serving/configuration_spec.rb +14 -4
  160. data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
  161. data/spec/unit/file_system_spec.rb +7 -0
  162. data/spec/unit/functions/logging_spec.rb +1 -0
  163. data/spec/unit/functions/lookup_spec.rb +64 -0
  164. data/spec/unit/http/service/compiler_spec.rb +8 -0
  165. data/spec/unit/indirector/catalog/compiler_spec.rb +87 -0
  166. data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
  167. data/spec/unit/indirector/indirection_spec.rb +10 -3
  168. data/spec/unit/interface/action_spec.rb +0 -9
  169. data/spec/unit/module_spec.rb +15 -1
  170. data/spec/unit/module_tool/applications/installer_spec.rb +39 -12
  171. data/spec/unit/network/authstore_spec.rb +0 -15
  172. data/spec/unit/network/formats_spec.rb +6 -0
  173. data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
  174. data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
  175. data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
  176. data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
  177. data/spec/unit/provider/package/gem_spec.rb +1 -1
  178. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  179. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  180. data/spec/unit/provider/package/pip_spec.rb +1 -1
  181. data/spec/unit/provider/package/pkg_spec.rb +29 -4
  182. data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
  183. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  184. data/spec/unit/provider/service/launchd_spec.rb +11 -0
  185. data/spec/unit/provider/service/systemd_spec.rb +1 -1
  186. data/spec/unit/provider/user/aix_spec.rb +100 -0
  187. data/spec/unit/provider/user/directoryservice_spec.rb +1 -1
  188. data/spec/unit/provider/user/useradd_spec.rb +43 -2
  189. data/spec/unit/provider_spec.rb +4 -4
  190. data/spec/unit/puppet_spec.rb +12 -4
  191. data/spec/unit/ssl/certificate_request_spec.rb +8 -14
  192. data/spec/unit/type/service_spec.rb +27 -0
  193. data/spec/unit/type_spec.rb +2 -2
  194. data/spec/unit/util/logging_spec.rb +2 -0
  195. data/tasks/parallel.rake +3 -3
  196. metadata +37 -94
  197. data/ext/README.environment +0 -8
  198. data/ext/dbfix.sql +0 -132
  199. data/ext/debian/README.Debian +0 -8
  200. data/ext/debian/README.source +0 -2
  201. data/ext/debian/TODO.Debian +0 -1
  202. data/ext/debian/changelog.erb +0 -1122
  203. data/ext/debian/compat +0 -1
  204. data/ext/debian/control +0 -144
  205. data/ext/debian/copyright +0 -339
  206. data/ext/debian/docs +0 -1
  207. data/ext/debian/fileserver.conf +0 -41
  208. data/ext/debian/puppet-common.dirs +0 -13
  209. data/ext/debian/puppet-common.install +0 -3
  210. data/ext/debian/puppet-common.lintian-overrides +0 -5
  211. data/ext/debian/puppet-common.manpages +0 -28
  212. data/ext/debian/puppet-common.postinst +0 -35
  213. data/ext/debian/puppet-common.postrm +0 -33
  214. data/ext/debian/puppet-el.dirs +0 -1
  215. data/ext/debian/puppet-el.emacsen-install +0 -25
  216. data/ext/debian/puppet-el.emacsen-remove +0 -11
  217. data/ext/debian/puppet-el.emacsen-startup +0 -9
  218. data/ext/debian/puppet-el.install +0 -1
  219. data/ext/debian/puppet-testsuite.install +0 -2
  220. data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
  221. data/ext/debian/puppet.lintian-overrides +0 -3
  222. data/ext/debian/puppet.logrotate +0 -20
  223. data/ext/debian/puppet.postinst +0 -20
  224. data/ext/debian/puppet.postrm +0 -20
  225. data/ext/debian/puppet.preinst +0 -20
  226. data/ext/debian/puppetmaster-common.install +0 -2
  227. data/ext/debian/puppetmaster-common.manpages +0 -2
  228. data/ext/debian/puppetmaster-common.postinst +0 -6
  229. data/ext/debian/puppetmaster-passenger.dirs +0 -4
  230. data/ext/debian/puppetmaster-passenger.postinst +0 -162
  231. data/ext/debian/puppetmaster-passenger.postrm +0 -61
  232. data/ext/debian/puppetmaster.README.debian +0 -17
  233. data/ext/debian/puppetmaster.default +0 -14
  234. data/ext/debian/puppetmaster.init +0 -137
  235. data/ext/debian/puppetmaster.lintian-overrides +0 -3
  236. data/ext/debian/puppetmaster.postinst +0 -20
  237. data/ext/debian/puppetmaster.postrm +0 -5
  238. data/ext/debian/puppetmaster.preinst +0 -22
  239. data/ext/debian/rules +0 -132
  240. data/ext/debian/source/format +0 -1
  241. data/ext/debian/source/options +0 -1
  242. data/ext/debian/vim-puppet.README.Debian +0 -13
  243. data/ext/debian/vim-puppet.dirs +0 -5
  244. data/ext/debian/vim-puppet.yaml +0 -7
  245. data/ext/debian/watch +0 -2
  246. data/ext/freebsd/puppetd +0 -26
  247. data/ext/freebsd/puppetmasterd +0 -26
  248. data/ext/gentoo/conf.d/puppet +0 -5
  249. data/ext/gentoo/conf.d/puppetmaster +0 -12
  250. data/ext/gentoo/init.d/puppet +0 -38
  251. data/ext/gentoo/init.d/puppetmaster +0 -51
  252. data/ext/gentoo/puppet/fileserver.conf +0 -41
  253. data/ext/ips/puppet-agent +0 -44
  254. data/ext/ips/puppet-master +0 -44
  255. data/ext/ips/puppet.p5m.erb +0 -12
  256. data/ext/ips/puppetagent.xml +0 -42
  257. data/ext/ips/puppetmaster.xml +0 -42
  258. data/ext/ips/rules +0 -19
  259. data/ext/ips/transforms +0 -34
  260. data/ext/ldap/puppet.schema +0 -24
  261. data/ext/logcheck/puppet +0 -23
  262. data/ext/osx/file_mapping.yaml +0 -33
  263. data/ext/osx/postflight.erb +0 -109
  264. data/ext/osx/preflight.erb +0 -52
  265. data/ext/osx/prototype.plist.erb +0 -38
  266. data/ext/redhat/fileserver.conf +0 -41
  267. data/ext/redhat/logrotate +0 -21
  268. data/ext/redhat/puppet.spec.erb +0 -842
  269. data/ext/redhat/server.init +0 -128
  270. data/ext/redhat/server.sysconfig +0 -13
  271. data/ext/solaris/pkginfo +0 -6
  272. data/ext/solaris/smf/puppetd.xml +0 -77
  273. data/ext/solaris/smf/puppetmasterd.xml +0 -77
  274. data/ext/solaris/smf/svc-puppetd +0 -71
  275. data/ext/solaris/smf/svc-puppetmasterd +0 -67
  276. data/ext/suse/puppet.spec +0 -310
  277. data/ext/suse/server.init +0 -173
  278. data/ext/yaml_nodes.rb +0 -105
  279. data/spec/unit/indirector/store_configs_spec.rb +0 -7
@@ -7,6 +7,9 @@ describe Puppet::Configurer do
7
7
  Puppet[:report] = true
8
8
 
9
9
  catalog.add_resource(resource)
10
+ allow_any_instance_of(described_class).to(
11
+ receive(:valid_server_environment?).and_return(true)
12
+ )
10
13
  end
11
14
 
12
15
  let(:node_name) { Puppet[:node_name_value] }
@@ -78,10 +81,10 @@ describe Puppet::Configurer do
78
81
  configurer.run(:pluginsync => false)
79
82
  end
80
83
 
81
- it "should carry on when it can't fetch its node definition" do
82
- error = Net::HTTPError.new(400, 'dummy server communication error')
83
- expect(Puppet::Node.indirection).to receive(:find).and_raise(error)
84
- expect(configurer.run).to eq(0)
84
+ it "does not download plugins when specified environment is not vaild on server" do
85
+ expect(configurer).to receive(:valid_server_environment?).and_return(false)
86
+ expect(configurer).not_to receive(:download_plugins)
87
+ configurer.run(:pluginsync => true)
85
88
  end
86
89
 
87
90
  it "fails the run if pluginsync fails when usecacheonfailure is false" do
@@ -125,7 +128,6 @@ describe Puppet::Configurer do
125
128
  it "applies a cached catalog when it can't connect to the master" do
126
129
  error = Errno::ECONNREFUSED.new('Connection refused - connect(2)')
127
130
 
128
- expect(Puppet::Node.indirection).to receive(:find).and_raise(error)
129
131
  expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_cache => true)).and_raise(error)
130
132
  expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(:ignore_terminus => true)).and_return(catalog)
131
133
 
@@ -461,7 +463,7 @@ describe Puppet::Configurer do
461
463
  it "should save the report if reporting is enabled" do
462
464
  Puppet.settings[:report] = true
463
465
 
464
- expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, instance_of(Hash))
466
+ expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, instance_of(Hash)).twice
465
467
  configurer.send_report(report)
466
468
  end
467
469
 
@@ -489,12 +491,22 @@ describe Puppet::Configurer do
489
491
  it "should log but not fail if saving the report fails" do
490
492
  Puppet.settings[:report] = true
491
493
 
492
- expect(Puppet::Transaction::Report.indirection).to receive(:save).and_raise("whatever")
494
+ expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_cache: true)).and_raise("whatever")
495
+ expect(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_terminus: true))
493
496
 
494
497
  configurer.send_report(report)
495
498
 
496
499
  expect(@logs).to include(an_object_having_attributes(level: :err, message: 'Could not send report: whatever'))
497
500
  end
501
+
502
+ it "should save the cached report if fails to send the report" do
503
+ allow(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_terminus: true)).and_call_original
504
+ allow(Puppet::Transaction::Report.indirection).to receive(:save).with(report, nil, hash_including(ignore_cache: true)).and_raise("whatever")
505
+
506
+ expect(File).to_not be_exist(Puppet[:lastrunfile])
507
+ configurer.send_report(report)
508
+ expect(File.read(Puppet[:lastrunfile])).to match(/puppet: #{Puppet::PUPPETVERSION}/)
509
+ end
498
510
  end
499
511
 
500
512
  describe "when saving the summary report file" do
@@ -553,24 +565,6 @@ describe Puppet::Configurer do
553
565
  end
554
566
  end
555
567
 
556
- describe "when requesting a node" do
557
- it "uses the transaction uuid in the request" do
558
- expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(transaction_uuid: anything)).twice
559
- configurer.run
560
- end
561
-
562
- it "sends an explicitly configured environment request" do
563
- expect(Puppet.settings).to receive(:set_by_config?).with(:environment).and_return(true)
564
- expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: Puppet[:environment])).twice
565
- configurer.run
566
- end
567
-
568
- it "does not send a configured_environment when using the default" do
569
- expect(Puppet::Node.indirection).to receive(:find).with(anything, hash_including(configured_environment: nil)).twice
570
- configurer.run
571
- end
572
- end
573
-
574
568
  def expects_pluginsync
575
569
  metadata = "[{\"path\":\"/etc/puppetlabs/code\",\"relative_path\":\".\",\"links\":\"follow\",\"owner\":0,\"group\":0,\"mode\":420,\"checksum\":{\"type\":\"ctime\",\"value\":\"{ctime}2020-07-10 14:00:00 -0700\"},\"type\":\"directory\",\"destination\":null}]"
576
570
  stub_request(:get, %r{/puppet/v3/file_metadatas/(plugins|locales)}).to_return(status: 200, body: metadata, headers: {'Content-Type' => 'application/json'})
@@ -581,7 +575,7 @@ describe Puppet::Configurer do
581
575
  end
582
576
 
583
577
  def expects_new_catalog_only(catalog)
584
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
578
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
585
579
  expect(Puppet::Resource::Catalog.indirection).not_to receive(:find).with(anything, hash_including(ignore_terminus: true))
586
580
  end
587
581
 
@@ -598,7 +592,7 @@ describe Puppet::Configurer do
598
592
  def expects_fallback_to_new_catalog(catalog)
599
593
  expects_pluginsync
600
594
  expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_terminus: true)).and_return(nil)
601
- expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true)).and_return(catalog)
595
+ expect(Puppet::Resource::Catalog.indirection).to receive(:find).with(anything, hash_including(ignore_cache: true, check_environment: true)).and_return(catalog)
602
596
  end
603
597
 
604
598
  def expects_neither_new_or_cached_catalog
@@ -622,21 +616,13 @@ describe Puppet::Configurer do
622
616
  configurer.run
623
617
  end
624
618
 
625
- it "should not make a node request or pluginsync when a cached catalog is successfully retrieved" do
626
- expect(Puppet::Node.indirection).not_to receive(:find)
619
+ it "should not pluginsync when a cached catalog is successfully retrieved" do
627
620
  expects_cached_catalog_only(catalog)
628
621
  expect(configurer).not_to receive(:download_plugins)
629
622
 
630
623
  configurer.run
631
624
  end
632
625
 
633
- it "should make a node request and pluginsync when a cached catalog cannot be retrieved" do
634
- expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
635
- expects_fallback_to_new_catalog(catalog)
636
-
637
- configurer.run
638
- end
639
-
640
626
  it "should set its cached_catalog_status to 'explicitly_requested'" do
641
627
  expects_cached_catalog_only(catalog)
642
628
 
@@ -668,7 +654,6 @@ describe Puppet::Configurer do
668
654
  end
669
655
 
670
656
  it "should not attempt to retrieve a cached catalog again if the first attempt failed" do
671
- expect(Puppet::Node.indirection).to receive(:find).and_return(nil)
672
657
  expects_neither_new_or_cached_catalog
673
658
  expects_pluginsync
674
659
 
@@ -724,16 +709,6 @@ describe Puppet::Configurer do
724
709
  Puppet.settings[:strict_environment_mode] = true
725
710
  end
726
711
 
727
- it "should not make a node request" do
728
- stub_request(:get, %r{/puppet/v3/file_metadatas?/plugins}).to_return(:status => 404)
729
- stub_request(:get, %r{/puppet/v3/file_metadatas?/pluginfacts}).to_return(:status => 404)
730
- expects_new_catalog_only(catalog)
731
-
732
- expect(Puppet::Node.indirection).not_to receive(:find)
733
-
734
- configurer.run
735
- end
736
-
737
712
  it "should return nil when the catalog's environment doesn't match the agent specified environment" do
738
713
  Puppet[:environment] = 'second_env'
739
714
  configurer = Puppet::Configurer.new
@@ -947,9 +922,23 @@ describe Puppet::Configurer do
947
922
  expect(Puppet::Resource::Catalog.indirection).to receive(:find).and_return(apple, banana, banana)
948
923
 
949
924
  allow(Puppet).to receive(:notice)
925
+ allow(Puppet).to receive(:push_context)
950
926
  expect(Puppet).to receive(:notice).with("Local environment: 'production' doesn't match server specified environment 'apple', restarting agent run with environment 'apple'")
951
927
  expect(Puppet).to receive(:notice).with("Local environment: 'apple' doesn't match server specified environment 'banana', restarting agent run with environment 'banana'")
952
928
 
929
+ expect(Puppet).to receive(:push_context).with(
930
+ hash_including(current_environment: an_object_having_attributes(name: :production)),
931
+ 'Local node environment production for configurer transaction'
932
+ )
933
+ expect(Puppet).to receive(:push_context).with(
934
+ hash_including(current_environment: an_object_having_attributes(name: :apple)),
935
+ 'Local node environment apple for configurer transaction'
936
+ )
937
+ expect(Puppet).to receive(:push_context).with(
938
+ hash_including(current_environment: an_object_having_attributes(name: :banana)),
939
+ 'Local node environment banana for configurer transaction'
940
+ )
941
+
953
942
  configurer.run
954
943
  end
955
944
 
@@ -1107,20 +1096,146 @@ describe Puppet::Configurer do
1107
1096
  expect(configurer.run(options)).to eq(0)
1108
1097
  expect(options[:report].server_used).to be_nil
1109
1098
  end
1099
+ end
1110
1100
 
1111
- it "should not make multiple node requests when the server is found" do
1112
- Puppet.settings[:server_list] = ["myserver:123"]
1101
+ describe "when selecting an environment" do
1102
+ include PuppetSpec::Files
1103
+ include PuppetSpec::Settings
1113
1104
 
1114
- Puppet::Node.indirection.terminus_class = :rest
1115
- Puppet::Resource::Catalog.indirection.terminus_class = :rest
1105
+ describe "when the last used environment is available" do
1106
+ let(:last_server_specified_environment) { 'development' }
1116
1107
 
1117
- stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 200)
1118
- stub_request(:post, %r{https://myserver:123/puppet/v3/catalog}).to_return(status: 200)
1119
- node_request = stub_request(:get, %r{https://myserver:123/puppet/v3/node/}).to_return(status: 200)
1108
+ before do
1109
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1110
+ ---
1111
+ version:
1112
+ config: 1624882680
1113
+ puppet: 6.24.0
1114
+ application:
1115
+ initial_environment: #{Puppet[:environment]}
1116
+ converged_environment: #{last_server_specified_environment}
1117
+ run_mode: agent
1118
+ SUMMARY
1119
+ end
1120
1120
 
1121
- configurer.run
1121
+ it "prefers the environment set via cli" do
1122
+ Puppet.settings.handlearg('--environment', 'usethis')
1123
+ configurer.run
1124
+
1125
+ expect(configurer.environment).to eq('usethis')
1126
+ end
1127
+
1128
+ it "prefers the environment set via config" do
1129
+ FileUtils.mkdir_p(Puppet[:confdir])
1130
+ set_puppet_conf(Puppet[:confdir], <<~CONF)
1131
+ [main]
1132
+ environment = usethis
1133
+ CONF
1134
+
1135
+ Puppet.initialize_settings
1136
+ configurer.run
1137
+
1138
+ expect(configurer.environment).to eq('usethis')
1139
+ end
1140
+
1141
+ it "uses environment from Puppet[:environment] if given a catalog" do
1142
+ configurer.run(catalog: catalog)
1143
+
1144
+ expect(configurer.environment).to eq(Puppet[:environment])
1145
+ end
1146
+
1147
+ it "uses environment from Puppet[:environment] if use_cached_catalog = true" do
1148
+ Puppet[:use_cached_catalog] = true
1149
+ expects_cached_catalog_only(catalog)
1150
+ configurer.run
1151
+
1152
+ expect(configurer.environment).to eq(Puppet[:environment])
1153
+ end
1154
+
1155
+ describe "when the environment is not set via CLI" do
1156
+ it "uses the environment found in lastrunfile if the key exists" do
1157
+ configurer.run
1158
+
1159
+ expect(configurer.environment).to eq(last_server_specified_environment)
1160
+ end
1122
1161
 
1123
- expect(node_request).to have_been_requested.once
1162
+ it "pushes the converged environment found in lastrunfile over the existing context" do
1163
+ initial_env = Puppet::Node::Environment.remote('production')
1164
+ Puppet.push_context(
1165
+ current_environment: initial_env,
1166
+ loaders: Puppet::Pops::Loaders.new(initial_env, true))
1167
+
1168
+ expect(Puppet).to receive(:push_context).with(
1169
+ hash_including(:current_environment, :loaders),
1170
+ "Local node environment #{last_server_specified_environment} for configurer transaction"
1171
+ ).once.and_call_original
1172
+
1173
+ configurer.run
1174
+ end
1175
+
1176
+ it "uses environment from Puppet[:environment] if strict_environment_mode is set" do
1177
+ Puppet[:strict_environment_mode] = true
1178
+ configurer.run
1179
+
1180
+ expect(configurer.environment).to eq(Puppet[:environment])
1181
+ end
1182
+
1183
+ it "uses environment from Puppet[:environment] if initial_environment is the same as converged_environment" do
1184
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1185
+ ---
1186
+ version:
1187
+ config: 1624882680
1188
+ puppet: 6.24.0
1189
+ application:
1190
+ initial_environment: development
1191
+ converged_environment: development
1192
+ run_mode: agent
1193
+ SUMMARY
1194
+ configurer.run
1195
+
1196
+ expect(configurer.environment).to eq(Puppet[:environment])
1197
+ end
1198
+
1199
+ it "uses environment from Puppet[:environment] if the run mode doesn't match" do
1200
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1201
+ ---
1202
+ version:
1203
+ config: 1624882680
1204
+ puppet: 6.24.0
1205
+ application:
1206
+ initial_environment: #{Puppet[:environment]}
1207
+ converged_environment: #{last_server_specified_environment}
1208
+ run_mode: user
1209
+ SUMMARY
1210
+ configurer.run
1211
+
1212
+ expect(configurer.environment).to eq(Puppet[:environment])
1213
+ end
1214
+
1215
+ it "uses environment from Puppet[:environment] if lastrunfile is invalid YAML" do
1216
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', <<~SUMMARY)
1217
+ Key: 'this is my very very very ' +
1218
+ 'long string'
1219
+ SUMMARY
1220
+ configurer.run
1221
+
1222
+ expect(configurer.environment).to eq(Puppet[:environment])
1223
+ end
1224
+
1225
+ it "uses environment from Puppet[:environment] if lastrunfile exists but is empty" do
1226
+ Puppet[:lastrunfile] = file_containing('last_run_summary.yaml', '')
1227
+ configurer.run
1228
+
1229
+ expect(configurer.environment).to eq(Puppet[:environment])
1230
+ end
1231
+
1232
+ it "uses environment from Puppet[:environment] if the last used one cannot be found" do
1233
+ Puppet[:lastrunfile] = tmpfile('last_run_summary.yaml')
1234
+ configurer.run
1235
+
1236
+ expect(configurer.environment).to eq(Puppet[:environment])
1237
+ end
1238
+ end
1124
1239
  end
1125
1240
  end
1126
1241
  end
@@ -200,6 +200,7 @@ describe "Defaults" do
200
200
 
201
201
  Object.send(:remove_const, :Facter)
202
202
  facter = double('facter')
203
+ allow(facter).to receive(:on_message)
203
204
  allow(facter).to receive(:value).with('facterversion').and_return('3.11.4')
204
205
  Object.const_set(:Facter, facter)
205
206
 
@@ -139,6 +139,14 @@ describe Puppet::Environments do
139
139
  end
140
140
  end
141
141
 
142
+ it "implements guard and unguard" do
143
+ loader_from(:filesystem => [directory_tree],
144
+ :directory => directory_tree.children.first) do |loader|
145
+ expect(loader.guard('env1')).to be_nil
146
+ expect(loader.unguard('env1')).to be_nil
147
+ end
148
+ end
149
+
142
150
  context "with an environment.conf" do
143
151
  let(:envdir) do
144
152
  FS::MemoryFile.a_directory(File.expand_path("envdir"), [
@@ -631,7 +639,7 @@ config_version=$vardir/random/scripts
631
639
  ])
632
640
 
633
641
  loader_from(:filesystem => [envdir], :directory => envdir) do |loader|
634
- cached = Puppet::Environments::Cached.new(loader)
642
+ cached = Puppet::Environments::Cached.new(loader)
635
643
  cached.get(:env1)
636
644
  cached.get(:env2)
637
645
  cached.get(:env3)
@@ -642,6 +650,51 @@ config_version=$vardir/random/scripts
642
650
  end
643
651
  end
644
652
 
653
+ it "normalizes environment name to symbol" do
654
+ env = Puppet::Node::Environment.create(:cached, [])
655
+ mocked_loader = double('loader')
656
+
657
+ expect(mocked_loader).not_to receive(:get).with('cached')
658
+ expect(mocked_loader).to receive(:get).with(:cached).and_return(env).once
659
+ expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).once
660
+
661
+ cached = Puppet::Environments::Cached.new(mocked_loader)
662
+ cached.get('cached')
663
+ cached.get(:cached)
664
+ end
665
+
666
+ it "caches environment name as symbol and only once" do
667
+ mocked_loader = double('loader')
668
+
669
+ env = Puppet::Node::Environment.create(:cached, [])
670
+ allow(mocked_loader).to receive(:get).with(:cached).and_return(env)
671
+ allow(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20))
672
+
673
+ cached = Puppet::Environments::Cached.new(mocked_loader)
674
+ cached.get(:cached)
675
+ cached.get('cached')
676
+
677
+ expect(cached.instance_variable_get(:@cache).keys).to eq([:cached])
678
+ end
679
+
680
+ it "is able to cache multiple environments" do
681
+ mocked_loader = double('loader')
682
+
683
+ env1 = Puppet::Node::Environment.create(:env1, [])
684
+ allow(mocked_loader).to receive(:get).with(:env1).and_return(env1)
685
+ allow(mocked_loader).to receive(:get_conf).with(:env1).and_return(Puppet::Settings::EnvironmentConf.static_for(env1, 20))
686
+
687
+ env2 = Puppet::Node::Environment.create(:env2, [])
688
+ allow(mocked_loader).to receive(:get).with(:env2).and_return(env2)
689
+ allow(mocked_loader).to receive(:get_conf).with(:env2).and_return(Puppet::Settings::EnvironmentConf.static_for(env2, 20))
690
+
691
+ cached = Puppet::Environments::Cached.new(mocked_loader)
692
+ cached.get('env1')
693
+ cached.get('env2')
694
+
695
+ expect(cached.instance_variable_get(:@cache).keys).to eq([:env1, :env2])
696
+ end
697
+
645
698
  it "returns nil if env not found" do
646
699
  cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
647
700
  expect(loader.get(:doesnotexist)).to be_nil
@@ -697,6 +750,17 @@ config_version=$vardir/random/scripts
697
750
  cached.get_conf(:cached)
698
751
  end
699
752
 
753
+ it "normalizes environment name to symbol" do
754
+ env = Puppet::Node::Environment.create(:cached, [])
755
+ mocked_loader = double('loader')
756
+ expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).twice
757
+
758
+ cached = Puppet::Environments::Cached.new(mocked_loader)
759
+
760
+ cached.get_conf('cached')
761
+ cached.get_conf(:cached)
762
+ end
763
+
700
764
  it "returns nil if environment is not found" do
701
765
  cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
702
766
  expect(loader.get_conf(:doesnotexist)).to be_nil
@@ -789,6 +853,83 @@ config_version=$vardir/random/scripts
789
853
 
790
854
  expect(service.evicted_envs).to eq([:an_environment])
791
855
  end
856
+
857
+ context "when guarding an environment" do
858
+ before :each do
859
+ Puppet[:environment_timeout] = 0
860
+ end
861
+
862
+ let(:name) { :an_environment }
863
+
864
+ def with_guard(cached, name, &block)
865
+ cached.guard(name)
866
+ begin
867
+ yield
868
+ ensure
869
+ cached.unguard(name)
870
+ end
871
+ end
872
+
873
+ it "evicts an expired and unguarded environment" do
874
+ with_environment_loaded(service) do |cached|
875
+ cached.get!(name)
876
+ end
877
+
878
+ expect(service.created_envs).to eq([name, name])
879
+ expect(service.evicted_envs).to eq([name])
880
+ end
881
+
882
+ it "does not evict an expired, but guarded environment" do
883
+ with_environment_loaded(service) do |cached|
884
+ with_guard(cached, name) do
885
+ cached.get!(name) # these shouldn't reload
886
+ cached.get!(name)
887
+ end
888
+ end
889
+
890
+ expect(service.created_envs).to eq([name])
891
+ expect(service.evicted_envs).to eq([])
892
+ end
893
+
894
+ it "does not evict an environment marked for expiration, but is guarded" do
895
+ Puppet[:environment_timeout] = 'unlimited'
896
+
897
+ expect(service).to receive(:expired?).never
898
+
899
+ with_environment_loaded(service) do |cached|
900
+ with_guard(cached, name) do
901
+ cached.get!(name)
902
+ end
903
+ end
904
+
905
+ expect(service.created_envs).to eq([name])
906
+ expect(service.evicted_envs).to eq([])
907
+ end
908
+
909
+ it "evicts an environment that is no longer guarded" do
910
+ with_environment_loaded(service) do |cached|
911
+ with_guard(cached, name) {}
912
+
913
+ cached.get!(name) # this reloads
914
+ end
915
+
916
+ expect(service.created_envs).to eq([name, name])
917
+ expect(service.evicted_envs).to eq([name])
918
+ end
919
+
920
+ it "can nest guards" do
921
+ with_environment_loaded(service) do |cached|
922
+ with_guard(cached, name) do
923
+ with_guard(cached, name) do
924
+ cached.get!(name) # doesn't reload
925
+ end
926
+ end
927
+ end
928
+
929
+ expect(service.created_envs).to eq([name])
930
+ expect(service.evicted_envs).to eq([])
931
+ end
932
+ end
792
933
  end
793
934
 
794
935
  context '#clear' do
@@ -801,6 +942,14 @@ config_version=$vardir/random/scripts
801
942
 
802
943
  expect(service.evicted_envs).to eq([:an_environment])
803
944
  end
945
+
946
+ it "normalizes environment name to symbol" do
947
+ with_environment_loaded(service) do |cached|
948
+ cached.clear('an_environment')
949
+ end
950
+
951
+ expect(service.evicted_envs).to eq([:an_environment])
952
+ end
804
953
  end
805
954
 
806
955
  context '#clear_all' do
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Puppet::FacterImpl' do
4
+ subject(:facter_impl) { Puppet::FacterImpl.new }
5
+
6
+ it { is_expected.to respond_to(:value) }
7
+ it { is_expected.to respond_to(:add) }
8
+
9
+ describe '.value' do
10
+ let(:method_name) { :value }
11
+
12
+ before { allow(Facter).to receive(method_name) }
13
+
14
+ it 'delegates to Facter API' do
15
+ facter_impl.value('test_fact')
16
+ expect(Facter).to have_received(method_name).with('test_fact')
17
+ end
18
+ end
19
+
20
+ describe '.add' do
21
+ let(:block) { Proc.new { setcode 'test' } }
22
+ let(:method_name) { :add }
23
+
24
+ before { allow(Facter).to receive(method_name) }
25
+
26
+ it 'delegates to Facter API' do
27
+ facter_impl.add('test_fact', &block)
28
+ expect(Facter).to have_received(method_name).with('test_fact', &block)
29
+ end
30
+ end
31
+ end
@@ -104,8 +104,8 @@ describe Puppet::FileBucket::Dipper, :uses_checksums => true do
104
104
  # Diff without the context
105
105
  # Lines we need to see match 'Content' instead of trimming diff output filter out
106
106
  # surrounding noise...or hard code the check values
107
- if Facter.value(:osfamily) == 'Solaris' &&
108
- Puppet::Util::Package.versioncmp(Facter.value(:operatingsystemrelease), '11.0') >= 0
107
+ if Puppet.runtime[:facter].value(:osfamily) == 'Solaris' &&
108
+ Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value(:operatingsystemrelease), '11.0') >= 0
109
109
  # Use gdiff on Solaris
110
110
  diff12 = Puppet::Util::Execution.execute("gdiff -uN #{file1} #{file2}| grep Content")
111
111
  diff21 = Puppet::Util::Execution.execute("gdiff -uN #{file2} #{file1}| grep Content")
@@ -155,6 +155,29 @@ describe Puppet::FileServing::Configuration::Parser do
155
155
  end
156
156
  end
157
157
 
158
+ describe Puppet::FileServing::Configuration::Parser, " when parsing the scripts mount" do
159
+ include FSConfigurationParserTesting
160
+
161
+ before do
162
+ @mount = double('scriptsmount', :name => "scripts", :validate => true)
163
+ end
164
+
165
+ it "should create an instance of the Scripts Mount class" do
166
+ write_config_file "[scripts]\n"
167
+
168
+ expect(Puppet::FileServing::Mount::Scripts).to receive(:new).with("scripts").and_return(@mount)
169
+ @parser.parse
170
+ end
171
+
172
+ it "should warn if a path is set" do
173
+ write_config_file "[scripts]\npath /some/path\n"
174
+ expect(Puppet::FileServing::Mount::Scripts).to receive(:new).with("scripts").and_return(@mount)
175
+
176
+ expect(Puppet).to receive(:warning)
177
+ @parser.parse
178
+ end
179
+ end
180
+
158
181
  describe Puppet::FileServing::Configuration::Parser, " when parsing the plugins mount" do
159
182
  include FSConfigurationParserTesting
160
183
 
@@ -80,15 +80,16 @@ describe Puppet::FileServing::Configuration do
80
80
  expect(config.mounted?("one")).to be_truthy
81
81
  end
82
82
 
83
- it "should add modules, plugins, and tasks mounts even if the file does not exist" do
83
+ it "should add modules, plugins, scripts, and tasks mounts even if the file does not exist" do
84
84
  expect(Puppet::FileSystem).to receive(:exist?).and_return(false) # the file doesn't exist
85
85
  config = Puppet::FileServing::Configuration.configuration
86
86
  expect(config.mounted?("modules")).to be_truthy
87
87
  expect(config.mounted?("plugins")).to be_truthy
88
+ expect(config.mounted?("scripts")).to be_truthy
88
89
  expect(config.mounted?("tasks")).to be_truthy
89
90
  end
90
91
 
91
- it "should allow all access to modules, plugins, and tasks if no fileserver.conf exists" do
92
+ it "should allow all access to modules, plugins, scripts, and tasks if no fileserver.conf exists" do
92
93
  expect(Puppet::FileSystem).to receive(:exist?).and_return(false) # the file doesn't exist
93
94
  modules = double('modules', :empty? => true)
94
95
  allow(Puppet::FileServing::Mount::Modules).to receive(:new).and_return(modules)
@@ -98,6 +99,10 @@ describe Puppet::FileServing::Configuration do
98
99
  allow(Puppet::FileServing::Mount::Plugins).to receive(:new).and_return(plugins)
99
100
  expect(plugins).to receive(:allow).with('*')
100
101
 
102
+ scripts = double('scripts', :empty? => true)
103
+ allow(Puppet::FileServing::Mount::Scripts).to receive(:new).and_return(scripts)
104
+ expect(scripts).to receive(:allow).with('*')
105
+
101
106
  tasks = double('tasks', :empty? => true)
102
107
  allow(Puppet::FileServing::Mount::Tasks).to receive(:new).and_return(tasks)
103
108
  expect(tasks).to receive(:allow).with('*')
@@ -105,7 +110,7 @@ describe Puppet::FileServing::Configuration do
105
110
  Puppet::FileServing::Configuration.configuration
106
111
  end
107
112
 
108
- it "should not allow access from all to modules, plugins, and tasks if the fileserver.conf provided some rules" do
113
+ it "should not allow access from all to modules, plugins, scripts, and tasks if the fileserver.conf provided some rules" do
109
114
  expect(Puppet::FileSystem).to receive(:exist?).and_return(false) # the file doesn't exist
110
115
 
111
116
  modules = double('modules', :empty? => false)
@@ -116,6 +121,10 @@ describe Puppet::FileServing::Configuration do
116
121
  allow(Puppet::FileServing::Mount::Plugins).to receive(:new).and_return(plugins)
117
122
  expect(plugins).not_to receive(:allow).with('*')
118
123
 
124
+ scripts = double('scripts', :empty? => false)
125
+ allow(Puppet::FileServing::Mount::Scripts).to receive(:new).and_return(scripts)
126
+ expect(scripts).not_to receive(:allow).with('*')
127
+
119
128
  tasks = double('tasks', :empty? => false)
120
129
  allow(Puppet::FileServing::Mount::Tasks).to receive(:new).and_return(tasks)
121
130
  expect(tasks).not_to receive(:allow).with('*')
@@ -123,12 +132,13 @@ describe Puppet::FileServing::Configuration do
123
132
  Puppet::FileServing::Configuration.configuration
124
133
  end
125
134
 
126
- it "should add modules, plugins, and tasks mounts even if they are not returned by the parser" do
135
+ it "should add modules, plugins, scripts, and tasks mounts even if they are not returned by the parser" do
127
136
  expect(@parser).to receive(:parse).and_return("one" => double("mount"))
128
137
  expect(Puppet::FileSystem).to receive(:exist?).and_return(true) # the file doesn't exist
129
138
  config = Puppet::FileServing::Configuration.configuration
130
139
  expect(config.mounted?("modules")).to be_truthy
131
140
  expect(config.mounted?("plugins")).to be_truthy
141
+ expect(config.mounted?("scripts")).to be_truthy
132
142
  expect(config.mounted?("tasks")).to be_truthy
133
143
  end
134
144
  end