facter 4.0.26 → 4.0.28

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 (206) hide show
  1. checksums.yaml +4 -4
  2. data/.github/actions/presuite.rb +1 -12
  3. data/.github/workflows/acceptance_tests.yml +4 -4
  4. data/.github/workflows/checks.yaml +9 -3
  5. data/.github/workflows/coverage.yaml +1 -1
  6. data/.github/workflows/unit_tests.yaml +2 -2
  7. data/.rubocop.yml +5 -0
  8. data/.rubocop_todo.yml +6 -4
  9. data/CHANGELOG.md +22 -0
  10. data/Rakefile +2 -1
  11. data/VERSION +1 -1
  12. data/acceptance/.beaker.yml +15 -0
  13. data/acceptance/.gitignore +12 -0
  14. data/acceptance/Gemfile +24 -0
  15. data/acceptance/Rakefile +2 -0
  16. data/acceptance/bin/ci-bootstrap-from-artifacts.sh +55 -0
  17. data/acceptance/config/aio/options.rb +6 -0
  18. data/acceptance/config/git/options.rb +3 -0
  19. data/acceptance/config/nodes/aix-53-power.yaml +7 -0
  20. data/acceptance/config/nodes/aix-61-power.yaml +7 -0
  21. data/acceptance/config/nodes/aix-71-power.yaml +7 -0
  22. data/acceptance/config/nodes/huaweios-6-powerpc.yaml +7 -0
  23. data/acceptance/config/nodes/solaris-10-sparc.yaml +9 -0
  24. data/acceptance/config/nodes/solaris-11-sparc.yaml +9 -0
  25. data/acceptance/lib/facter/acceptance/base_fact_utils.rb +565 -0
  26. data/acceptance/lib/facter/acceptance/user_fact_utils.rb +132 -0
  27. data/acceptance/lib/helper.rb +3 -0
  28. data/acceptance/lib/puppet/acceptance/common_utils.rb +10 -0
  29. data/acceptance/lib/puppet/acceptance/git_utils.rb +19 -0
  30. data/acceptance/lib/puppet/acceptance/install_utils.rb +58 -0
  31. data/acceptance/setup/aio/pre-suite/001_run_with_facter_ng.rb +75 -0
  32. data/acceptance/tests/custom_facts/cached_custom_fact.rb +82 -0
  33. data/acceptance/tests/custom_facts/conflicts_with_builtin_fact.rb +106 -0
  34. data/acceptance/tests/custom_facts/custom_fact_with_10001_weight_overrides_external_fact.rb +30 -0
  35. data/acceptance/tests/custom_facts/expand_command.rb +30 -0
  36. data/acceptance/tests/custom_facts/having_multiple_facts_in_one_file.rb +40 -0
  37. data/acceptance/tests/custom_facts/not_expand_command.rb +30 -0
  38. data/acceptance/tests/custom_facts/using_win32ole_should_not_hang.rb +33 -0
  39. data/acceptance/tests/custom_facts/weighted_cached_custom_facts.rb +94 -0
  40. data/acceptance/tests/custom_facts/windows_not_expand_command.rb +30 -0
  41. data/acceptance/tests/external_facts/env_var_overrides_external_fact.rb +46 -0
  42. data/acceptance/tests/external_facts/external_dir_overrides_default_external_fact.rb +34 -0
  43. data/acceptance/tests/external_facts/external_fact_overrides_custom_fact.rb +29 -0
  44. data/acceptance/tests/external_facts/external_fact_overrides_custom_fact_with_10000_weight_or_less.rb +30 -0
  45. data/acceptance/tests/external_facts/external_fact_overrides_custom_fact_with_confine.rb +35 -0
  46. data/acceptance/tests/external_facts/external_fact_stderr_messages_output_to_stderr.rb +49 -0
  47. data/acceptance/tests/external_facts/external_facts_only_run_once.rb +43 -0
  48. data/acceptance/tests/external_facts/fact_directory_precedence.rb +109 -0
  49. data/acceptance/tests/external_facts/handle_same_filename_in_different_dirs.rb +59 -0
  50. data/acceptance/tests/external_facts/non_root_users_default_external_fact_directory.rb +142 -0
  51. data/acceptance/tests/external_facts/root_uses_default_external_fact_dir.rb +34 -0
  52. data/acceptance/tests/external_facts/structured_executable_facts.rb +139 -0
  53. data/acceptance/tests/facter_returns_success_on_non_existent_fact.rb +9 -0
  54. data/acceptance/tests/facts/dmi.rb +51 -0
  55. data/acceptance/tests/facts/facterversion.rb +11 -0
  56. data/acceptance/tests/facts/identity.rb +52 -0
  57. data/acceptance/tests/facts/mountpoints_fact.rb +12 -0
  58. data/acceptance/tests/facts/networking_facts.rb +93 -0
  59. data/acceptance/tests/facts/nim_type.rb +12 -0
  60. data/acceptance/tests/facts/non_root_users_without_errors.rb +32 -0
  61. data/acceptance/tests/facts/operatingsystem_detection_after_clear_on_ubuntu.rb +26 -0
  62. data/acceptance/tests/facts/os_processors_and_kernel.rb +20 -0
  63. data/acceptance/tests/facts/osx_numeric_hostname.rb +23 -0
  64. data/acceptance/tests/facts/partitions.rb +37 -0
  65. data/acceptance/tests/facts/productname.rb +15 -0
  66. data/acceptance/tests/facts/ruby.rb +59 -0
  67. data/acceptance/tests/facts/ssh_key.rb +59 -0
  68. data/acceptance/tests/facts/validate_file_system_size_bytes.rb +37 -0
  69. data/acceptance/tests/facts/verify_tmpfs_file_system.rb +54 -0
  70. data/acceptance/tests/facts/windows_os.rb +64 -0
  71. data/acceptance/tests/load_libfacter.rb +66 -0
  72. data/acceptance/tests/no_errors_on_stderr.rb +10 -0
  73. data/acceptance/tests/options/color.rb +16 -0
  74. data/acceptance/tests/options/config.rb +27 -0
  75. data/acceptance/tests/options/config_file/blocklist.rb +35 -0
  76. data/acceptance/tests/options/config_file/blocklist_from_puppet_facts.rb +40 -0
  77. data/acceptance/tests/options/config_file/custom_dir_overridden_by_cli_custom_dir.rb +56 -0
  78. data/acceptance/tests/options/config_file/custom_facts.rb +42 -0
  79. data/acceptance/tests/options/config_file/custom_facts_list.rb +56 -0
  80. data/acceptance/tests/options/config_file/debug.rb +34 -0
  81. data/acceptance/tests/options/config_file/debug_override_config_file.rb +34 -0
  82. data/acceptance/tests/options/config_file/default_file_location.rb +37 -0
  83. data/acceptance/tests/options/config_file/external_dir_conflicts_with_cli_no_external_facts.rb +37 -0
  84. data/acceptance/tests/options/config_file/external_dir_overridden_by_cli_external_dir.rb +40 -0
  85. data/acceptance/tests/options/config_file/external_facts.rb +37 -0
  86. data/acceptance/tests/options/config_file/external_facts_list.rb +43 -0
  87. data/acceptance/tests/options/config_file/load_from_ruby.rb +73 -0
  88. data/acceptance/tests/options/config_file/log_level.rb +35 -0
  89. data/acceptance/tests/options/config_file/no_custom_facts_and_custom_dir.rb +43 -0
  90. data/acceptance/tests/options/config_file/no_custom_facts_and_facterlib.rb +43 -0
  91. data/acceptance/tests/options/config_file/no_custom_facts_and_load_path.rb +49 -0
  92. data/acceptance/tests/options/config_file/no_external_facts.rb +38 -0
  93. data/acceptance/tests/options/config_file/no_external_facts_and_external_dir.rb +34 -0
  94. data/acceptance/tests/options/config_file/no_ruby_disables_custom_facts.rb +52 -0
  95. data/acceptance/tests/options/config_file/no_ruby_disables_ruby_facts.rb +34 -0
  96. data/acceptance/tests/options/config_file/trace.rb +48 -0
  97. data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_json_output.rb +92 -0
  98. data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_text_output.rb +74 -0
  99. data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_yaml_output.rb +88 -0
  100. data/acceptance/tests/options/config_file/ttls_cached_external_json_resolver.rb +79 -0
  101. data/acceptance/tests/options/config_file/ttls_cached_external_text_resolver.rb +78 -0
  102. data/acceptance/tests/options/config_file/ttls_cached_external_yaml_resolver.rb +78 -0
  103. data/acceptance/tests/options/config_file/ttls_cached_facts_clear_by_empty_ttls_cache_list.rb +71 -0
  104. data/acceptance/tests/options/config_file/ttls_cached_facts_creates_json_cache_file.rb +48 -0
  105. data/acceptance/tests/options/config_file/ttls_cached_facts_expire_facts_do_not_read_the_old_cached_value.rb +58 -0
  106. data/acceptance/tests/options/config_file/ttls_cached_facts_expire_facts_refresh_the_cached_value.rb +61 -0
  107. data/acceptance/tests/options/config_file/ttls_cached_facts_read_from_the_cached_value.rb +57 -0
  108. data/acceptance/tests/options/config_file/ttls_cached_facts_that_are_corrupt_are_refreshed.rb +53 -0
  109. data/acceptance/tests/options/config_file/ttls_cached_facts_that_are_empty_return_an_empty_value.rb +53 -0
  110. data/acceptance/tests/options/config_file/ttls_puppet_facts_creates_json_for_cached_facts.rb +45 -0
  111. data/acceptance/tests/options/config_file/ttls_puppet_facts_honors_cached_facts.rb +54 -0
  112. data/acceptance/tests/options/config_file/verbose.rb +34 -0
  113. data/acceptance/tests/options/custom_facts.rb +34 -0
  114. data/acceptance/tests/options/custom_facts_facterlib.rb +33 -0
  115. data/acceptance/tests/options/custom_facts_list.rb +48 -0
  116. data/acceptance/tests/options/custom_facts_load_path.rb +42 -0
  117. data/acceptance/tests/options/debug.rb +12 -0
  118. data/acceptance/tests/options/external_facts.rb +28 -0
  119. data/acceptance/tests/options/external_facts_list.rb +35 -0
  120. data/acceptance/tests/options/help.rb +13 -0
  121. data/acceptance/tests/options/json.rb +43 -0
  122. data/acceptance/tests/options/list_block_groups.rb +15 -0
  123. data/acceptance/tests/options/list_block_groups_facter_4.rb +15 -0
  124. data/acceptance/tests/options/list_cache_groups.rb +65 -0
  125. data/acceptance/tests/options/log_level.rb +13 -0
  126. data/acceptance/tests/options/no_block.rb +34 -0
  127. data/acceptance/tests/options/no_cache_should_not_cache_facts.rb +43 -0
  128. data/acceptance/tests/options/no_cache_should_not_load_cached_facts.rb +58 -0
  129. data/acceptance/tests/options/no_cache_should_not_refresh_cached_facts.rb +63 -0
  130. data/acceptance/tests/options/no_color.rb +16 -0
  131. data/acceptance/tests/options/no_custom_facts.rb +34 -0
  132. data/acceptance/tests/options/no_custom_facts_and_custom_dir.rb +19 -0
  133. data/acceptance/tests/options/no_custom_facts_and_facterlib.rb +34 -0
  134. data/acceptance/tests/options/no_custom_facts_and_load_path.rb +43 -0
  135. data/acceptance/tests/options/no_external_facts.rb +28 -0
  136. data/acceptance/tests/options/no_external_facts_and_external_dir.rb +19 -0
  137. data/acceptance/tests/options/no_ruby.rb +44 -0
  138. data/acceptance/tests/options/puppet_facts.rb +37 -0
  139. data/acceptance/tests/options/show_legacy.rb +18 -0
  140. data/acceptance/tests/options/strict.rb +11 -0
  141. data/acceptance/tests/options/trace.rb +36 -0
  142. data/acceptance/tests/options/verbose.rb +12 -0
  143. data/acceptance/tests/options/version.rb +12 -0
  144. data/acceptance/tests/options/yaml.rb +43 -0
  145. data/acceptance/tests/ticket_1123_facter_with_invalid_locale.rb +23 -0
  146. data/acceptance/tests/ticket_1238_hostname_fqdn.rb +57 -0
  147. data/lib/custom_facts/core/execution/base.rb +18 -18
  148. data/lib/custom_facts/util/collection.rb +2 -7
  149. data/lib/custom_facts/util/config.rb +1 -1
  150. data/lib/custom_facts/util/directory_loader.rb +51 -24
  151. data/lib/custom_facts/util/fact.rb +10 -1
  152. data/lib/custom_facts/util/resolution.rb +1 -1
  153. data/lib/facts/aix/aio_agent_version.rb +14 -0
  154. data/lib/facts/bsd/processors/count.rb +17 -0
  155. data/lib/facts/bsd/processors/models.rb +23 -0
  156. data/lib/facts/bsd/processors/speed.rb +17 -0
  157. data/lib/facts/freebsd/disks.rb +15 -0
  158. data/lib/facts/freebsd/partitions.rb +15 -0
  159. data/lib/facts/freebsd/processors/count.rb +17 -0
  160. data/lib/facts/freebsd/processors/models.rb +23 -0
  161. data/lib/facts/freebsd/processors/speed.rb +17 -0
  162. data/lib/facts/linux/aio_agent_version.rb +14 -0
  163. data/lib/facts/linux/ec2_metadata.rb +47 -0
  164. data/lib/facts/linux/ec2_userdata.rb +47 -0
  165. data/lib/facts/linux/is_virtual.rb +2 -5
  166. data/lib/facts/linux/virtual.rb +1 -5
  167. data/lib/facts/macosx/aio_agent_version.rb +14 -0
  168. data/lib/facts/macosx/interfaces.rb +2 -2
  169. data/lib/facts/macosx/networking/dhcp.rb +17 -0
  170. data/lib/facts/macosx/networking/interfaces.rb +21 -0
  171. data/lib/facts/macosx/networking/ip.rb +4 -1
  172. data/lib/facts/macosx/networking/ip6.rb +21 -0
  173. data/lib/facts/macosx/networking/mac.rb +4 -1
  174. data/lib/facts/macosx/networking/mtu.rb +20 -0
  175. data/lib/facts/macosx/networking/netmask.rb +21 -0
  176. data/lib/facts/macosx/networking/netmask6.rb +21 -0
  177. data/lib/facts/macosx/networking/network.rb +21 -0
  178. data/lib/facts/macosx/networking/network6.rb +21 -0
  179. data/lib/facts/macosx/networking/primary.rb +17 -0
  180. data/lib/facts/macosx/networking/scope6.rb +20 -0
  181. data/lib/facts/solaris/aio_agent_version.rb +14 -0
  182. data/lib/facts/windows/aio_agent_version.rb +14 -0
  183. data/lib/facts/windows/ec2_metadata.rb +23 -0
  184. data/lib/facts/windows/ec2_userdata.rb +23 -0
  185. data/lib/facts_utils/hypervisors.rb +10 -0
  186. data/lib/framework/core/cache_manager.rb +42 -18
  187. data/lib/framework/core/fact/external/external_fact_manager.rb +3 -2
  188. data/lib/framework/core/fact_loaders/external_fact_loader.rb +3 -2
  189. data/lib/framework/formatters/legacy_fact_formatter.rb +6 -5
  190. data/lib/framework/parsers/query_parser.rb +14 -2
  191. data/lib/models/loaded_fact.rb +3 -1
  192. data/lib/models/resolved_fact.rb +1 -1
  193. data/lib/models/searched_fact.rb +1 -0
  194. data/lib/resolvers/{agent_resolver.rb → aio_agent_version.rb} +4 -3
  195. data/lib/resolvers/bsd/ffi/ffi_helper.rb +31 -0
  196. data/lib/resolvers/bsd/processors.rb +47 -0
  197. data/lib/resolvers/ec2.rb +77 -0
  198. data/lib/resolvers/freebsd/ffi/ffi_helper.rb +42 -0
  199. data/lib/resolvers/freebsd/geom_resolver.rb +109 -0
  200. data/lib/resolvers/freebsd/processors.rb +44 -0
  201. data/lib/resolvers/macosx/networking.rb +110 -0
  202. data/lib/resolvers/networking_linux_resolver.rb +8 -30
  203. data/lib/resolvers/utils/networking.rb +70 -0
  204. data/lib/resolvers/windows/aio_agent_version.rb +56 -0
  205. metadata +175 -5
  206. data/lib/resolvers/macosx/ipaddress_resolver.rb +0 -52
