hybrid_platforms_conductor 32.17.0 → 33.0.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 (283) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/README.md +6 -3
  4. data/bin/check-node +0 -1
  5. data/bin/deploy +0 -1
  6. data/bin/get_impacted_nodes +0 -1
  7. data/bin/last_deploys +12 -8
  8. data/bin/nodes_to_deploy +6 -6
  9. data/bin/setup +6 -6
  10. data/bin/topograph +1 -1
  11. data/docs/config_dsl.md +45 -1
  12. data/docs/executables.md +6 -7
  13. data/docs/executables/check-node.md +3 -3
  14. data/docs/executables/deploy.md +3 -3
  15. data/docs/executables/dump_nodes_json.md +3 -3
  16. data/docs/executables/test.md +3 -3
  17. data/docs/executables/topograph.md +3 -3
  18. data/docs/gen/mermaid/README.md-0.png +0 -0
  19. data/docs/gen/mermaid/docs/executables/check-node.md-0.png +0 -0
  20. data/docs/gen/mermaid/docs/executables/deploy.md-0.png +0 -0
  21. data/docs/gen/mermaid/docs/executables/free_ips.md-0.png +0 -0
  22. data/docs/gen/mermaid/docs/executables/get_impacted_nodes.md-0.png +0 -0
  23. data/docs/gen/mermaid/docs/executables/last_deploys.md-0.png +0 -0
  24. data/docs/gen/mermaid/docs/executables/nodes_to_deploy.md-0.png +0 -0
  25. data/docs/gen/mermaid/docs/executables/report.md-0.png +0 -0
  26. data/docs/gen/mermaid/docs/executables/run.md-0.png +0 -0
  27. data/docs/gen/mermaid/docs/executables/ssh_config.md-0.png +0 -0
  28. data/docs/gen/mermaid/docs/executables/test.md-0.png +0 -0
  29. data/docs/plugins.md +46 -0
  30. data/docs/plugins/connector/ssh.md +1 -1
  31. data/docs/plugins/log/remote_fs.md +26 -0
  32. data/docs/plugins/secrets_reader/cli.md +31 -0
  33. data/docs/plugins/secrets_reader/thycotic.md +46 -0
  34. data/docs/plugins/test/check_deploy_and_idempotence.md +1 -1
  35. data/docs/plugins/test/connection.md +1 -0
  36. data/docs/plugins/test/deploy_removes_root_access.md +1 -1
  37. data/docs/plugins/test/file_system.md +1 -0
  38. data/docs/plugins/test/hostname.md +1 -0
  39. data/docs/plugins/test/ip.md +1 -0
  40. data/docs/plugins/test/local_users.md +1 -0
  41. data/docs/plugins/test/mounts.md +1 -0
  42. data/docs/plugins/test/orphan_files.md +1 -0
  43. data/docs/plugins/test/ports.md +1 -0
  44. data/docs/plugins/test/spectre.md +1 -0
  45. data/docs/plugins/test/vulnerabilities.md +1 -0
  46. data/lib/hybrid_platforms_conductor/action.rb +4 -4
  47. data/lib/hybrid_platforms_conductor/actions_executor.rb +45 -43
  48. data/lib/hybrid_platforms_conductor/bitbucket.rb +5 -4
  49. data/lib/hybrid_platforms_conductor/cmd_runner.rb +13 -12
  50. data/lib/hybrid_platforms_conductor/cmdb.rb +2 -2
  51. data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +2 -1
  52. data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +2 -1
  53. data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +5 -4
  54. data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +4 -3
  55. data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
  56. data/lib/hybrid_platforms_conductor/config.rb +8 -4
  57. data/lib/hybrid_platforms_conductor/confluence.rb +1 -1
  58. data/lib/hybrid_platforms_conductor/connector.rb +5 -2
  59. data/lib/hybrid_platforms_conductor/core_extensions/cleanroom/fix_kwargs.rb +116 -0
  60. data/lib/hybrid_platforms_conductor/core_extensions/symbol/zero.rb +24 -0
  61. data/lib/hybrid_platforms_conductor/credentials.rb +39 -36
  62. data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +4 -1
  63. data/lib/hybrid_platforms_conductor/deployer.rb +275 -224
  64. data/lib/hybrid_platforms_conductor/executable.rb +20 -15
  65. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +10 -7
  66. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +1 -1
  67. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +2 -2
  68. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +4 -4
  69. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +2 -0
  70. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +45 -49
  71. data/lib/hybrid_platforms_conductor/hpc_plugins/log/my_log_plugin.rb.sample +100 -0
  72. data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +180 -0
  73. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef.rb +68 -66
  74. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +13 -0
  75. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +39 -38
  76. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +5 -4
  77. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +43 -45
  78. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +18 -20
  79. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +118 -117
  80. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +39 -43
  81. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +9 -13
  82. data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +2 -2
  83. data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +28 -21
  84. data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +26 -22
  85. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +77 -0
  86. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/my_secrets_reader_plugin.rb.sample +46 -0
  87. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +90 -0
  88. data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +3 -3
  89. data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -2
  90. data/lib/hybrid_platforms_conductor/hpc_plugins/test/connection.rb +3 -1
  91. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +7 -21
  92. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +21 -19
  93. data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +2 -2
  94. data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +2 -2
  95. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +21 -22
  96. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +19 -21
  97. data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +2 -3
  98. data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +3 -1
  99. data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +2 -2
  100. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +4 -2
  101. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +21 -22
  102. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +10 -12
  103. data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +9 -9
  104. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +5 -3
  105. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +5 -3
  106. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +13 -10
  107. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +5 -3
  108. data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +5 -5
  109. data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +5 -5
  110. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +7 -7
  111. data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +3 -3
  112. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +27 -25
  113. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +2 -2
  114. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +8 -6
  115. data/lib/hybrid_platforms_conductor/io_router.rb +14 -13
  116. data/lib/hybrid_platforms_conductor/json_dumper.rb +2 -2
  117. data/lib/hybrid_platforms_conductor/log.rb +31 -0
  118. data/lib/hybrid_platforms_conductor/logger_helpers.rb +19 -16
  119. data/lib/hybrid_platforms_conductor/nodes_handler.rb +89 -71
  120. data/lib/hybrid_platforms_conductor/parallel_threads.rb +7 -11
  121. data/lib/hybrid_platforms_conductor/platform_handler.rb +7 -7
  122. data/lib/hybrid_platforms_conductor/platforms_handler.rb +5 -3
  123. data/lib/hybrid_platforms_conductor/plugin.rb +2 -2
  124. data/lib/hybrid_platforms_conductor/plugins.rb +14 -8
  125. data/lib/hybrid_platforms_conductor/provisioner.rb +4 -4
  126. data/lib/hybrid_platforms_conductor/report.rb +2 -2
  127. data/lib/hybrid_platforms_conductor/reports_handler.rb +3 -2
  128. data/lib/hybrid_platforms_conductor/secrets_reader.rb +31 -0
  129. data/lib/hybrid_platforms_conductor/services_handler.rb +32 -29
  130. data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +18 -0
  131. data/lib/hybrid_platforms_conductor/test_report.rb +15 -18
  132. data/lib/hybrid_platforms_conductor/tests_runner.rb +116 -118
  133. data/lib/hybrid_platforms_conductor/thycotic.rb +28 -19
  134. data/lib/hybrid_platforms_conductor/topographer.rb +200 -190
  135. data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +8 -8
  136. data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +4 -4
  137. data/lib/hybrid_platforms_conductor/version.rb +1 -1
  138. data/spec/hybrid_platforms_conductor_test.rb +33 -12
  139. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +18 -11
  140. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +2 -2
  141. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +32 -21
  142. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +75 -49
  143. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +27 -15
  144. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +90 -59
  145. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +46 -44
  146. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +12 -8
  147. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +4 -7
  148. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +21 -22
  149. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +23 -24
  150. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +10 -6
  151. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +106 -75
  152. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +145 -126
  153. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +3 -3
  154. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +29 -25
  155. data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +167 -142
  156. data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +272 -244
  157. data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +16 -16
  158. data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +36 -36
  159. data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +24 -22
  160. data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +4 -2
  161. data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +43 -5
  162. data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +199 -216
  163. data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +223 -0
  164. data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +55 -59
  165. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +36 -62
  166. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +17 -17
  167. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +4 -4
  168. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +44 -51
  169. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +3 -3
  170. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +12 -16
  171. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +31 -19
  172. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +324 -266
  173. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +89 -61
  174. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +117 -93
  175. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +71 -54
  176. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +10 -8
  177. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +80 -60
  178. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +1 -1
  179. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +1 -1
  180. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +1 -1
  181. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +64 -0
  182. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +268 -0
  183. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +8 -10
  184. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +33 -24
  185. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +64 -51
  186. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +3 -3
  187. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +50 -51
  188. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +91 -81
  189. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +14 -16
  190. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +51 -75
  191. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +35 -26
  192. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +24 -16
  193. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +29 -19
  194. data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +4 -4
  195. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/config_dsl_spec.rb +2 -2
  196. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/deploy_output_parsing_spec.rb +6 -6
  197. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +57 -99
  198. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/inventory_spec.rb +4 -4
  199. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/packaging_spec.rb +32 -35
  200. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/services_deployment_spec.rb +10 -10
  201. data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +38 -27
  202. data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +46 -52
  203. data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +2 -2
  204. data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +90 -58
  205. data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +38 -34
  206. data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +11 -9
  207. data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +193 -171
  208. data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +66 -54
  209. data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +147 -133
  210. data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +69 -49
  211. data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +5 -4
  212. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +8 -5
  213. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +8 -5
  214. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +30 -27
  215. data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +12 -9
  216. data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +48 -47
  217. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +5 -5
  218. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +5 -5
  219. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +5 -5
  220. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +9 -9
  221. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb2.rb → test_cmdb_2.rb} +6 -6
  222. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +3 -3
  223. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb_others2.rb → test_cmdb_others_2.rb} +2 -2
  224. data/spec/hybrid_platforms_conductor_test/docs_spec.rb +1 -1
  225. data/spec/hybrid_platforms_conductor_test/executables/{check-node_spec.rb → check_node_spec.rb} +4 -6
  226. data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +4 -6
  227. data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +76 -77
  228. data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +159 -113
  229. data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +299 -160
  230. data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +4 -6
  231. data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +3 -5
  232. data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +8 -8
  233. data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +12 -196
  234. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +9 -10
  235. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +9 -10
  236. data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +1 -1
  237. data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +22 -22
  238. data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +22 -16
  239. data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +32 -32
  240. data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +7 -9
  241. data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +3 -5
  242. data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +2 -2
  243. data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +4 -3
  244. data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +2 -2
  245. data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +1 -1
  246. data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +12 -13
  247. data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +245 -56
  248. data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +11 -11
  249. data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +1 -1
  250. data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +39 -28
  251. data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +1 -1
  252. data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +86 -111
  253. data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +1 -1
  254. data/spec/hybrid_platforms_conductor_test/helpers/serverless_chef_helpers.rb +3 -3
  255. data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +1 -1
  256. data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +1 -1
  257. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id1.rb → test_plugin_id_1.rb} +0 -0
  258. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id2.rb → test_plugin_id_2.rb} +0 -0
  259. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/test_plugin_type/{test_plugin_id3.rb → test_plugin_id_3.rb} +0 -0
  260. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/{test_plugin_type2/test_plugin_id4.rb → test_plugin_type_2/test_plugin_id_4.rb} +0 -0
  261. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +1 -1
  262. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/{test2.rb → test_2.rb} +0 -0
  263. data/spec/hybrid_platforms_conductor_test/rubocop_spec.rb +31 -0
  264. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/1_node/nodes/node.json +3 -3
  265. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/data_bags/nodes/node.json +3 -3
  266. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  267. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/other_cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  268. data/spec/hybrid_platforms_conductor_test/shared_examples/deployer.rb +952 -0
  269. data/spec/hybrid_platforms_conductor_test/test_connector.rb +3 -3
  270. data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +84 -0
  271. data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +105 -0
  272. data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +1 -0
  273. data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +1 -0
  274. data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +1 -0
  275. data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +1 -0
  276. data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +2 -2
  277. data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +45 -0
  278. data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +5 -6
  279. data/spec/spec_helper.rb +17 -18
  280. data/tools/check_md +16 -20
  281. data/tools/generate_mermaid +1 -1
  282. metadata +195 -144
  283. data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +0 -916
