puppet 7.0.0-x64-mingw32 → 7.5.0-x64-mingw32

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 (191) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +2 -3
  4. data/Gemfile.lock +45 -33
  5. data/ext/build_defaults.yaml +0 -1
  6. data/ext/project_data.yaml +1 -0
  7. data/lib/puppet/application.rb +10 -6
  8. data/lib/puppet/application/agent.rb +1 -0
  9. data/lib/puppet/application/apply.rb +3 -2
  10. data/lib/puppet/application/device.rb +1 -0
  11. data/lib/puppet/application/script.rb +1 -0
  12. data/lib/puppet/application/ssl.rb +11 -0
  13. data/lib/puppet/application_support.rb +7 -0
  14. data/lib/puppet/configurer.rb +16 -3
  15. data/lib/puppet/defaults.rb +14 -41
  16. data/lib/puppet/environments.rb +54 -55
  17. data/lib/puppet/face/facts.rb +26 -2
  18. data/lib/puppet/face/node/clean.rb +8 -0
  19. data/lib/puppet/ffi/posix.rb +10 -0
  20. data/lib/puppet/ffi/posix/constants.rb +14 -0
  21. data/lib/puppet/ffi/posix/functions.rb +24 -0
  22. data/lib/puppet/ffi/windows/api_types.rb +1 -1
  23. data/lib/puppet/ffi/windows/constants.rb +1 -1
  24. data/lib/puppet/file_serving/configuration/parser.rb +5 -2
  25. data/lib/puppet/file_system/memory_file.rb +8 -1
  26. data/lib/puppet/file_system/windows.rb +2 -0
  27. data/lib/puppet/http/factory.rb +4 -0
  28. data/lib/puppet/indirector/facts/facter.rb +1 -0
  29. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  30. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  31. data/lib/puppet/network/formats.rb +67 -0
  32. data/lib/puppet/network/http.rb +5 -2
  33. data/lib/puppet/network/http/api.rb +10 -6
  34. data/lib/puppet/network/http/api/master.rb +3 -2
  35. data/lib/puppet/network/http/api/master/v3.rb +2 -25
  36. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -33
  37. data/lib/puppet/network/http/api/server.rb +10 -0
  38. data/lib/puppet/network/http/api/server/v3.rb +39 -0
  39. data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
  40. data/lib/puppet/parser/ast/leaf.rb +3 -2
  41. data/lib/puppet/parser/templatewrapper.rb +1 -1
  42. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  43. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  44. data/lib/puppet/pops/parser/lexer2.rb +0 -4
  45. data/lib/puppet/pops/validation/checker4_0.rb +0 -1
  46. data/lib/puppet/property/list.rb +1 -1
  47. data/lib/puppet/provider/group/groupadd.rb +13 -8
  48. data/lib/puppet/provider/package/apt.rb +34 -2
  49. data/lib/puppet/provider/package/aptitude.rb +6 -0
  50. data/lib/puppet/provider/service/debian.rb +2 -0
  51. data/lib/puppet/provider/user/aix.rb +2 -2
  52. data/lib/puppet/provider/user/useradd.rb +62 -8
  53. data/lib/puppet/reference/configuration.rb +6 -5
  54. data/lib/puppet/settings.rb +33 -28
  55. data/lib/puppet/settings/alias_setting.rb +37 -0
  56. data/lib/puppet/settings/environment_conf.rb +1 -0
  57. data/lib/puppet/type/package.rb +3 -3
  58. data/lib/puppet/type/user.rb +1 -1
  59. data/lib/puppet/util/autoload.rb +1 -8
  60. data/lib/puppet/util/monkey_patches.rb +7 -0
  61. data/lib/puppet/util/posix.rb +54 -5
  62. data/lib/puppet/util/windows/adsi.rb +46 -0
  63. data/lib/puppet/util/windows/principal.rb +9 -2
  64. data/lib/puppet/util/windows/sid.rb +4 -2
  65. data/lib/puppet/version.rb +1 -1
  66. data/locales/puppet.pot +166 -146
  67. data/man/man5/puppet.conf.5 +14 -6
  68. data/man/man8/puppet-agent.8 +2 -2
  69. data/man/man8/puppet-apply.8 +2 -2
  70. data/man/man8/puppet-catalog.8 +1 -1
  71. data/man/man8/puppet-config.8 +1 -1
  72. data/man/man8/puppet-describe.8 +1 -1
  73. data/man/man8/puppet-device.8 +2 -2
  74. data/man/man8/puppet-doc.8 +1 -1
  75. data/man/man8/puppet-epp.8 +1 -1
  76. data/man/man8/puppet-facts.8 +8 -2
  77. data/man/man8/puppet-filebucket.8 +1 -1
  78. data/man/man8/puppet-generate.8 +1 -1
  79. data/man/man8/puppet-help.8 +1 -1
  80. data/man/man8/puppet-lookup.8 +1 -1
  81. data/man/man8/puppet-module.8 +1 -1
  82. data/man/man8/puppet-node.8 +1 -1
  83. data/man/man8/puppet-parser.8 +1 -1
  84. data/man/man8/puppet-plugin.8 +1 -1
  85. data/man/man8/puppet-report.8 +1 -1
  86. data/man/man8/puppet-resource.8 +1 -1
  87. data/man/man8/puppet-script.8 +2 -2
  88. data/man/man8/puppet-ssl.8 +5 -1
  89. data/man/man8/puppet.8 +2 -2
  90. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  91. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  92. data/spec/integration/application/agent_spec.rb +160 -3
  93. data/spec/integration/application/apply_spec.rb +19 -0
  94. data/spec/integration/application/plugin_spec.rb +1 -1
  95. data/spec/integration/defaults_spec.rb +0 -7
  96. data/spec/integration/http/client_spec.rb +12 -0
  97. data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
  98. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
  99. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
  100. data/spec/integration/parser/collection_spec.rb +10 -0
  101. data/spec/integration/resource/type_collection_spec.rb +2 -6
  102. data/spec/integration/transaction_spec.rb +4 -9
  103. data/spec/integration/util/windows/adsi_spec.rb +21 -1
  104. data/spec/integration/util/windows/principal_spec.rb +21 -0
  105. data/spec/integration/util/windows/registry_spec.rb +6 -10
  106. data/spec/spec_helper.rb +1 -4
  107. data/spec/unit/agent_spec.rb +8 -6
  108. data/spec/unit/application/agent_spec.rb +0 -1
  109. data/spec/unit/application/facts_spec.rb +58 -7
  110. data/spec/unit/application/filebucket_spec.rb +0 -2
  111. data/spec/unit/application/ssl_spec.rb +23 -0
  112. data/spec/unit/application_spec.rb +51 -9
  113. data/spec/unit/confine/feature_spec.rb +1 -1
  114. data/spec/unit/confine_spec.rb +8 -2
  115. data/spec/unit/defaults_spec.rb +1 -56
  116. data/spec/unit/environments_spec.rb +221 -68
  117. data/spec/unit/face/node_spec.rb +14 -13
  118. data/spec/unit/file_serving/configuration/parser_spec.rb +8 -1
  119. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  120. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  121. data/spec/unit/file_system_spec.rb +9 -0
  122. data/spec/unit/forge/module_release_spec.rb +2 -7
  123. data/spec/unit/http/factory_spec.rb +19 -0
  124. data/spec/unit/indirector/face_spec.rb +0 -1
  125. data/spec/unit/indirector/facts/facter_spec.rb +20 -5
  126. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  127. data/spec/unit/indirector/indirection_spec.rb +8 -12
  128. data/spec/unit/indirector_spec.rb +2 -2
  129. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  130. data/spec/unit/network/formats_spec.rb +41 -0
  131. data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -4
  132. data/spec/unit/network/http/api/master_spec.rb +38 -0
  133. data/spec/unit/network/http/api/{master → server}/v3/environments_spec.rb +2 -2
  134. data/spec/unit/network/http/api/{master → server}/v3_spec.rb +19 -19
  135. data/spec/unit/network/http/api_spec.rb +11 -11
  136. data/spec/unit/parser/compiler_spec.rb +3 -19
  137. data/spec/unit/parser/resource_spec.rb +14 -8
  138. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  139. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  140. data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
  141. data/spec/unit/pops/validator/validator_spec.rb +20 -43
  142. data/spec/unit/property_spec.rb +1 -0
  143. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  144. data/spec/unit/provider/nameservice_spec.rb +66 -65
  145. data/spec/unit/provider/package/apt_spec.rb +28 -23
  146. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  147. data/spec/unit/provider/package/base_spec.rb +6 -5
  148. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  149. data/spec/unit/provider/package/pip_spec.rb +6 -11
  150. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  151. data/spec/unit/provider/user/aix_spec.rb +5 -0
  152. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  153. data/spec/unit/provider/user/pw_spec.rb +2 -0
  154. data/spec/unit/provider/user/useradd_spec.rb +56 -3
  155. data/spec/unit/provider_spec.rb +6 -8
  156. data/spec/unit/resource/type_spec.rb +1 -1
  157. data/spec/unit/resource_spec.rb +11 -10
  158. data/spec/unit/settings_spec.rb +13 -6
  159. data/spec/unit/ssl/base_spec.rb +0 -1
  160. data/spec/unit/ssl/certificate_request_spec.rb +4 -10
  161. data/spec/unit/ssl/ssl_provider_spec.rb +5 -2
  162. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  163. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  164. data/spec/unit/transaction_spec.rb +13 -4
  165. data/spec/unit/type/file/content_spec.rb +0 -1
  166. data/spec/unit/type/file/selinux_spec.rb +0 -2
  167. data/spec/unit/type/file_spec.rb +0 -6
  168. data/spec/unit/type/group_spec.rb +13 -6
  169. data/spec/unit/type/resources_spec.rb +7 -7
  170. data/spec/unit/type/service_spec.rb +1 -1
  171. data/spec/unit/type/tidy_spec.rb +0 -1
  172. data/spec/unit/type_spec.rb +2 -2
  173. data/spec/unit/util/at_fork_spec.rb +2 -2
  174. data/spec/unit/util/autoload_spec.rb +5 -1
  175. data/spec/unit/util/backups_spec.rb +1 -2
  176. data/spec/unit/util/execution_spec.rb +15 -11
  177. data/spec/unit/util/inifile_spec.rb +6 -14
  178. data/spec/unit/util/log_spec.rb +8 -7
  179. data/spec/unit/util/logging_spec.rb +3 -3
  180. data/spec/unit/util/posix_spec.rb +363 -15
  181. data/spec/unit/util/selinux_spec.rb +76 -52
  182. data/spec/unit/util/storage_spec.rb +3 -1
  183. data/spec/unit/util/suidmanager_spec.rb +44 -41
  184. data/spec/unit/util/windows/sid_spec.rb +6 -0
  185. data/spec/unit/util_spec.rb +13 -6
  186. metadata +33 -16
  187. data/spec/lib/matchers/include.rb +0 -27
  188. data/spec/lib/matchers/include_spec.rb +0 -32
  189. data/spec/unit/pops/parser/parse_application_spec.rb +0 -13
  190. data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -23
  191. data/spec/unit/pops/parser/parse_site_spec.rb +0 -43