@@ -0,0 +1,88 @@
1
+ # This test verifies that a ttls configured cached facts when initially called
2
+ # create a json cache file
3
+ test_name "ttls configured cached external execution resolver with yaml output creates and read json cache files" do
4
+ tag 'risk:medium'
5
+
6
+ require 'facter/acceptance/user_fact_utils'
7
+ extend Facter::Acceptance::UserFactUtils
8
+
9
+ # This fact must be resolvable on ALL platforms
10
+ # Do NOT use the 'kernel' fact as it is used to configure the tests
11
+ external_cachegroup = 'external_fact'
12
+ cached_fact_name = 'single_fact'
13
+ initial_fact_value = 'external_value'
14
+ cached_fact_value = 'cached_external_value'
15
+
16
+ agents.each do |agent|
17
+ step "Agent #{agent}: create config file" do
18
+ external_dir = agent.tmpdir('external_dir')
19
+ ext = get_external_fact_script_extension(agent['platform'])
20
+ external_fact = File.join(external_dir, "#{external_cachegroup}#{ext}")
21
+ if agent['platform'] =~ /windows/
22
+ external_fact_content = <<EOM
23
+ cat << EOF
24
+ #{cached_fact_name}: "#{initial_fact_value}"
25
+ EOF
26
+ EOM
27
+ else
28
+ external_fact_content = <<EOM
29
+ #!/bin/sh
30
+ cat << EOF
31
+ #{cached_fact_name}: "#{initial_fact_value}"
32
+ EOF
33
+ EOM
34
+ end
35
+ create_remote_file(agent, external_fact, external_fact_content)
36
+ on(agent, "chmod +x '#{external_fact}'")
37
+
38
+ config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
39
+ config_file = File.join(config_dir, "facter.conf")
40
+ cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
41
+
42
+ cached_fact_file = File.join(cached_facts_dir, "#{external_cachegroup}#{ext}")
43
+
44
+ # Setup facter conf
45
+ on(agent, "mkdir -p '#{config_dir}'")
46
+ cached_fact_content = <<EOM
47
+ {
48
+ "#{cached_fact_name}": "#{cached_fact_value}"
49
+ }
50
+ EOM
51
+
52
+ config = <<EOM
53
+ facts : {
54
+ ttls : [
55
+ { "#{external_cachegroup}#{ext}" : 30 days }
56
+ ]
57
+ }
58
+ EOM
59
+ create_remote_file(agent, config_file, config)
60
+
61
+ teardown do
62
+ on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
63
+ end
64
+
65
+ step "should create a JSON file for a fact that is to be cached" do
66
+ on(agent, "rm -rf '#{cached_facts_dir}'")
67
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
68
+ assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
69
+ end
70
+ on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
71
+ assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
72
+ end
73
+ end
74
+
75
+ step "should read from a cached JSON file for a fact that has been cached" do
76
+ on(agent, "rm -rf '#{cached_facts_dir}'")
77
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
78
+
79
+ create_remote_file(agent, cached_fact_file, cached_fact_content)
80
+
81
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
82
+ assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
83
+ assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,79 @@
1
+ # This test verifies that a ttls configured cached facts when initially called
2
+ # create a json cache file
3
+ test_name "ttls configured cached external json resolver creates and read json cache files" do
4
+ tag 'risk:medium'
5
+
6
+ require 'facter/acceptance/user_fact_utils'
7
+ extend Facter::Acceptance::UserFactUtils
8
+
9
+ # This fact must be resolvable on ALL platforms
10
+ # Do NOT use the 'kernel' fact as it is used to configure the tests
11
+ external_cachegroup = 'external_fact'
12
+ cached_fact_name = 'single_fact'
13
+ initial_fact_value = 'initial_external_value'
14
+ cached_fact_value = 'cached_external_value'
15
+
16
+ agents.each do |agent|
17
+ step "Agent #{agent}: create config file" do
18
+ external_dir = agent.tmpdir('external_dir')
19
+ ext = '.json'
20
+ external_fact = File.join(external_dir, "#{external_cachegroup}#{ext}")
21
+
22
+ external_fact_content = <<EOM
23
+ {
24
+ "#{cached_fact_name}": "#{initial_fact_value}"
25
+ }
26
+ EOM
27
+ create_remote_file(agent, external_fact, external_fact_content)
28
+
29
+ config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
30
+ config_file = File.join(config_dir, "facter.conf")
31
+ cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
32
+
33
+ cached_fact_file = File.join(cached_facts_dir, "#{external_cachegroup}#{ext}")
34
+
35
+ # Setup facter conf
36
+ on(agent, "mkdir -p '#{config_dir}'")
37
+ cached_fact_content = <<EOM
38
+ {
39
+ "#{cached_fact_name}": "#{cached_fact_value}"
40
+ }
41
+ EOM
42
+
43
+ config = <<EOM
44
+ facts : {
45
+ ttls : [
46
+ { "#{external_cachegroup}#{ext}" : 30 days }
47
+ ]
48
+ }
49
+ EOM
50
+ create_remote_file(agent, config_file, config)
51
+
52
+ teardown do
53
+ on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
54
+ end
55
+
56
+ step "should create a JSON file for a fact that is to be cached" do
57
+ on(agent, "rm -rf '#{cached_facts_dir}'")
58
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
59
+ assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
60
+ end
61
+ on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
62
+ assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
63
+ end
64
+ end
65
+
66
+ step "should read from a cached JSON file for a fact that has been cached" do
67
+ on(agent, "rm -rf '#{cached_facts_dir}'")
68
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
69
+
70
+ create_remote_file(agent, cached_fact_file, cached_fact_content)
71
+
72
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
73
+ assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
74
+ assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,78 @@
1
+ # This test verifies that a ttls configured cached facts when initially called
2
+ # create a json cache file
3
+ test_name "ttls configured cached external text resolver creates and read json cache files" do
4
+ tag 'risk:medium'
5
+
6
+ require 'facter/acceptance/user_fact_utils'
7
+ extend Facter::Acceptance::UserFactUtils
8
+
9
+ # This fact must be resolvable on ALL platforms
10
+ # Do NOT use the 'kernel' fact as it is used to configure the tests
11
+ external_cachegroup = 'external_fact'
12
+ cached_fact_name = 'single_fact'
13
+ initial_fact_value = 'initial_external_value'
14
+ cached_fact_value = 'cached_external_value'
15
+
16
+ agents.each do |agent|
17
+ step "Agent #{agent}: create config file" do
18
+ external_dir = agent.tmpdir('external_dir')
19
+ ext = '.txt'
20
+ external_fact = File.join(external_dir, "#{external_cachegroup}#{ext}")
21
+
22
+ external_fact_content = <<EOM
23
+ #{cached_fact_name}=#{initial_fact_value}
24
+ EOM
25
+
26
+ create_remote_file(agent, external_fact, external_fact_content)
27
+
28
+ config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
29
+ config_file = File.join(config_dir, "facter.conf")
30
+ cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
31
+
32
+ cached_fact_file = File.join(cached_facts_dir, "#{external_cachegroup}#{ext}")
33
+
34
+ # Setup facter conf
35
+ on(agent, "mkdir -p '#{config_dir}'")
36
+ cached_fact_content = <<EOM
37
+ {
38
+ "#{cached_fact_name}": "#{cached_fact_value}"
39
+ }
40
+ EOM
41
+
42
+ config = <<EOM
43
+ facts : {
44
+ ttls : [
45
+ { "#{external_cachegroup}#{ext}" : 30 days }
46
+ ]
47
+ }
48
+ EOM
49
+ create_remote_file(agent, config_file, config)
50
+
51
+ teardown do
52
+ on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
53
+ end
54
+
55
+ step "should create a JSON file for a fact that is to be cached" do
56
+ on(agent, "rm -rf '#{cached_facts_dir}'")
57
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
58
+ assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
59
+ end
60
+ on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
61
+ assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
62
+ end
63
+ end
64
+
65
+ step "should read from a cached JSON file for a fact that has been cached" do
66
+ on(agent, "rm -rf '#{cached_facts_dir}'")
67
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
68
+
69
+ create_remote_file(agent, cached_fact_file, cached_fact_content)
70
+
71
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
72
+ assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
73
+ assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,78 @@
1
+ # This test verifies that a ttls configured cached facts when initially called
2
+ # create a json cache file
3
+ test_name "ttls configured cached external yaml resolver creates and read json cache files" do
4
+ tag 'risk:medium'
5
+
6
+ require 'facter/acceptance/user_fact_utils'
7
+ extend Facter::Acceptance::UserFactUtils
8
+
9
+ # This fact must be resolvable on ALL platforms
10
+ # Do NOT use the 'kernel' fact as it is used to configure the tests
11
+ external_cachegroup = 'external_fact'
12
+ cached_fact_name = 'single_fact'
13
+ initial_fact_value = 'initial_external_value'
14
+ cached_fact_value = 'cached_external_value'
15
+
16
+ agents.each do |agent|
17
+ step "Agent #{agent}: create config file" do
18
+ external_dir = agent.tmpdir('external_dir')
19
+ ext = '.yaml'
20
+ external_fact = File.join(external_dir, "#{external_cachegroup}#{ext}")
21
+
22
+ external_fact_content = <<EOM
23
+ #{cached_fact_name}: "#{initial_fact_value}"
24
+ EOM
25
+
26
+ create_remote_file(agent, external_fact, external_fact_content)
27
+
28
+ config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
29
+ config_file = File.join(config_dir, "facter.conf")
30
+ cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
31
+
32
+ cached_fact_file = File.join(cached_facts_dir, "#{external_cachegroup}#{ext}")
33
+
34
+ # Setup facter conf
35
+ on(agent, "mkdir -p '#{config_dir}'")
36
+ cached_fact_content = <<EOM
37
+ {
38
+ "#{cached_fact_name}": "#{cached_fact_value}"
39
+ }
40
+ EOM
41
+
42
+ config = <<EOM
43
+ facts : {
44
+ ttls : [
45
+ { "#{external_cachegroup}#{ext}" : 30 days }
46
+ ]
47
+ }
48
+ EOM
49
+ create_remote_file(agent, config_file, config)
50
+
51
+ teardown do
52
+ on(agent, "rm -rf '#{config_dir}' '#{cached_facts_dir}' '#{external_dir}'")
53
+ end
54
+
55
+ step "should create a JSON file for a fact that is to be cached" do
56
+ on(agent, "rm -rf '#{cached_facts_dir}'")
57
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
58
+ assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
59
+ end
60
+ on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
61
+ assert_match(/#{cached_fact_name}/, cat_output.stdout, "Expected cached fact file to contain fact information")
62
+ end
63
+ end
64
+
65
+ step "should read from a cached JSON file for a fact that has been cached" do
66
+ on(agent, "rm -rf '#{cached_facts_dir}'")
67
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}"))
68
+
69
+ create_remote_file(agent, cached_fact_file, cached_fact_content)
70
+
71
+ on(agent, facter("--external-dir '#{external_dir}' --debug #{cached_fact_name}")) do |facter_output|
72
+ assert_match(/loading cached values for .+ facts/, stderr, "Expected debug message to state that values are read from cache")
73
+ assert_match(/#{cached_fact_value}/, stdout, "Expected fact to match the cached fact file")
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,71 @@
1
+ # This test is intended to verify that when the ttls list in the config file is empty
2
+ # that the existing cached facts are removed
3
+ test_name "C100125: ttls config that is empty causes facter to remove existing cached facts" do
4
+ tag 'risk:high'
5
+
6
+ require 'facter/acceptance/user_fact_utils'
7
+ extend Facter::Acceptance::UserFactUtils
8
+
9
+ # This fact must be resolvable on ALL platforms
10
+ # Do NOT use the 'kernel' fact as it is used to configure the tests
11
+ cached_fact_name = 'uptime'
12
+ cached_fact_value = "CACHED_FACT_VALUE"
13
+ cached_fact_content = <<EOM
14
+ {
15
+ "#{cached_fact_name}": "#{cached_fact_value}"
16
+ }
17
+ EOM
18
+
19
+ config = <<EOM
20
+ facts : {
21
+ ttls : [
22
+ { "#{cached_fact_name}" : 30 days }
23
+ ]
24
+ }
25
+ EOM
26
+
27
+ config_no_cache = <<EOM
28
+ facts : {
29
+ ttls : [ ]
30
+ }
31
+ EOM
32
+
33
+ agents.each do |agent|
34
+ step "Agent #{agent}: create config file" do
35
+ config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
36
+ config_file = File.join(config_dir, "facter.conf")
37
+ cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
38
+
39
+ cached_fact_file = File.join(cached_facts_dir, cached_fact_name)
40
+
41
+ # Setup facter conf
42
+ on(agent, "mkdir -p '#{config_dir}'")
43
+ create_remote_file(agent, config_file, config)
44
+
45
+ teardown do
46
+ on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
47
+ on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
48
+ end
49
+
50
+ step "Agent #{agent}: create config file with no cached facts" do
51
+ # Set up a known cached fact
52
+ on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
53
+ on(agent, facter(""))
54
+ create_remote_file(agent, cached_fact_file, cached_fact_content)
55
+ end
56
+
57
+ step "Agent #{agent}: clean out unused cache files on each facter run" do
58
+ # Create config file with no caching
59
+ no_cache_config_file = File.join(config_dir, "no-cache.conf")
60
+ create_remote_file(agent, no_cache_config_file, config_no_cache)
61
+
62
+ on(agent, facter("--config '#{no_cache_config_file}'")) do |facter_output|
63
+ assert_no_match(/#{cached_fact_value}/, facter_output.stdout, "Expected to not see the cached fact value")
64
+ end
65
+
66
+ # Expect cache file to not exist
67
+ refute(agent.file_exist?("#{cached_fact_file}"), "Expected cache file to be absent")
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,48 @@
1
+ # This test verifies that a ttls configured cached facts when initially called
2
+ # create a json cache file
3
+ test_name "C99973: ttls configured cached facts create json cache files" do
4
+ tag 'risk:medium'
5
+
6
+ require 'facter/acceptance/user_fact_utils'
7
+ extend Facter::Acceptance::UserFactUtils
8
+
9
+ # This fact must be resolvable on ALL platforms
10
+ # Do NOT use the 'kernel' fact as it is used to configure the tests
11
+ cached_factname = 'uptime'
12
+ config = <<EOM
13
+ facts : {
14
+ ttls : [
15
+ { "#{cached_factname}" : 30 days }
16
+ ]
17
+ }
18
+ EOM
19
+
20
+ agents.each do |agent|
21
+ step "Agent #{agent}: create config file" do
22
+ config_dir = get_default_fact_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
23
+ config_file = File.join(config_dir, "facter.conf")
24
+ cached_facts_dir = get_cached_facts_dir(agent['platform'], on(agent, facter('kernelmajversion')).stdout.chomp.to_f)
25
+
26
+ cached_fact_file = File.join(cached_facts_dir, cached_factname)
27
+
28
+ # Setup facter conf
29
+ on(agent, "mkdir -p '#{config_dir}'")
30
+ create_remote_file(agent, config_file, config)
31
+
32
+ teardown do
33
+ on(agent, "rm -rf '#{config_dir}'", :acceptable_exit_codes => [0, 1])
34
+ on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
35
+ end
36
+
37
+ step "should create a JSON file for a fact that is to be cached" do
38
+ on(agent, "rm -rf '#{cached_facts_dir}'", :acceptable_exit_codes => [0, 1])
39
+ on(agent, facter("--debug")) do |facter_output|
40
+ assert_match(/caching values for .+ facts/, facter_output.stderr, "Expected debug message to state that values will be cached")
41
+ end
42
+ on(agent, "cat #{cached_fact_file}", :acceptable_exit_codes => [0]) do |cat_output|
43
+ assert_match(/#{cached_factname}/, cat_output.stdout, "Expected cached fact file to contain fact information")
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end