@@ -7,7 +7,7 @@ describe 'executables\' Reports Handler options' do
7
7
  # * Parameters::
8
8
  # * *repository* (String): Platform's repository
9
9
  def with_test_platform_for_reports_handler_options
10
- with_test_platform do |repository|
10
+ with_test_platform({}) do |repository|
11
11
  register_report_plugins(test_reports_handler, report_format: HybridPlatformsConductorTest::ReportPlugin)
12
12
  yield repository
13
13
  end
@@ -1,7 +1,7 @@
1
1
  describe 'executables\' Tests Runner options' do
2
2
 
3
3
  it 'specifies a given test to execute' do
4
- with_test_platform do
4
+ with_test_platform({}) do
5
5
  expect(test_tests_runner).to receive(:run_tests).with([]) do
6
6
  expect(test_tests_runner.tests.sort).to eq %i[my_test]
7
7
  0
@@ -14,12 +14,12 @@ describe 'executables\' Tests Runner options' do
14
14
  end
15
15
 
16
16
  it 'specifies several tests to execute' do
17
- with_test_platform do
17
+ with_test_platform({}) do
18
18
  expect(test_tests_runner).to receive(:run_tests).with([]) do
19
- expect(test_tests_runner.tests.sort).to eq %i[my_test1 my_test2]
19
+ expect(test_tests_runner.tests.sort).to eq %i[my_test_1 my_test_2]
20
20
  0
