r10k 3.5.2

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 (358) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +1 -0
  3. data/.github/pull_request_template.md +1 -0
  4. data/.github/workflows/docker.yml +56 -0
  5. data/.github/workflows/release.yml +36 -0
  6. data/.gitignore +9 -0
  7. data/.travis.yml +45 -0
  8. data/CHANGELOG.mkd +1759 -0
  9. data/CODEOWNERS +2 -0
  10. data/CONTRIBUTING.mkd +105 -0
  11. data/Gemfile +15 -0
  12. data/LICENSE +14 -0
  13. data/README.mkd +118 -0
  14. data/Rakefile +3 -0
  15. data/azure-pipelines.yml +86 -0
  16. data/bin/r10k +17 -0
  17. data/doc/common-patterns.mkd +44 -0
  18. data/doc/dynamic-environments.mkd +31 -0
  19. data/doc/dynamic-environments/configuration.mkd +669 -0
  20. data/doc/dynamic-environments/git-environments.mkd +75 -0
  21. data/doc/dynamic-environments/introduction.mkd +69 -0
  22. data/doc/dynamic-environments/master-configuration.mkd +40 -0
  23. data/doc/dynamic-environments/quickstart.mkd +201 -0
  24. data/doc/dynamic-environments/svn-environments.mkd +45 -0
  25. data/doc/dynamic-environments/usage.mkd +132 -0
  26. data/doc/dynamic-environments/workflow-guide.mkd +247 -0
  27. data/doc/faq.mkd +164 -0
  28. data/doc/git/cloning-and-mirroring.mkd +60 -0
  29. data/doc/git/providers.mkd +111 -0
  30. data/doc/puppetfile.mkd +309 -0
  31. data/doc/updating-your-puppetfile.mkd +38 -0
  32. data/docker/.gitignore +1 -0
  33. data/docker/.rspec +4 -0
  34. data/docker/Gemfile +11 -0
  35. data/docker/Makefile +89 -0
  36. data/docker/README.md +28 -0
  37. data/docker/r10k/Dockerfile +67 -0
  38. data/docker/r10k/adduser.sh +13 -0
  39. data/docker/r10k/docker-entrypoint.d/10-analytics.sh +30 -0
  40. data/docker/r10k/docker-entrypoint.sh +11 -0
  41. data/docker/r10k/release.Dockerfile +54 -0
  42. data/docker/spec/dockerfile_spec.rb +43 -0
  43. data/docker/spec/fixtures/Puppetfile +2 -0
  44. data/integration/Gemfile +19 -0
  45. data/integration/README.mkd +29 -0
  46. data/integration/Rakefile +77 -0
  47. data/integration/component/pre-suite/05_install_dev_r10k.rb +12 -0
  48. data/integration/files/README.mkd +4 -0
  49. data/integration/files/hiera.yaml +8 -0
  50. data/integration/files/modules/helloworld/manifests/init.pp +3 -0
  51. data/integration/files/modules/hieratest/manifests/init.pp +3 -0
  52. data/integration/files/modules/unicode/files/pretend_unicode +1 -0
  53. data/integration/files/modules/unicode/manifests/init.pp +6 -0
  54. data/integration/files/pre-suite/git_config.pp.erb +19 -0
  55. data/integration/files/pre-suite/prod_env.config +3 -0
  56. data/integration/files/r10k_conf.yaml.erb +9 -0
  57. data/integration/lib/README.mkd +4 -0
  58. data/integration/lib/git_utils.rb +205 -0
  59. data/integration/lib/master_manipulator.rb +205 -0
  60. data/integration/lib/r10k_utils.rb +222 -0
  61. data/integration/manifests/README.mkd +4 -0
  62. data/integration/pre-suite/00_pe_install.rb +6 -0
  63. data/integration/pre-suite/10_git_config.rb +48 -0
  64. data/integration/pre-suite/20_pe_r10k.rb +55 -0
  65. data/integration/pre-suite/README.mkd +5 -0
  66. data/integration/tests/Puppetfile/HTTP_PROXY_affects_forge_source.rb +72 -0
  67. data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +70 -0
  68. data/integration/tests/README.mkd +4 -0
  69. data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +83 -0
  70. data/integration/tests/basic_functionality/negative/neg_deploy_with_invalid_r10k_yaml.rb +51 -0
  71. data/integration/tests/basic_functionality/negative/neg_deploy_with_missing_r10k_yaml.rb +28 -0
  72. data/integration/tests/basic_functionality/negative/neg_invalid_git_provider.rb +45 -0
  73. data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +34 -0
  74. data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +103 -0
  75. data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +128 -0
  76. data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +61 -0
  77. data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +109 -0
  78. data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +108 -0
  79. data/integration/tests/command_line/deploy_env_without_mod_update.rb +76 -0
  80. data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +77 -0
  81. data/integration/tests/command_line/negative/neg_invalid_cmd_line_arg.rb +23 -0
  82. data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +70 -0
  83. data/integration/tests/git_source/git_source_git.rb +128 -0
  84. data/integration/tests/git_source/git_source_ssh.rb +87 -0
  85. data/integration/tests/git_source/git_source_submodule.rb +70 -0
  86. data/integration/tests/git_source/negative/neg_git_broken_remote.rb +38 -0
  87. data/integration/tests/git_source/negative/neg_git_unauthorized_https.rb +46 -0
  88. data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +73 -0
  89. data/integration/tests/git_source/negative/neg_git_unicode_branch.rb +35 -0
  90. data/integration/tests/i18n/deploy_module_with_unicode_in_file_name.rb +64 -0
  91. data/integration/tests/purging/content_not_purged_at_root.rb +89 -0
  92. data/integration/tests/purging/default_purging.rb +125 -0
  93. data/integration/tests/purging/does_not_purge_files_on_white_list.rb +93 -0
  94. data/integration/tests/purging/invalid_whitelist_types.rb +63 -0
  95. data/integration/tests/user_scenario/basic_workflow/multi_env_1000_branches.rb +66 -0
  96. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +111 -0
  97. data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +117 -0
  98. data/integration/tests/user_scenario/basic_workflow/multi_env_hiera.rb +100 -0
  99. data/integration/tests/user_scenario/basic_workflow/multi_env_multi_source.rb +133 -0
  100. data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +161 -0
  101. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_basedir.rb +46 -0
  102. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +48 -0
  103. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +45 -0
  104. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +43 -0
  105. data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_remote.rb +45 -0
  106. data/integration/tests/user_scenario/basic_workflow/negative/neg_branch_name_collision.rb +64 -0
  107. data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +75 -0
  108. data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +44 -0
  109. data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +58 -0
  110. data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_env_name.rb +34 -0
  111. data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_puppet_file.rb +36 -0
  112. data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +49 -0
  113. data/integration/tests/user_scenario/basic_workflow/negative/neg_read_only.rb +58 -0
  114. data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +51 -0
  115. data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +75 -0
  116. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +104 -0
  117. data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +81 -0
  118. data/integration/tests/user_scenario/basic_workflow/single_env_custom_module.rb +49 -0
  119. data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +75 -0
  120. data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +82 -0
  121. data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +68 -0
  122. data/integration/tests/user_scenario/basic_workflow/single_env_non-existent_base_dir.rb +94 -0
  123. data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +93 -0
  124. data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +117 -0
  125. data/integration/tests/user_scenario/basic_workflow/single_env_unicode_paths.rb +60 -0
  126. data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +166 -0
  127. data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +163 -0
  128. data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +111 -0
  129. data/integration/tests/user_scenario/complex_workflow/multi_env_unamanaged.rb +78 -0
  130. data/integration/tests/user_scenario/complex_workflow/single_env_git_module_update.rb +100 -0
  131. data/lib/r10k.rb +11 -0
  132. data/lib/r10k/action/base.rb +31 -0
  133. data/lib/r10k/action/cri_runner.rb +72 -0
  134. data/lib/r10k/action/deploy.rb +9 -0
  135. data/lib/r10k/action/deploy/deploy_helpers.rb +34 -0
  136. data/lib/r10k/action/deploy/display.rb +89 -0
  137. data/lib/r10k/action/deploy/environment.rb +196 -0
  138. data/lib/r10k/action/deploy/module.rb +84 -0
  139. data/lib/r10k/action/puppetfile.rb +10 -0
  140. data/lib/r10k/action/puppetfile/check.rb +31 -0
  141. data/lib/r10k/action/puppetfile/cri_runner.rb +26 -0
  142. data/lib/r10k/action/puppetfile/install.rb +45 -0
  143. data/lib/r10k/action/puppetfile/purge.rb +28 -0
  144. data/lib/r10k/action/runner.rb +96 -0
  145. data/lib/r10k/action/visitor.rb +31 -0
  146. data/lib/r10k/cli.rb +51 -0
  147. data/lib/r10k/cli/deploy.rb +114 -0
  148. data/lib/r10k/cli/ext/logging.rb +15 -0
  149. data/lib/r10k/cli/help.rb +7 -0
  150. data/lib/r10k/cli/puppetfile.rb +74 -0
  151. data/lib/r10k/cli/version.rb +31 -0
  152. data/lib/r10k/deployment.rb +132 -0
  153. data/lib/r10k/deployment/config.rb +56 -0
  154. data/lib/r10k/environment.rb +37 -0
  155. data/lib/r10k/environment/bare.rb +16 -0
  156. data/lib/r10k/environment/base.rb +150 -0
  157. data/lib/r10k/environment/git.rb +81 -0
  158. data/lib/r10k/environment/name.rb +86 -0
  159. data/lib/r10k/environment/svn.rb +91 -0
  160. data/lib/r10k/environment/with_modules.rb +139 -0
  161. data/lib/r10k/errors.rb +61 -0
  162. data/lib/r10k/errors/formatting.rb +28 -0
  163. data/lib/r10k/feature.rb +56 -0
  164. data/lib/r10k/feature/collection.rb +23 -0
  165. data/lib/r10k/features.rb +20 -0
  166. data/lib/r10k/forge/module_release.rb +228 -0
  167. data/lib/r10k/git.rb +196 -0
  168. data/lib/r10k/git/alternates.rb +63 -0
  169. data/lib/r10k/git/cache.rb +108 -0
  170. data/lib/r10k/git/errors.rb +34 -0
  171. data/lib/r10k/git/rugged.rb +17 -0
  172. data/lib/r10k/git/rugged/bare_repository.rb +85 -0
  173. data/lib/r10k/git/rugged/base_repository.rb +93 -0
  174. data/lib/r10k/git/rugged/cache.rb +11 -0
  175. data/lib/r10k/git/rugged/credentials.rb +91 -0
  176. data/lib/r10k/git/rugged/thin_repository.rb +89 -0
  177. data/lib/r10k/git/rugged/working_repository.rb +145 -0
  178. data/lib/r10k/git/shellgit.rb +9 -0
  179. data/lib/r10k/git/shellgit/bare_repository.rb +43 -0
  180. data/lib/r10k/git/shellgit/base_repository.rb +137 -0
  181. data/lib/r10k/git/shellgit/cache.rb +11 -0
  182. data/lib/r10k/git/shellgit/thin_repository.rb +69 -0
  183. data/lib/r10k/git/shellgit/working_repository.rb +111 -0
  184. data/lib/r10k/git/stateful_repository.rb +95 -0
  185. data/lib/r10k/initializers.rb +67 -0
  186. data/lib/r10k/instance_cache.rb +32 -0
  187. data/lib/r10k/keyed_factory.rb +39 -0
  188. data/lib/r10k/logging.rb +109 -0
  189. data/lib/r10k/logging/terminaloutputter.rb +36 -0
  190. data/lib/r10k/module.rb +38 -0
  191. data/lib/r10k/module/base.rb +113 -0
  192. data/lib/r10k/module/forge.rb +177 -0
  193. data/lib/r10k/module/git.rb +109 -0
  194. data/lib/r10k/module/local.rb +36 -0
  195. data/lib/r10k/module/metadata_file.rb +31 -0
  196. data/lib/r10k/module/svn.rb +112 -0
  197. data/lib/r10k/puppetfile.rb +286 -0
  198. data/lib/r10k/settings.rb +194 -0
  199. data/lib/r10k/settings/collection.rb +123 -0
  200. data/lib/r10k/settings/container.rb +97 -0
  201. data/lib/r10k/settings/definition.rb +124 -0
  202. data/lib/r10k/settings/enum_definition.rb +30 -0
  203. data/lib/r10k/settings/helpers.rb +38 -0
  204. data/lib/r10k/settings/list.rb +107 -0
  205. data/lib/r10k/settings/loader.rb +99 -0
  206. data/lib/r10k/settings/mixin.rb +54 -0
  207. data/lib/r10k/settings/uri_definition.rb +19 -0
  208. data/lib/r10k/source.rb +42 -0
  209. data/lib/r10k/source/base.rb +74 -0
  210. data/lib/r10k/source/exec.rb +51 -0
  211. data/lib/r10k/source/git.rb +142 -0
  212. data/lib/r10k/source/hash.rb +182 -0
  213. data/lib/r10k/source/svn.rb +136 -0
  214. data/lib/r10k/source/yaml.rb +20 -0
  215. data/lib/r10k/source/yamldir.rb +32 -0
  216. data/lib/r10k/svn.rb +6 -0
  217. data/lib/r10k/svn/remote.rb +68 -0
  218. data/lib/r10k/svn/working_dir.rb +125 -0
  219. data/lib/r10k/util/attempt.rb +84 -0
  220. data/lib/r10k/util/basedir.rb +65 -0
  221. data/lib/r10k/util/commands.rb +31 -0
  222. data/lib/r10k/util/exec_env.rb +36 -0
  223. data/lib/r10k/util/license.rb +24 -0
  224. data/lib/r10k/util/platform.rb +42 -0
  225. data/lib/r10k/util/purgeable.rb +88 -0
  226. data/lib/r10k/util/setopts.rb +55 -0
  227. data/lib/r10k/util/subprocess.rb +84 -0
  228. data/lib/r10k/util/subprocess/result.rb +56 -0
  229. data/lib/r10k/util/subprocess/runner.rb +26 -0
  230. data/lib/r10k/util/subprocess/runner/jruby.rb +23 -0
  231. data/lib/r10k/util/subprocess/runner/posix.rb +103 -0
  232. data/lib/r10k/util/subprocess/runner/pump.rb +59 -0
  233. data/lib/r10k/util/subprocess/runner/windows.rb +23 -0
  234. data/lib/r10k/util/subprocess/subprocess_error.rb +24 -0
  235. data/lib/r10k/util/symbolize_keys.rb +35 -0
  236. data/lib/r10k/version.rb +6 -0
  237. data/locales/config.yaml +21 -0
  238. data/locales/r10k.pot +545 -0
  239. data/r10k.gemspec +50 -0
  240. data/r10k.yaml.example +112 -0
  241. data/spec/fixtures/empty/.empty +0 -0
  242. data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
  243. data/spec/fixtures/module/forge/bad_module/metadata.json +1 -0
  244. data/spec/fixtures/module/forge/eight_hundred/Modulefile +8 -0
  245. data/spec/fixtures/module/forge/eight_hundred/metadata.json +19 -0
  246. data/spec/fixtures/unit/action/r10k.yaml +5 -0
  247. data/spec/fixtures/unit/action/r10k_cachedir.yaml +2 -0
  248. data/spec/fixtures/unit/action/r10k_generate_types.yaml +3 -0
  249. data/spec/fixtures/unit/action/r10k_puppet_path.yaml +3 -0
  250. data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +1 -0
  251. data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +5 -0
  252. data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +10 -0
  253. data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +1 -0
  254. data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +1 -0
  255. data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +1 -0
  256. data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +1 -0
  257. data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +1 -0
  258. data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
  259. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
  260. data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
  261. data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
  262. data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
  263. data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
  264. data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +3 -0
  265. data/spec/integration/git/rugged/bare_repository_spec.rb +13 -0
  266. data/spec/integration/git/rugged/thin_repository_spec.rb +14 -0
  267. data/spec/integration/git/rugged/working_repository_spec.rb +48 -0
  268. data/spec/integration/git/shellgit/bare_repository_spec.rb +13 -0
  269. data/spec/integration/git/shellgit/thin_repository_spec.rb +14 -0
  270. data/spec/integration/git/shellgit/working_repository_spec.rb +13 -0
  271. data/spec/integration/git/stateful_repository_spec.rb +159 -0
  272. data/spec/matchers/exit_with.rb +28 -0
  273. data/spec/matchers/match_realpath.rb +18 -0
  274. data/spec/r10k-mocks.rb +3 -0
  275. data/spec/r10k-mocks/mock_config.rb +33 -0
  276. data/spec/r10k-mocks/mock_env.rb +15 -0
  277. data/spec/r10k-mocks/mock_source.rb +13 -0
  278. data/spec/shared-contexts/git-fixtures.rb +55 -0
  279. data/spec/shared-examples/deploy-actions.rb +69 -0
  280. data/spec/shared-examples/git-repository.rb +38 -0
  281. data/spec/shared-examples/git/bare_repository.rb +132 -0
  282. data/spec/shared-examples/git/thin_repository.rb +26 -0
  283. data/spec/shared-examples/git/working_repository.rb +207 -0
  284. data/spec/shared-examples/puppetfile-action.rb +39 -0
  285. data/spec/shared-examples/settings/ancestry.rb +44 -0
  286. data/spec/shared-examples/subprocess-runner.rb +83 -0
  287. data/spec/spec_helper.rb +40 -0
  288. data/spec/unit/action/cri_runner_spec.rb +72 -0
  289. data/spec/unit/action/deploy/deploy_helpers_spec.rb +38 -0
  290. data/spec/unit/action/deploy/display_spec.rb +31 -0
  291. data/spec/unit/action/deploy/environment_spec.rb +395 -0
  292. data/spec/unit/action/deploy/module_spec.rb +139 -0
  293. data/spec/unit/action/puppetfile/check_spec.rb +41 -0
  294. data/spec/unit/action/puppetfile/cri_runner_spec.rb +47 -0
  295. data/spec/unit/action/puppetfile/install_spec.rb +84 -0
  296. data/spec/unit/action/puppetfile/purge_spec.rb +42 -0
  297. data/spec/unit/action/runner_spec.rb +213 -0
  298. data/spec/unit/action/visitor_spec.rb +39 -0
  299. data/spec/unit/cli_spec.rb +9 -0
  300. data/spec/unit/deployment/config_spec.rb +33 -0
  301. data/spec/unit/deployment_spec.rb +162 -0
  302. data/spec/unit/environment/base_spec.rb +109 -0
  303. data/spec/unit/environment/git_spec.rb +97 -0
  304. data/spec/unit/environment/name_spec.rb +135 -0
  305. data/spec/unit/environment/svn_spec.rb +133 -0
  306. data/spec/unit/errors/formatting_spec.rb +84 -0
  307. data/spec/unit/feature_spec.rb +50 -0
  308. data/spec/unit/forge/module_release_spec.rb +213 -0
  309. data/spec/unit/git/alternates_spec.rb +116 -0
  310. data/spec/unit/git/cache_spec.rb +55 -0
  311. data/spec/unit/git/rugged/cache_spec.rb +29 -0
  312. data/spec/unit/git/rugged/credentials_spec.rb +109 -0
  313. data/spec/unit/git/shellgit/cache_spec.rb +27 -0
  314. data/spec/unit/git/stateful_repository_spec.rb +40 -0
  315. data/spec/unit/git_spec.rb +102 -0
  316. data/spec/unit/initializers_spec.rb +68 -0
  317. data/spec/unit/instance_cache_spec.rb +78 -0
  318. data/spec/unit/keyed_factory_spec.rb +51 -0
  319. data/spec/unit/logging/terminaloutputter_spec.rb +53 -0
  320. data/spec/unit/logging_spec.rb +68 -0
  321. data/spec/unit/module/base_spec.rb +72 -0
  322. data/spec/unit/module/forge_spec.rb +207 -0
  323. data/spec/unit/module/git_spec.rb +274 -0
  324. data/spec/unit/module/metadata_file_spec.rb +68 -0
  325. data/spec/unit/module/svn_spec.rb +178 -0
  326. data/spec/unit/module_spec.rb +29 -0
  327. data/spec/unit/puppetfile_spec.rb +300 -0
  328. data/spec/unit/settings/collection_spec.rb +123 -0
  329. data/spec/unit/settings/container_spec.rb +92 -0
  330. data/spec/unit/settings/definition_spec.rb +79 -0
  331. data/spec/unit/settings/enum_definition_spec.rb +20 -0
  332. data/spec/unit/settings/inheritance_spec.rb +38 -0
  333. data/spec/unit/settings/list_spec.rb +88 -0
  334. data/spec/unit/settings/loader_spec.rb +110 -0
  335. data/spec/unit/settings/uri_definition_spec.rb +23 -0
  336. data/spec/unit/settings_spec.rb +246 -0
  337. data/spec/unit/source/base_spec.rb +31 -0
  338. data/spec/unit/source/exec_spec.rb +81 -0
  339. data/spec/unit/source/git_spec.rb +185 -0
  340. data/spec/unit/source/hash_spec.rb +54 -0
  341. data/spec/unit/source/svn_spec.rb +196 -0
  342. data/spec/unit/source/yaml_spec.rb +42 -0
  343. data/spec/unit/source_spec.rb +10 -0
  344. data/spec/unit/svn/remote_spec.rb +21 -0
  345. data/spec/unit/svn/working_dir_spec.rb +56 -0
  346. data/spec/unit/util/attempt_spec.rb +82 -0
  347. data/spec/unit/util/commands_spec.rb +61 -0
  348. data/spec/unit/util/exec_env_spec.rb +56 -0
  349. data/spec/unit/util/purgeable_spec.rb +230 -0
  350. data/spec/unit/util/setopts_spec.rb +59 -0
  351. data/spec/unit/util/subprocess/result_spec.rb +36 -0
  352. data/spec/unit/util/subprocess/runner/posix_spec.rb +7 -0
  353. data/spec/unit/util/subprocess/runner/pump_spec.rb +79 -0
  354. data/spec/unit/util/subprocess/runner/windows_spec.rb +7 -0
  355. data/spec/unit/util/subprocess/subprocess_error_spec.rb +26 -0
  356. data/spec/unit/util/subprocess_spec.rb +65 -0
  357. data/spec/unit/util/symbolize_keys_spec.rb +67 -0
  358. metadata +582 -0