@@ -1,13 +1,8 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/environments'
3
3
  require 'puppet/file_system'
4
- require 'matchers/include'
5
- require 'matchers/include_in_order'
6
4
 
7
- module PuppetEnvironments
8
5
  describe Puppet::Environments do
9
- include Matchers::Include
10
-
11
6
  FS = Puppet::FileSystem
12
7
 
13
8
  before(:each) do
@@ -49,7 +44,7 @@ describe Puppet::Environments do
49
44
  loader_from(:filesystem => [directory_tree, global_path_1, global_path_2],
50
45
  :directory => directory_tree.children.first,
51
46
  :modulepath => [global_path_1_location, global_path_2_location]) do |loader|
52
- expect(loader.list).to include_in_any_order(
47
+ expect(loader.list).to contain_exactly(
53
48
  environment(:an_environment).
54
49
  with_manifest("#{FS.path_string(directory_tree)}/envdir/an_environment/manifests").
55
50
  with_modulepath(["#{FS.path_string(directory_tree)}/envdir/an_environment/modules",
@@ -87,7 +82,7 @@ describe Puppet::Environments do
87
82
 
88
83
  loader_from(:filesystem => [envdir],
89
84
  :directory => envdir) do |loader|
90
- expect(loader.list).to include_in_any_order(environment(:env1), environment(:env2))
85
+ expect(loader.list).to contain_exactly(environment(:env1), environment(:env2))
91
86
  end
92
87
  end
93
88
 
@@ -406,33 +401,29 @@ config_version=$vardir/random/scripts
406
401
  ]),
407
402
  ])