21
21
  end
22
- exit_code, stdout, stderr = run 'test', '--test', 'my_test1', '--test', 'my_test2'
22
+ exit_code, stdout, stderr = run 'test', '--test', 'my_test_1', '--test', 'my_test_2'
23
23
  expect(exit_code).to eq 0
24
24
  expect(stdout).to eq ''
25
25
  expect(stderr).to eq ''
@@ -27,11 +27,11 @@ describe 'executables\' Tests Runner options' do
27
27
  end
28
28
 
29
29
  it 'specifies a tests file to execute' do
30
- with_test_platform do |repository|
30
+ with_test_platform({}) do |repository|
31
31
  tests_file = "#{repository}/my_tests.txt"
32
- File.write(tests_file, "my_test1\n# Comment to ignore\nmy_test2\n")
32
+ File.write(tests_file, "my_test_1\n# Comment to ignore\nmy_test_2\n")
33
33
  expect(test_tests_runner).to receive(:run_tests).with([]) do
34
- expect(test_tests_runner.tests.sort).to eq %i[my_test1 my_test2]
34
+ expect(test_tests_runner.tests.sort).to eq %i[my_test_1 my_test_2]
35
35
  0
36
36
  end
37
37
  exit_code, stdout, stderr = run 'test', '--tests-list', tests_file