@@ -0,0 +1,70 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-730 - C97977 - Specify HTTP_PROXY environment var and proxy for specific git source'
5
+
6
+ #Init
7
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
8
+ r10k_fqp = get_r10k_fqp(master)
9
+
10
+ git_environments_path = '/root/environments'
11
+ last_commit = git_last_commit(master, git_environments_path)
12
+ git_provider = ENV['GIT_PROVIDER']
13
+
14
+ r10k_config_path = get_r10k_config_file_path(master)
15
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
16
+
17
+ puppetfile =<<-EOS
18
+ mod 'motd',
19
+ :git => 'git://github.com/puppetlabs/puppetlabs-motd'
20
+ EOS
21
+
22
+ proxy_env_value = 'http://cattastic.net:3219'
23
+
24
+ #In-line files
25
+ r10k_conf = <<-CONF
26
+ cachedir: '/var/cache/r10k'
27
+ git:
28
+ provider: '#{git_provider}'
29
+ repositories:
30
+ - remote: 'http://example.com/fake_git_source.git'
31
+ proxy: 'http://foooooooo.unresolvable:3128'
32
+ sources:
33
+ control:
34
+ basedir: "#{env_path}"
35
+ remote: "http://example.com/fake_git_source.git"
36
+ CONF
37
+
38
+ teardown do
39
+ master.clear_env_var('HTTP_PROXY')
40
+
41
+ step 'Restore Original "r10k" Config'
42
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
43
+
44
+ step 'cleanup r10k'
45
+ clean_up_r10k(master, last_commit, git_environments_path)
46
+ end
47
+
48
+ master.add_env_var('HTTP_PROXY', proxy_env_value)
49
+
50
+ step 'Backup Current "r10k" Config'
51
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
52
+
53
+ step 'Update the "r10k" Config'
54
+ create_remote_file(master, r10k_config_path, r10k_conf)
55
+
56
+ step 'Checkout "production" Branch'
57
+ git_on(master, 'checkout production', git_environments_path)
58
+
59
+ step 'Copy Puppetfile to "production" Environment Git Repo'
60
+ create_remote_file(master, "#{git_environments_path}/Puppetfile", puppetfile)
61
+
62
+ step 'Push Changes'
63
+ git_add_commit_push(master, 'production', 'add Puppetfile', git_environments_path)
64
+
65
+ #test
66
+ on(master, "#{r10k_fqp} deploy environment -p", :accept_all_exit_codes => true) do |r|
67
+ regex = /proxy.*foooooooo\.unresolvable/
68
+ assert(r.exit_code == 1, 'expected error code was not observed')
69
+ assert_match(regex, r.stderr, 'The expected error message was not observed' )
70
+ end
@@ -0,0 +1,128 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-92 - C59235 - Single Git Source Using "GIT" Transport Protocol'
5
+
6
+ confine(:to, :platform => 'el')
7
+
8
+ if fact_on(master, "operatingsystemmajrelease").to_i < 6
9
+ skip_test('This version of EL is not supported by this test case!')
10
+ end
11
+
12
+ #Init
13
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
14
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
15
+ r10k_fqp = get_r10k_fqp(master)
16
+
17
+ git_control_remote = 'git://localhost/environments.git'
18
+ git_environments_path = '/root/environments'
19
+ git_provider = ENV['GIT_PROVIDER'] || 'shellgit'
20
+ last_commit = git_last_commit(master, git_environments_path)
21
+
22
+ local_files_root_path = ENV['FILES'] || 'files'
23
+ helloworld_module_path = File.join(local_files_root_path, 'modules', 'helloworld')
24
+
25
+ r10k_config_path = get_r10k_config_file_path(master)
26
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
27
+
28
+ #Manifest
29
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
30
+ site_pp = create_site_pp(master_certname, ' include helloworld')
31
+
32
+ #In-line files
33
+ r10k_conf = <<-CONF
34
+ cachedir: '/var/cache/r10k'
35
+ git:
36
+ provider: '#{git_provider}'
37
+ sources:
38
+ broken:
39
+ basedir: "#{env_path}"
40
+ remote: "#{git_control_remote}"
41
+ CONF
42
+
43
+ git_daemon_xinetd_enable_manifest = <<-MANIFEST
44
+ package { 'git-daemon':
45
+ ensure => present
46
+ }
47
+ include xinetd
48
+ xinetd::service { 'git-daemon':
49
+ port => '9418',
50
+ server => '/usr/libexec/git-core/git-daemon',
51
+ server_args => '--inetd --verbose --syslog --export-all --base-path=/git_repos',
52
+ socket_type => 'stream',
53
+ user => 'nobody',
54
+ wait => 'no',
55
+ service_type => 'UNLISTED',
56
+ disable => 'no'
57
+ }
58
+ MANIFEST
59
+
60
+ git_daemon_xinetd_disable_manifest = <<-MANIFEST
61
+ xinetd::service { 'git-daemon':
62
+ port => '9418',
63
+ server => '/usr/libexec/git-core/git-daemon',
64
+ disable => 'yes'
65
+ }
66
+ MANIFEST
67
+
68
+ #Verification
69
+ notify_message_regex = /I am in the production environment/
70
+
71
+ #Teardown
72
+ teardown do
73
+ step 'Restore Original "r10k" Config'
74
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
75
+
76
+ step 'Stop "xinetd" Service'
77
+ on(master, puppet('apply'), :stdin => git_daemon_xinetd_disable_manifest)
78
+ on(master, puppet('resource', 'service', 'xinetd', 'ensure=stopped'))
79
+
80
+ clean_up_r10k(master, last_commit, git_environments_path)
81
+
82
+ step 'Run Puppet Agent to Clear Plug-in Cache'
83
+ on(agents, puppet('agent', '--test', '--environment production'))
84
+ end
85
+
86
+ #Setup
87
+ step 'Stub Forge on Master'
88
+ stub_forge_on(master)
89
+
90
+ step 'Backup Current "r10k" Config'
91
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
92
+
93
+ step 'Update the "r10k" Config'
94
+ create_remote_file(master, r10k_config_path, r10k_conf)
95
+
96
+ step 'Install "puppetlabs-xinetd" Module'
97
+ on(master, puppet('config print basemodulepath')) do |result|
98
+ (result.stdout.include? ':') ? separator = ':' : separator = ';'
99
+ @module_path = result.stdout.split(separator).first
100
+ end
101
+ on(master, puppet("module install puppetlabs-xinetd --modulepath #{@module_path}"))
102
+
103
+ step 'Install and Configure "git-daemon" service'
104
+ on(master, puppet('apply'), :stdin => git_daemon_xinetd_enable_manifest)
105
+
106
+ step 'Checkout "production" Branch'
107
+ git_on(master, 'checkout production', git_environments_path)
108
+
109
+ step 'Copy "helloworld" Module to "production" Environment Git Repo'
110
+ scp_to(master, helloworld_module_path, File.join(git_environments_path, "site", 'helloworld'))
111
+
112
+ step 'Inject New "site.pp" to the "production" Environment'
113
+ inject_site_pp(master, site_pp_path, site_pp)
114
+
115
+ step 'Push Changes'
116
+ git_add_commit_push(master, 'production', 'Update site.pp and add module.', git_environments_path)
117
+
118
+ #Tests
119
+ step 'Deploy "production" Environment via r10k'
120
+ on(master, "#{r10k_fqp} deploy environment -v")
121
+
122
+ agents.each do |agent|
123
+ step "Run Puppet Agent"
124
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
125
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
126
+ assert_match(notify_message_regex, result.stdout, 'Expected message not found!')
127
+ end
128
+ end
@@ -0,0 +1,87 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-92 - C59234 - Single Git Source Using "SSH" Transport Protocol'
5
+
6
+ skip_test 'refactor to use shared private key internal to puppet'
7
+
8
+ #Init
9
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
10
+ git_control_remote = 'git@github.com:puppetlabs/codemgmt-92.git'
11
+ git_provider = ENV['GIT_PROVIDER'] || 'shellgit'
12
+ r10k_fqp = get_r10k_fqp(master)
13
+
14
+ jenkins_key_path = File.file?("#{ENV['HOME']}/.ssh/id_rsa") ? "#{ENV['HOME']}/.ssh/id_rsa" : File.expand_path('~/.ssh/id_rsa-jenkins')
15
+ ssh_private_key_path = '/root/.ssh/id_rsa-jenkins'
16
+ ssh_config_path = '/root/.ssh/config'
17
+
18
+ r10k_config_path = get_r10k_config_file_path(master)
19
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
20
+
21
+ #In-line files
22
+ r10k_conf = <<-CONF
23
+ cachedir: '/var/cache/r10k'
24
+ git:
25
+ provider: '#{git_provider}'
26
+ private_key: '#{ssh_private_key_path}'
27
+ sources:
28
+ broken:
29
+ basedir: "#{env_path}"
30
+ remote: "#{git_control_remote}"
31
+ CONF
32
+
33
+ ssh_config = <<-CONF
34
+ StrictHostKeyChecking no
35
+
36
+ Host github.com
37
+ IdentityFile #{ssh_private_key_path}
38
+ CONF
39
+
40
+ #Verification
41
+ notify_message_regex = /I am in the production environment/
42
+
43
+ #Teardown
44
+ teardown do
45
+ step 'Restore Original "r10k" Config'
46
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
47
+
48
+ step 'Remove Jenkins SSH Key'
49
+ on(master, "rm -rf #{ssh_private_key_path}")
50
+
51
+ step 'Remove SSH Config'
52
+ on(master, "rm -rf #{ssh_config_path}")
53
+
54
+ step 'Restore Original "production" Environment via r10k'
55
+ on(master, "#{r10k_fqp} deploy environment -v")
56
+ end
57
+
58
+ #Setup
59
+ step 'Backup Current "r10k" Config'
60
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
61
+
62
+ if File.file?(jenkins_key_path) == false
63
+ skip_test('Skipping test because necessary SSH key is not present!')
64
+ end
65
+
66
+ step 'Update the "r10k" Config'
67
+ create_remote_file(master, r10k_config_path, r10k_conf)
68
+
69
+ step 'Configure SSH to Use SSH Key for "github.com"'
70
+ create_remote_file(master, ssh_config_path, ssh_config)
71
+ on(master, "chmod 600 #{ssh_config_path}")
72
+
73
+ step 'Copy SSH Key to Master'
74
+ scp_to(master, jenkins_key_path, ssh_private_key_path)
75
+ on(master, "chmod 600 #{ssh_private_key_path}")
76
+
77
+ #Tests
78
+ step 'Deploy "production" Environment via r10k'
79
+ on(master, "#{r10k_fqp} deploy environment -v")
80
+
81
+ agents.each do |agent|
82
+ step "Run Puppet Agent"
83
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 2) do |result|
84
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
85
+ assert_match(notify_message_regex, result.stdout, 'Expected message not found!')
86
+ end
87
+ end
@@ -0,0 +1,70 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-92 - C59238 - Single Git Source with Git Sub-module'
5
+
6
+ #Init
7
+ master_certname = on(master, puppet('config', 'print', 'certname')).stdout.rstrip
8
+
9
+ git_repo_module_parent_path = '/git_repos'
10
+ git_repo_module_name = 'helloworld'
11
+ git_repo_module_path = File.join(git_repo_module_parent_path, "#{git_repo_module_name}.git")
12
+ git_clone_module_path = '/root/helloworld_module'
13
+ git_environments_path = '/root/environments'
14
+ last_commit = git_last_commit(master, git_environments_path)
15
+ r10k_fqp = get_r10k_fqp(master)
16
+
17
+ local_files_root_path = ENV['FILES'] || 'files'
18
+ helloworld_module_path = File.join(local_files_root_path, 'modules', 'helloworld')
19
+
20
+ #Manifest
21
+ site_pp_path = File.join(git_environments_path, 'manifests', 'site.pp')
22
+ site_pp = create_site_pp(master_certname, ' include helloworld')
23
+
24
+ #Verification
25
+ notify_message_regex = /I am in the production environment/
26
+
27
+ #Teardown
28
+ teardown do
29
+ 'Remove "helloworld" Git Repo'
30
+ on(master, "rm -rf #{git_repo_module_path}")
31
+
32
+ 'Remove "helloworld" Git Clone'
33
+ on(master, "rm -rf #{git_clone_module_path}")
34
+
35
+ clean_up_r10k(master, last_commit, git_environments_path)
36
+ end
37
+
38
+ #Setup
39
+ step 'Create Git Repo for "helloworld" Module'
40
+ git_init_bare_repo_and_clone(master, git_repo_module_parent_path, git_repo_module_name, git_clone_module_path)
41
+
42
+ step 'Copy "helloworld" Module to Git Repo'
43
+ scp_to(master, helloworld_module_path, File.join(git_clone_module_path, 'helloworld'))
44
+ git_add_commit_push(master, 'master', 'Add module.', git_clone_module_path)
45
+
46
+ step 'Add "helloworld" Module Git Repo as Submodule'
47
+ on(master, "cd #{git_environments_path};git submodule add file://#{git_repo_module_path} dist")
48
+
49
+ step 'Checkout "production" Branch'
50
+ git_on(master, 'checkout production', git_environments_path)
51
+
52
+ step 'Inject New "site.pp" to the "production" Environment'
53
+ inject_site_pp(master, site_pp_path, site_pp)
54
+
55
+ step 'Push Changes'
56
+ git_add_commit_push(master, 'production', 'Update site.pp.', git_environments_path)
57
+
58
+ #Tests
59
+ step 'Deploy "production" Environment via r10k'
60
+ on(master, "#{r10k_fqp} deploy environment -v")
61
+
62
+ agents.each do |agent|
63
+ step "Run Puppet Agent"
64
+ on(agent, puppet('agent', '--test', '--environment production'), :acceptable_exit_codes => 1) do |result|
65
+ expect_failure('Expected to fail due to RK-30') do
66
+ assert_no_match(/Error:/, result.stderr, 'Unexpected error was detected!')
67
+ assert_match(notify_message_regex, result.stdout, 'Expected message not found!')
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,38 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ require 'digest/sha1'
5
+ test_name 'CODEMGMT-101 - C59261 - Attempt to Deploy Environment with Broken Git Remote'
6
+
7
+ #Init
8
+ git_control_remote = '/git_repos/environments.git'
9
+ prod_branch_head_ref_path = File.join(git_control_remote, 'refs', 'heads', 'production')
10
+ prod_branch_head_ref_path_backup = '/tmp/production.bak'
11
+ r10k_fqp = get_r10k_fqp(master)
12
+
13
+ invalid_sha_ref = Digest::SHA1.hexdigest('broken')
14
+
15
+ #Verification
16
+ error_message_regex = /ERROR\].*Blah/m
17
+
18
+ #Teardown
19
+ teardown do
20
+ step 'Restore Original "production" Branch Head Ref'
21
+ on(master, "mv #{prod_branch_head_ref_path_backup} #{prod_branch_head_ref_path}")
22
+ end
23
+
24
+ #Setup
25
+ step 'Backup Current "production" Branch Head Ref'
26
+ on(master, "mv #{prod_branch_head_ref_path} #{prod_branch_head_ref_path_backup}")
27
+
28
+ step 'Inject Corrupt "production" Branch Head Ref'
29
+ create_remote_file(master, prod_branch_head_ref_path, "#{invalid_sha_ref}\n")
30
+ on(master, "chmod 644 #{prod_branch_head_ref_path}")
31
+
32
+ #Tests
33
+ step 'Attempt to Deploy via r10k'
34
+ on(master, "#{r10k_fqp} deploy environment -v -t", :acceptable_exit_codes => [0,1]) do |result|
35
+ expect_failure('Expected to fail due to RK-28') do
36
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
37
+ end
38
+ end
@@ -0,0 +1,46 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ test_name 'CODEMGMT-101 - C59236 - Attempt to Deploy Environment with Unauthorized "HTTPS" Git Source'
5
+
6
+ #Init
7
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
8
+ git_control_remote = 'https://bad:user@github.com/puppetlabs/codemgmt-92.git'
9
+ git_provider = ENV['GIT_PROVIDER'] || 'shellgit'
10
+ r10k_fqp = get_r10k_fqp(master)
11
+
12
+ r10k_config_path = get_r10k_config_file_path(master)
13
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
14
+
15
+ #In-line files
16
+ r10k_conf = <<-CONF
17
+ cachedir: '/var/cache/r10k'
18
+ git:
19
+ provider: '#{git_provider}'
20
+ sources:
21
+ broken:
22
+ basedir: "#{env_path}"
23
+ remote: "#{git_control_remote}"
24
+ CONF
25
+
26
+ #Verification
27
+ error_message_regex = /ERROR.*Unable to determine current branches for Git source 'broken'/m
28
+
29
+ #Teardown
30
+ teardown do
31
+ step 'Restore Original "r10k" Config'
32
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
33
+ end
34
+
35
+ #Setup
36
+ step 'Backup Current "r10k" Config'
37
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
38
+
39
+ step 'Update the "r10k" Config'
40
+ create_remote_file(master, r10k_config_path, r10k_conf)
41
+
42
+ #Tests
43
+ step 'Attempt to Deploy via r10k'
44
+ on(master, "#{r10k_fqp} deploy environment -v", :acceptable_exit_codes => 1) do |result|
45
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
46
+ end
@@ -0,0 +1,73 @@
1
+ require 'git_utils'
2
+ require 'r10k_utils'
3
+ require 'master_manipulator'
4
+ require 'openssl'
5
+ test_name 'CODEMGMT-101 - C59237 - Attempt to Deploy Environment with Unauthorized "SSH" Git Source'
6
+
7
+ #Init
8
+ env_path = on(master, puppet('config print environmentpath')).stdout.rstrip
9
+ git_control_remote = 'git@github.com:puppetlabs/codemgmt-92.git'
10
+ git_provider = ENV['GIT_PROVIDER'] || 'shellgit'
11
+ r10k_fqp = get_r10k_fqp(master)
12
+
13
+ unauthorized_rsa_key = OpenSSL::PKey::RSA.new(2048)
14
+ ssh_private_key_path = '/root/.ssh/unauthorized_key'
15
+ ssh_config_path = '/root/.ssh/config'
16
+
17
+ r10k_config_path = get_r10k_config_file_path(master)
18
+ r10k_config_bak_path = "#{r10k_config_path}.bak"
19
+
20
+ #In-line files
21
+ r10k_conf = <<-CONF
22
+ cachedir: '/var/cache/r10k'
23
+ git:
24
+ provider: '#{git_provider}'
25
+ private_key: '#{ssh_private_key_path}'
26
+ sources:
27
+ broken:
28
+ basedir: "#{env_path}"
29
+ remote: "#{git_control_remote}"
30
+ CONF
31
+
32
+ ssh_config = <<-CONF
33
+ StrictHostKeyChecking no
34
+
35
+ Host github.com
36
+ IdentityFile #{ssh_private_key_path}
37
+ CONF
38
+
39
+ #Verification
40
+ error_message_regex = /ERROR.*Unable to determine current branches for Git source 'broken'/m
41
+
42
+ #Teardown
43
+ teardown do
44
+ step 'Restore Original "r10k" Config'
45
+ on(master, "mv #{r10k_config_bak_path} #{r10k_config_path}")
46
+
47
+ step 'Remove Unauthorized SSH Key'
48
+ on(master, "rm -rf #{ssh_private_key_path}")
49
+
50
+ step 'Remove SSH Config'
51
+ on(master, "rm -rf #{ssh_config_path}")
52
+ end
53
+
54
+ #Setup
55
+ step 'Backup Current "r10k" Config'
56
+ on(master, "mv #{r10k_config_path} #{r10k_config_bak_path}")
57
+
58
+ step 'Update the "r10k" Config'
59
+ create_remote_file(master, r10k_config_path, r10k_conf)
60
+
61
+ step 'Copy Unauthorized SSH Key to Master'
62
+ create_remote_file(master, ssh_config_path, ssh_config)
63
+ on(master, "chmod 600 #{ssh_config_path}")
64
+
65
+ step 'Configure SSH to Use Unauthorized SSH Key for "github.com"'
66
+ create_remote_file(master, ssh_private_key_path, unauthorized_rsa_key)
67
+ on(master, "chmod 600 #{ssh_private_key_path}")
68
+
69
+ #Tests
70
+ step 'Attempt to Deploy via r10k'
71
+ on(master, "#{r10k_fqp} deploy environment -v", :acceptable_exit_codes => 1) do |result|
72
+ assert_match(error_message_regex, result.stderr, 'Expected message not found!')
73
+ end