408
403
 
409
- FS.overlay(original_envdir) do
410
- dir_loader = Puppet::Environments::Directories.new(original_envdir, [])
411
- loader = Puppet::Environments::Cached.new(dir_loader)
412
- Puppet.override(:environments => loader) do
413
- original_env = loader.get("env3") # force the environment.conf to be read
414
-
415
- changed_envdir = FS::MemoryFile.a_directory(base_dir, [
416
- FS::MemoryFile.a_directory("env3", [
417
- FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
418
- manifest=/manifest_changed
419
- modulepath=/modules_changed
420
- environment_timeout=0
421
- EOF
422
- ]),
423
- ])
404
+ cached_loader_from(:filesystem => [original_envdir], :directory => original_envdir) do |loader|
405
+ original_env = loader.get("env3") # force the environment.conf to be read
406
+
407
+ changed_envdir = FS::MemoryFile.a_directory(base_dir, [
408
+ FS::MemoryFile.a_directory("env3", [
409
+ FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
410
+ manifest=/manifest_changed
411
+ modulepath=/modules_changed
412
+ environment_timeout=0
413
+ EOF
414
+ ]),
415
+ ])
424
416
 
425
- FS.overlay(changed_envdir) do
426
- changed_env = loader.get("env3")
417
+ FS.overlay(changed_envdir) do
418
+ changed_env = loader.get("env3")
427
419
 