@@ -42,16 +42,16 @@ describe 'executables\' Tests Runner options' do
42
42
  end
43
43
 
44
44
  it 'specifies a mix of tests files and test names to execute' do
45
- with_test_platform do |repository|
46
- tests_file1 = "#{repository}/my_tests1.txt"
47
- File.write(tests_file1, "my_test1\n# Comment to ignore\nmy_test2\n")
48
- tests_file2 = "#{repository}/my_tests2.txt"
49
- File.write(tests_file2, "my_test4\n# Comment to ignore\nmy_test5\n")
45
+ with_test_platform({}) do |repository|
46
+ tests_file_1 = "#{repository}/my_tests1.txt"
47
+ File.write(tests_file_1, "my_test_1\n# Comment to ignore\nmy_test_2\n")
48
+ tests_file_2 = "#{repository}/my_tests2.txt"
49
+ File.write(tests_file_2, "my_test_4\n# Comment to ignore\nmy_test_5\n")
50
50
  expect(test_tests_runner).to receive(:run_tests).with([]) do
51
- expect(test_tests_runner.tests.sort).to eq %i[my_test1 my_test2 my_test3 my_test4 my_test5 my_test6]
51
+ expect(test_tests_runner.tests.sort).to eq %i[my_test_1 my_test_2 my_test_3 my_test_4 my_test_5 my_test_6]
52
52
  0
53
53
  end
54
- exit_code, stdout, stderr = run 'test', '--tests-list', tests_file1, '--test', 'my_test3', '--tests-list', tests_file2, '--test', 'my_test6'
54
+ exit_code, stdout, stderr = run 'test', '--tests-list', tests_file_1, '--test', 'my_test_3', '--tests-list', tests_file_2, '--test', 'my_test_6'
55
55
  expect(exit_code).to eq 0
56
56
  expect(stdout).to eq ''
57
57
  expect(stderr).to eq ''
@@ -59,7 +59,7 @@ describe 'executables\' Tests Runner options' do
59
59
  end
60
60
 
61
61
  it 'uses current run_logs instead of executing new check-nodes' do
62
- with_test_platform do
62
+ with_test_platform({}) do
63
63
  expect(test_tests_runner).to receive(:run_tests).with([]) do
64
64
  expect(test_tests_runner.skip_run).to eq true
65
65
  0
@@ -72,7 +72,7 @@ describe 'executables\' Tests Runner options' do
72
72
  end
73
73
 
74
74
  it 'reports into a given format' do
75
- with_test_platform do
75
+ with_test_platform({}) do
76
76
  expect(test_tests_runner).to receive(:run_tests).with([]) do
77
77
  expect(test_tests_runner.reports).to eq %i[my_report]
78
78
  0
@@ -85,12 +85,12 @@ describe 'executables\' Tests Runner options' do
85
85
  end
86
86
 
87
87
  it 'reports into several formats' do
88
- with_test_platform do
88
+ with_test_platform({}) do
89
89
  expect(test_tests_runner).to receive(:run_tests).with([]) do
90
- expect(test_tests_runner.reports.sort).to eq %i[my_report1 my_report2].sort
90
+ expect(test_tests_runner.reports.sort).to eq %i[my_report_1 my_report_2].sort
91
91
  0
92
92
  end
93
- exit_code, stdout, stderr = run 'test', '--report', 'my_report1', '--report', 'my_report2'
93
+ exit_code, stdout, stderr = run 'test', '--report', 'my_report_1', '--report', 'my_report_2'
94
94
  expect(exit_code).to eq 0
95
95
  expect(stdout).to eq ''
96
96
  expect(stderr).to eq ''
@@ -98,7 +98,7 @@ describe 'executables\' Tests Runner options' do
98
98
  end
99
99
 
100
100
  it 'specifies the number of max threads for connections to nodes' do
101
- with_test_platform do
101
+ with_test_platform({}) do
102
102
  expect(test_tests_runner).to receive(:run_tests).with([]) do
103
103
  expect(test_tests_runner.max_threads_connection_on_nodes).to eq 43
104
104
  0
@@ -111,7 +111,7 @@ describe 'executables\' Tests Runner options' do
111
111
  end
112
112
 
113
113
  it 'specifies the number of max threads for node tests' do
114
- with_test_platform do
114
+ with_test_platform({}) do
115
115
  expect(test_tests_runner).to receive(:run_tests).with([]) do
116
116
  expect(test_tests_runner.max_threads_nodes).to eq 43
117
117
  0
@@ -124,7 +124,7 @@ describe 'executables\' Tests Runner options' do
124
124
  end
125
125
 
126
126
  it 'specifies the number of max threads for platform tests' do
127
- with_test_platform do
127
+ with_test_platform({}) do
128
128
  expect(test_tests_runner).to receive(:run_tests).with([]) do
129
129
  expect(test_tests_runner.max_threads_platforms).to eq 43
130
130
  0
@@ -1,57 +1,63 @@
1
1
  describe 'report executable' do
2
2
 
3
3
  it 'reports by default on all nodes' do
4
- with_test_platform(nodes: { 'node1' => { services: ['node1_service'] }, 'node2' => { services: ['node2_service'] } }) do
4
+ with_test_platform({ nodes: { 'node1' => { services: ['node1_service'] }, 'node2' => { services: ['node2_service'] } } }) do
5
5
  exit_code, stdout, stderr = run 'report'
6
6
  expect(exit_code).to eq 0
7
- expect(stdout).to eq <<~EOS
7
+ expect(stdout).to eq <<~EO_STDOUT
8
8
  +-------+----------+-----------+----+-----------+----+-------------+---------------+
9
9
  | Node | Platform | Host name | IP | Physical? | OS | Description | Services |
10
10
  +-------+----------+-----------+----+-----------+----+-------------+---------------+
11
11
  | node1 | platform | | | No | | | node1_service |
12
12
  | node2 | platform | | | No | | | node2_service |
13
13
  +-------+----------+-----------+----+-----------+----+-------------+---------------+
14
- EOS
14
+ EO_STDOUT
15
15
  expect(stderr).to eq ''
16
16
  end
17
17
  end
18
18
 
19
19
  it 'reports on given nodes only' do
20
- with_test_platform(nodes: { 'node1' => { services: ['node1_service'] }, 'node2' => { services: ['node2_service'] } }) do
20
+ with_test_platform({ nodes: { 'node1' => { services: ['node1_service'] }, 'node2' => { services: ['node2_service'] } } }) do
21
21
  exit_code, stdout, stderr = run 'report', '--node', 'node2'
22
22
  expect(exit_code).to eq 0
23
- expect(stdout).to eq <<~EOS
23
+ expect(stdout).to eq <<~EO_STDOUT
24
24
  +-------+----------+-----------+----+-----------+----+-------------+---------------+
25
25
  | Node | Platform | Host name | IP | Physical? | OS | Description | Services |
26
26
  +-------+----------+-----------+----+-----------+----+-------------+---------------+
27
27
  | node2 | platform | | | No | | | node2_service |
28
28
  +-------+----------+-----------+----+-----------+----+-------------+---------------+
29
- EOS
29
+ EO_STDOUT
30
30
  expect(stderr).to eq ''
31
31
  end
32
32
  end
33
33
 
34
34
  it 'reports info from metadata' do
35
- with_test_platform(nodes: { 'node' => {
36
- meta: {
37
- hostname: 'node.domain.com',
38
- image: 'debian_10',
39
- description: 'A great server'
40
- },
41
- services: ['node_service1', 'node_service2']
42
- } }) do
35
+ with_test_platform(
36
+ {
37
+ nodes: {
38
+ 'node' => {
39
+ meta: {
40
+ hostname: 'node.domain.com',
41
+ image: 'debian_10',
42
+ description: 'A great server'
43
+ },
44
+ services: %w[node_service1 node_service2]
45
+ }
46
+ }
47
+ }
48
+ ) do
43
49
  with_cmd_runner_mocked [
44
50
  ['getent hosts node.domain.com', proc { [0, '192.168.0.1 node.domain.com', ''] }]
45
51
  ] do
46
52
  exit_code, stdout, stderr = run 'report', '--node', 'node'
47
53
  expect(exit_code).to eq 0
48
- expect(stdout).to eq <<~EOS
54
+ expect(stdout).to eq <<~EO_STDOUT
49
55
  +------+----------+-----------------+-------------+-----------+-----------+----------------+------------------------------+
50
56
  | Node | Platform | Host name | IP | Physical? | OS | Description | Services |
51
57
  +------+----------+-----------------+-------------+-----------+-----------+----------------+------------------------------+