428
- expect(original_env).to environment(:env3).
429
- with_manifest(File.expand_path("/manifest_orig")).
430
- with_full_modulepath([File.expand_path("/modules_orig")])
420
+ expect(original_env).to environment(:env3).
421
+ with_manifest(File.expand_path("/manifest_orig")).
422
+ with_full_modulepath([File.expand_path("/modules_orig")])
431
423
 
432
- expect(changed_env).to environment(:env3).
433
- with_manifest(File.expand_path("/manifest_changed")).
434
- with_full_modulepath([File.expand_path("/modules_changed")])
435
- end
424
+ expect(changed_env).to environment(:env3).
425
+ with_manifest(File.expand_path("/manifest_changed")).
426
+ with_full_modulepath([File.expand_path("/modules_changed")])
436
427
  end
437
428
  end
438
429
  end
@@ -558,24 +549,49 @@ config_version=$vardir/random/scripts
558
549
 
559
550
  describe "cached loaders" do
560
551
  it "lists environments" do
561
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
562
- expect(Puppet::Environments::Cached.new(loader).list).to include_in_any_order(
552
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
553
+ expect(loader.list).to contain_exactly(
563
554
  environment(:an_environment),
564
555
  environment(:another_environment),
565
556
  environment(:symlinked_environment))
566
557
  end
567
558
  end
568
559
 
560
+ it "returns the same cached environment object for list and get methods" do
561
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
562
+ env = loader.list.find { |e| e.name == :an_environment }
563
+
564
+ expect(env).to equal(loader.get(:an_environment)) # same object
565
+ end
566
+ end
567
+
568
+ it "returns the same cached environment object for multiple list calls" do
569
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
570
+ expect(loader.list.first).to equal(loader.list.first) # same object
571
+ end
572
+ end
573
+
574
+ it "expires environments and returns a new environment object with the same value" do
575
+ Puppet[:environment_timeout] = "0"
576
+
577
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
578
+ a = loader.list.first
579
+ b = loader.list.first
580
+ expect(a).to eq(b) # same value
581
+ expect(a).to_not equal(b) # not same object
582
+ end
583
+ end
584
+
569
585
  it "has search_paths" do
570
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
571
- expect(Puppet::Environments::Cached.new(loader).search_paths).to eq(["file://#{directory_tree.children.first}"])
586
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
587
+ expect(loader.search_paths).to eq(["file://#{directory_tree.children.first}"])
572
588
  end
573
589
  end
574
590
 
575
591
  context "#get" do
576
592
  it "gets an environment" do
577
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
578
- expect(Puppet::Environments::Cached.new(loader).get(:an_environment)).to environment(:an_environment)
593
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
594
+ expect(loader.get(:an_environment)).to environment(:an_environment)
579
595
  end
580
596
  end
581
597
 
@@ -592,16 +608,16 @@ config_version=$vardir/random/scripts
592
608
  end
593
609
 
594
610
  it "returns nil if env not found" do
595
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
596
- expect(Puppet::Environments::Cached.new(loader).get(:doesnotexist)).to be_nil
611
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
612
+ expect(loader.get(:doesnotexist)).to be_nil
597
613
  end
598
614
  end
599
615
  end
600
616
 
601
617
  context "#get!" do
602
618
  it "gets an environment" do
603
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
604
- expect(Puppet::Environments::Cached.new(loader).get!(:an_environment)).to environment(:an_environment)
619
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
620
+ expect(loader.get!(:an_environment)).to environment(:an_environment)
605
621
  end
606
622
  end
607
623
 
@@ -618,29 +634,43 @@ config_version=$vardir/random/scripts
618
634
  end
619
635
 
620
636
  it "raises error if environment is not found" do
621
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
637
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
622
638
  expect do
623
- Puppet::Environments::Cached.new(loader).get!(:doesnotexist)
639
+ loader.get!(:doesnotexist)
624
640
  end.to raise_error(Puppet::Environments::EnvironmentNotFound)
625
641
  end
626
642
  end
627
643
  end
628
644
 
629
- context "expiration policies" do
630
- let(:service) { ReplayExpirationService.new }
645
+ context "#get_conf" do
646
+ it "loads environment.conf" do
647
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
648
+ expect(loader.get_conf(:an_environment)).to match_environment_conf(:an_environment).
649
+ with_env_path(directory_tree.children.first).
650
+ with_global_module_path([])
651
+ end
652
+ end
631
653
 
632
- # The environment named `:an_environment` will already be loaded when the
633
- # block is yielded to
634
- def with_environment_loaded(service, &block)
635
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
636
- using_expiration_service(service) do
637
- cached = Puppet::Environments::Cached.new(loader)
638
- cached.get!(:an_environment)
654
+ it "always reloads environment.conf" do
655
+ env = Puppet::Node::Environment.create(:cached, [])
656
+ mocked_loader = double('loader')
657
+ expect(mocked_loader).to receive(:get_conf).with(:cached).and_return(Puppet::Settings::EnvironmentConf.static_for(env, 20)).twice
639
658
 
640
- yield cached if block_given?
641
- end
659
+ cached = Puppet::Environments::Cached.new(mocked_loader)
660
+
661
+ cached.get_conf(:cached)
662
+ cached.get_conf(:cached)
663
+ end
664
+
665
+ it "returns nil if environment is not found" do
666
+ cached_loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
667
+ expect(loader.get_conf(:doesnotexist)).to be_nil
642
668
  end
643
669
  end
670
+ end
671
+
672
+ context "expiration policies" do
673
+ let(:service) { ReplayExpirationService.new }
644
674
 
645
675
  it "notifies when the environment is first created" do
646
676
  with_environment_loaded(service)
@@ -660,12 +690,7 @@ config_version=$vardir/random/scripts
660
690
  end
661
691
 
662
692
  it "evicts an expired environment" do
663
- service = ReplayExpirationService.new
664
-
665
- # The `Cached#clear_all_expired` method tries to optimize the case where
666
- # no entries are expired. But if `Time.now < @next_expiration` and there is
667
- # an expired entry, then the `service#expired?` method is called twice.
668
- expect(service).to receive(:expired?).twice.and_return(true)
693
+ expect(service).to receive(:expired?).and_return(true)
669
694
 
670
695
  with_environment_loaded(service) do |cached|
671
696
  cached.get!(:an_environment)
@@ -706,8 +731,7 @@ config_version=$vardir/random/scripts
706
731
  it "evicts a recently touched environment" do
707
732
  Puppet[:environment_timeout] = 60
708
733
 
709
- # see note above about "twice"
710
- expect(service).to receive(:expired?).twice.and_return(true)
734
+ expect(service).to receive(:expired?).and_return(true)
711
735
 
712
736
  with_environment_loaded(service) do |cached|
713
737
  # even though the environment was recently touched, it's been expired
@@ -717,13 +741,116 @@ config_version=$vardir/random/scripts
717
741
  expect(service.created_envs).to eq([:an_environment, :an_environment])
718
742
  expect(service.evicted_envs).to eq([:an_environment])
719
743
  end
744
+
745
+ it "evicts expired environments when listing" do
746
+ expect(service).to receive(:expired?).with(:an_environment).and_return(true)
747
+
748
+ with_environment_loaded(service) do |cached|
749
+ cached.list
750
+ end
751
+
752
+ expect(service.evicted_envs).to eq([:an_environment])
753
+ end
720
754
  end
721
755
 
722
- it "gets an environment.conf" do
723
- loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
724
- expect(Puppet::Environments::Cached.new(loader).get_conf(:an_environment)).to match_environment_conf(:an_environment).
725
- with_env_path(directory_tree.children.first).
726
- with_global_module_path([])
756
+ context '#clear' do
757
+ let(:service) { ReplayExpirationService.new }
758
+
759
+ it "evicts an environment" do
760
+ with_environment_loaded(service) do |cached|
761
+ cached.clear(:an_environment)
762
+ end
763
+
764
+ expect(service.evicted_envs).to eq([:an_environment])
765
+ end
766
+ end
767
+
768
+ context '#clear_all' do
769
+ let(:service) { ReplayExpirationService.new }
770
+ let(:envdir) { File.expand_path("envdir") }
771
+ let(:default_dir) { File.join(envdir, "cached_env", "modules") }
772
+ let(:expected_dir) { File.join(envdir, "cached_env", "site") }
773
+
774
+ let(:base_dir) do
775
+ FS::MemoryFile.a_directory(envdir, [
776
+ FS::MemoryFile.a_directory("cached_env", [
777
+ FS::MemoryFile.a_missing_file("environment.conf")
778
+ ])
779
+ ])
780
+ end
781
+
782
+ let(:updated_dir) do
783
+ FS::MemoryFile.a_directory(envdir, [
784
+ FS::MemoryFile.a_directory("cached_env", [
785
+ FS::MemoryFile.a_directory("site"),
786
+ FS::MemoryFile.a_missing_directory("modules"),
787
+ FS::MemoryFile.a_regular_file_containing("environment.conf", <<-EOF)
788
+ modulepath=site
789
+ environment_timeout=unlimited
790
+ EOF
791
+ ])
792
+ ])
793
+ end
794
+
795
+ it 'evicts all environments' do
796
+ with_environment_loaded(service) do |cached|
797
+ cached.get(:an_environment)
798
+ cached.get(:another_environment)
799
+ cached.clear_all
800
+
801
+ expect(service.evicted_envs).to match([:an_environment, :another_environment])
802
+ end
803
+ end
804
+
805
+ it "recomputes modulepath if 'get' is called before 'clear_all'" do
806
+ cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
807
+ loader.get(:cached_env)
808
+
809
+ expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
810
+
811
+ FS.overlay(updated_dir) do
812
+ loader.clear_all
813
+
814
+ expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
815
+ end
816
+ end
817
+ end
818
+
819
+ it "recomputes modulepath if 'list' is called before 'clear_all'" do
820
+ cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
821
+ loader.list
822
+
823
+ expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
824
+
825
+ FS.overlay(updated_dir) do
826
+ loader.clear_all
827
+
828
+ expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
829
+ end
830
+ end
831
+ end
832
+
833
+ it "recomputes modulepath if 'get_conf' is called before 'clear_all'" do
834
+ cached_loader_from(:filesystem => [base_dir], :directory => base_dir) do |loader|
835
+ loader.get_conf(:cached_env)
836
+
837
+ expect(Puppet.settings.value(:modulepath, :cached_env)).to eq(default_dir)
838
+
839
+ FS.overlay(updated_dir) do
840
+ loader.clear_all
841
+
842
+ expect(loader.get(:cached_env).modulepath).to contain_exactly(expected_dir)
843
+ end
844
+ end
845
+ end
846
+
847
+ it 'deletes environment text domains' do
848
+ with_environment_loaded(service) do |cached|
849
+ cached.get(:an_environment)
850
+ cached.clear_all
851
+
852
+ expect(FastGettext.text_domain).to eq(Puppet::GettextConfig::DEFAULT_TEXT_DOMAIN)
853
+ end
727
854
  end
728
855
  end
729
856
  end
@@ -798,6 +925,20 @@ config_version=$vardir/random/scripts
798
925
  end
799
926
  end
800
927
 
928
+ def cached_loader_from(options, &block)
929
+ FS.overlay(*options[:filesystem]) do
930
+ environments = Puppet::Environments::Cached.new(
931
+ Puppet::Environments::Directories.new(
932
+ options[:directory],
933
+ options[:modulepath] || []
934
+ )
935
+ )
936
+ Puppet.override(:environments => environments) do
937
+ yield environments
938
+ end
939
+ end
940
+ end
941
+
801
942
  def loader_from(options, &block)
802
943
  FS.overlay(*options[:filesystem]) do
803
944
  environments = Puppet::Environments::Directories.new(
@@ -820,6 +961,19 @@ config_version=$vardir/random/scripts
820
961
  end
821
962
  end
822
963
 
964
+ # The environment named `:an_environment` will already be loaded when the
965
+ # block is yielded to
966
+ def with_environment_loaded(service, &block)
967
+ loader_from(:filesystem => [directory_tree], :directory => directory_tree.children.first) do |loader|
968
+ using_expiration_service(service) do
969
+ cached = Puppet::Environments::Cached.new(loader)
970
+ cached.get!(:an_environment)
971
+
972
+ yield cached if block_given?
973
+ end
974
+ end
975
+ end
976
+
823
977
  class ReplayExpirationService < Puppet::Environments::Cached::DefaultCacheExpirationService
824
978
  attr_reader :created_envs, :evicted_envs
825
979
 
@@ -837,4 +991,3 @@ config_version=$vardir/random/scripts
837
991
  end
838
992
  end
839
993
  end
840
- end
@@ -15,13 +15,6 @@ describe Puppet::Face[:node, '0.0.1'] do
15
15
  end
16
16
 
17
17
  describe 'when running #clean' do
18
- before :each do
19
- allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
20
- allow(Puppet::Node::Facts.indirection).to receive(:cache_class=)
21
- allow(Puppet::Node).to receive(:terminus_class=)
22
- allow(Puppet::Node).to receive(:cache_class=)
23
- end
24
-
25
18
  it 'should invoke #cleanup' do
26
19
  expect(subject).to receive(:cleanup).with('hostname')
27
20
  subject.clean('hostname')
@@ -30,10 +23,6 @@ describe Puppet::Face[:node, '0.0.1'] do
30
23
 
31
24
  describe "clean action" do
32
25
  before :each do
33
- allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
34
- allow(Puppet::Node::Facts.indirection).to receive(:cache_class=)
35
- allow(Puppet::Node).to receive(:terminus_class=)
36
- allow(Puppet::Node).to receive(:cache_class=)
37
26
  allow(subject).to receive(:cleanup)
38
27
  end
39
28
 
@@ -89,8 +78,20 @@ describe Puppet::Face[:node, '0.0.1'] do
89
78
 
90
79
  describe "when cleaning certificate", :if => Puppet.features.puppetserver_ca? do
91
80
  it "should call the CA CLI gem's clean action" do
92
- expect_any_instance_of(Puppetserver::Ca::Action::Clean).to receive(:run).with({ 'certnames' => ['hostname'] }).and_return(0)
93
- subject.clean_cert('hostname')
81
+ expect_any_instance_of(Puppetserver::Ca::Action::Clean).
82
+ to receive(:clean_certs).
83
+ with(['hostname'], anything).
84
+ and_return(:success)
85
+
86
+ if Puppet[:cadir].start_with?(Puppet[:ssldir])
87
+ expect_any_instance_of(LoggerIO).
88
+ to receive(:warn).
89
+ with(/cadir is currently configured to be inside/)
90
+ end
91
+
92
+ expect(Puppet).not_to receive(:warning)
93
+ result = subject.clean_cert('hostname')
94
+ expect(result).to eq(0)
94
95
  end
95
96
 
96
97
  it "should not call the CA CLI gem's clean action if the gem is missing" do