52
58
  | node | platform | node.domain.com | 192.168.0.1 | No | debian_10 | A great server | node_service1, node_service2 |
53
59
  +------+----------+-----------------+-------------+-----------+-----------+----------------+------------------------------+
54
- EOS
60
+ EO_STDOUT
55
61
  expect(stderr).to eq ''
56
62
  end
57
63
  end
@@ -3,25 +3,23 @@ describe 'run executable' do
3
3
  # Setup a platform for run tests
4
4
  #
5
5
  # Parameters::
6
- # * Proc: Code called when the platform is setup
6
+ # * *block* (Proc): Code called when the platform is setup
7
7
  # * Parameters::
8
8
  # * *repository* (String): Platform's repository
9
- def with_test_platform_for_run
10
- with_test_platform({ nodes: { 'node1' => {}, 'node2' => {} } }) do |repository|
11
- yield repository
12
- end
9
+ def with_test_platform_for_run(&block)
10
+ with_test_platform({ nodes: { 'node1' => {}, 'node2' => {} } }, &block)
13
11
  end
14
12
 
15
13
  it 'executes a single command on a node' do
16
14
  with_test_platform_for_run do
17
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
15
+ expect_actions_executor_runs([proc do |actions|
18
16
  expect(actions).to eq(['node1'] => [{ remote_bash: ['echo Hello'] }])
19
17
  test_actions_executor.stdout_device << "Hello\n"
20
18
  { 'node1' => [0, "Hello\n", ''] }
21
19
  end])
22
20
  exit_code, stdout, stderr = run 'run', '--node', 'node1', '--command', 'echo Hello'
23
21
  expect(exit_code).to eq 0
24
- expect(stdout).to match /Hello/
22
+ expect(stdout).to match(/Hello/)
25
23
  expect(stderr).to eq ''
26
24
  end
27
25
  end
@@ -30,15 +28,15 @@ describe 'run executable' do
30
28
  with_test_platform_for_run do |repository|
31
29
  commands_file = "#{repository}/commands.txt"
32
30
  File.write(commands_file, "echo Hello1\necho Hello2\n")
33
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
31
+ expect_actions_executor_runs([proc do |actions|
34
32
  expect(actions).to eq(['node1'] => [{ remote_bash: [{ file: commands_file }] }])
35
33
  test_actions_executor.stdout_device << "Hello1\nHello2\n"
36
34
  { 'node1' => [0, "Hello1\nHello2\n", ''] }
37
35
  end])
38
36
  exit_code, stdout, stderr = run 'run', '--node', 'node1', '--command-file', commands_file
39
37
  expect(exit_code).to eq 0
40
- expect(stdout).to match /Hello1/
41
- expect(stdout).to match /Hello2/
38
+ expect(stdout).to match(/Hello1/)
39
+ expect(stdout).to match(/Hello2/)
42
40
  expect(stderr).to eq ''
43
41
  end
44
42
  end
@@ -53,14 +51,14 @@ describe 'run executable' do
53
51
  end])
54
52
  exit_code, stdout, stderr = run 'run', '--node', 'node1', '--command', 'echo Hello', '--timeout', '5'
55
53
  expect(exit_code).to eq 0
56
- expect(stdout).to match /Hello/
54
+ expect(stdout).to match(/Hello/)
57
55
  expect(stderr).to eq ''
58
56
  end
59
57
  end
60
58
 
61
59
  it 'executes a single command on a node and captures stderr correctly' do
62
60
  with_test_platform_for_run do
63
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
61
+ expect_actions_executor_runs([proc do |actions|
64
62
  expect(actions).to eq(['node1'] => [{ remote_bash: ['echo Hello 2>&1'] }])
65
63
  test_actions_executor.stderr_device << "Hello\n"
66
64
  { 'node1' => [0, '', "Hello\n"] }
@@ -68,7 +66,7 @@ describe 'run executable' do
68
66
  exit_code, stdout, stderr = run 'run', '--node', 'node1', '--command', 'echo Hello 2>&1'
69
67
  expect(exit_code).to eq 0
70
68
  expect(stdout).to eq ''
71
- expect(stderr).to match /Hello/
69
+ expect(stderr).to match(/Hello/)
72
70
  end
73
71
  end
74
72
 
@@ -82,22 +80,22 @@ describe 'run executable' do
82
80
  end])
83
81
  exit_code, stdout, stderr = run 'run', '--node', 'node1', '--node', 'node2', '--command', 'echo Hello'
84
82
  expect(exit_code).to eq 0
85
- expect(stdout).to match /Hello/
83
+ expect(stdout).to match(/Hello/)
86
84
  expect(stderr).to eq ''
87
85
  end
88
86
  end
89
87
 
90
88
  it 'executes several commands' do
91
89
  with_test_platform_for_run do
92
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
90
+ expect_actions_executor_runs([proc do |actions|
93
91
  expect(actions).to eq(['node1'] => [{ remote_bash: ['echo Hello1', 'echo Hello2'] }])
94
92
  test_actions_executor.stdout_device << "Hello1\nHello2\n"
95
93
  { 'node1' => [0, "Hello1\nHello2\n", ''] }
96
94
  end])
97
95
  exit_code, stdout, stderr = run 'run', '--node', 'node1', '--command', 'echo Hello1', '--command', 'echo Hello2'
98
96
  expect(exit_code).to eq 0
99
- expect(stdout).to match /Hello1/
100
- expect(stdout).to match /Hello2/
97
+ expect(stdout).to match(/Hello1/)
98
+ expect(stdout).to match(/Hello2/)
101
99
  expect(stderr).to eq ''
102
100
  end
103
101
  end
@@ -108,24 +106,26 @@ describe 'run executable' do
108
106
  File.write(commands_file_1, "echo Hello1\necho Hello2\n")
109
107
  commands_file_2 = "#{repository}/commands2.txt"
110
108
  File.write(commands_file_1, "echo Hello4\necho Hello5\n")
111
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
112
- expect(actions).to eq(['node1'] => [{ remote_bash: [
113
- { file: commands_file_1 },
114
- 'echo Hello3',
115
- { file: commands_file_2 },
116
- 'echo Hello6'
117
- ] }])
109
+ expect_actions_executor_runs([proc do |actions|
110
+ expect(actions).to eq(
111
+ ['node1'] => [{ remote_bash: [
112
+ { file: commands_file_1 },
113
+ 'echo Hello3',
114
+ { file: commands_file_2 },
115
+ 'echo Hello6'
116
+ ] }]
117
+ )
118
118
  test_actions_executor.stdout_device << "Hello1\nHello2\nHello3\nHello4\nHello5\nHello6\n"
119
119
  { 'node1' => [0, "Hello1\nHello2\nHello3\nHello4\nHello5\nHello6\n", ''] }
120
120
  end])
121
121
  exit_code, stdout, stderr = run 'run', '--node', 'node1', '--commands-file', commands_file_1, '--command', 'echo Hello3', '--commands-file', commands_file_2, '--command', 'echo Hello6'
122
122
  expect(exit_code).to eq 0
123
- expect(stdout).to match /Hello1/
124
- expect(stdout).to match /Hello2/
125
- expect(stdout).to match /Hello3/
126
- expect(stdout).to match /Hello4/
127
- expect(stdout).to match /Hello5/
128
- expect(stdout).to match /Hello6/
123
+ expect(stdout).to match(/Hello1/)
124
+ expect(stdout).to match(/Hello2/)
125
+ expect(stdout).to match(/Hello3/)
126
+ expect(stdout).to match(/Hello4/)
127
+ expect(stdout).to match(/Hello5/)
128
+ expect(stdout).to match(/Hello6/)
129
129
  expect(stderr).to eq ''
130
130
  end
131
131
  end
@@ -140,14 +140,14 @@ describe 'run executable' do
140
140
  end])
141
141
  exit_code, stdout, stderr = run 'run', '--node', 'node1', '--node', 'node2', '--command', 'echo Hello', '--parallel'
142
142
  expect(exit_code).to eq 0
143
- expect(stdout).to match /Hello/
143
+ expect(stdout).to match(/Hello/)
144
144
  expect(stderr).to eq ''
145
145
  end
146
146
  end
147
147
 
148
148
  it 'executes an interactive session on a node' do
149
149
  with_test_platform_for_run do
150
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
150
+ expect_actions_executor_runs([proc do |actions|
151
151
  expect(actions).to eq(['node1'] => [{ interactive: true }])
152
152
  { 'node1' => [0, '', ''] }
153
153
  end])
@@ -3,31 +3,29 @@ describe 'ssh_config executable' do
3
3
  # Setup a platform for ssh_config tests
4
4
  #
5
5
  # Parameters::
6
- # * Proc: Code called when the platform is setup
6
+ # * *block* (Proc): Code called when the platform is setup
7
7
  # * Parameters::
8
8
  # * *repository* (String): Platform's repository
9
- def with_test_platform_for_ssh_config
10
- with_test_platform({ nodes: { 'node1' => {}, 'node2' => {} } }) do |repository|
11
- yield repository
12
- end
9
+ def with_test_platform_for_ssh_config(&block)
10
+ with_test_platform({ nodes: { 'node1' => {}, 'node2' => {} } }, &block)
13
11
  end
14
12
 
15
13
  it 'dumps the SSH config without arguments' do
16
14
  with_test_platform_for_ssh_config do
17
- expect(test_actions_executor.connector(:ssh)).to receive(:ssh_config).with(ssh_exec: 'ssh') { '# SSH config' }
15
+ expect(test_actions_executor.connector(:ssh)).to receive(:ssh_config).with(ssh_exec: 'ssh').and_return('# SSH config')
18
16
  exit_code, stdout, stderr = run 'ssh_config'
19
17
  expect(exit_code).to eq 0
20
- expect(stdout).to match /# SSH config/
18
+ expect(stdout).to match(/# SSH config/)
21
19
  expect(stderr).to eq ''
22
20
  end
23
21
  end
24
22
 
25
23
  it 'dumps the SSH config with an alternate SSH executable' do
26
24
  with_test_platform_for_ssh_config do
27
- expect(test_actions_executor.connector(:ssh)).to receive(:ssh_config).with(ssh_exec: 'my_ssh') { '# SSH config' }
25
+ expect(test_actions_executor.connector(:ssh)).to receive(:ssh_config).with(ssh_exec: 'my_ssh').and_return('# SSH config')
28
26
  exit_code, stdout, stderr = run 'ssh_config', '--ssh-exec', 'my_ssh'
29
27
  expect(exit_code).to eq 0
30
- expect(stdout).to match /# SSH config/
28
+ expect(stdout).to match(/# SSH config/)
31
29
  expect(stderr).to eq ''
32
30
  end
33
31
  end
@@ -3,13 +3,11 @@ describe 'test executable' do
3
3
  # Setup a platform for test tests
4
4
  #
5
5
  # Parameters::
6
- # * Proc: Code called when the platform is setup
6
+ # * *block* (Proc): Code called when the platform is setup
7
7
  # * Parameters::
8
8
  # * *repository* (String): Platform's repository
9
- def with_test_platform_for_test
10
- with_test_platform({ nodes: { 'node' => {} } }) do |repository|
11
- yield repository
12
- end
9
+ def with_test_platform_for_test(&block)
10
+ with_test_platform({ nodes: { 'node' => {} } }, &block)
13
11
  end
14
12
 
15
13
  it 'executes a given test on a given node' do
@@ -58,7 +58,7 @@ module HybridPlatformsConductorTest
58
58
  def with_connections_mocked_on(expected_nodes)
59
59
  expect(test_actions_executor).to receive(:with_connections_prepared_to) do |nodes, no_exception: false, &client_code|
60
60
  expect(nodes.sort).to eq expected_nodes.sort
61
- client_code.call Hash[nodes.map { |node| [node, test_actions_executor.connector(:test_connector)] }]
61
+ client_code.call nodes.map { |node| [node, test_actions_executor.connector(:test_connector)] }.to_h
62
62
  end
63
63
  yield
64
64
  end
@@ -87,7 +87,7 @@ module HybridPlatformsConductorTest
87
87
  # Result::
88
88
  # * ActionsExecutor: ActionsExecutor on which we can do testing
89
89
  def test_actions_executor
90
- @actions_executor = HybridPlatformsConductor::ActionsExecutor.new logger: logger, logger_stderr: logger, config: test_config, cmd_runner: test_cmd_runner, nodes_handler: test_nodes_handler unless @actions_executor
90
+ @actions_executor ||= HybridPlatformsConductor::ActionsExecutor.new logger: logger, logger_stderr: logger, config: test_config, cmd_runner: test_cmd_runner, nodes_handler: test_nodes_handler
91
91
  @actions_executor
92
92
  end
93
93
 
@@ -38,6 +38,7 @@ module HybridPlatformsConductorTest
38
38
  remaining_expected_commands_mutex.synchronize do
39
39
  remaining_expected_commands.delete_if do |(expected_command, command_code, _options)|
40
40
  break unless found_command.nil?
41
+
41
42
  if (expected_command.is_a?(String) && expected_command == cmd) || (expected_command.is_a?(Regexp) && cmd =~ expected_command)
42
43
  found_command = expected_command
43
44
  found_command_code = command_code
@@ -86,8 +87,8 @@ module HybridPlatformsConductorTest
86
87
  end
87
88
  yield
88
89
  expect(
89
- remaining_expected_commands.select do |(_expected_command, _command_code, options)|
90
- !options[:optional]
90
+ remaining_expected_commands.reject do |(_expected_command, _command_code, options)|
91
+ options[:optional]
91
92
  end
92
93
  ).to eq([]), "Expected CmdRunner commands were not run:\n#{
93
94
  remaining_expected_commands.map do |(expected_command, _command_code, options)|
@@ -103,7 +104,7 @@ module HybridPlatformsConductorTest
103
104
  # Result::
104
105
  # * CmdRunner: CmdRunner on which we can do testing
105
106
  def test_cmd_runner
106
- @cmd_runner = HybridPlatformsConductor::CmdRunner.new logger: logger, logger_stderr: logger unless @cmd_runner
107
+ @cmd_runner ||= HybridPlatformsConductor::CmdRunner.new logger: logger, logger_stderr: logger
107
108
  @cmd_runner
108
109
  end
109
110