hybrid_platforms_conductor 32.3.6

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 (244) hide show
  1. checksums.yaml +7 -0
  2. data/bin/check-node +24 -0
  3. data/bin/deploy +12 -0
  4. data/bin/dump_nodes_json +12 -0
  5. data/bin/free_ips +23 -0
  6. data/bin/free_veids +17 -0
  7. data/bin/get_impacted_nodes +43 -0
  8. data/bin/last_deploys +56 -0
  9. data/bin/nodes_to_deploy +104 -0
  10. data/bin/report +10 -0
  11. data/bin/run +39 -0
  12. data/bin/setup +11 -0
  13. data/bin/ssh_config +14 -0
  14. data/bin/test +13 -0
  15. data/bin/topograph +54 -0
  16. data/lib/hybrid_platforms_conductor/action.rb +82 -0
  17. data/lib/hybrid_platforms_conductor/actions_executor.rb +307 -0
  18. data/lib/hybrid_platforms_conductor/bitbucket.rb +123 -0
  19. data/lib/hybrid_platforms_conductor/cmd_runner.rb +188 -0
  20. data/lib/hybrid_platforms_conductor/cmdb.rb +34 -0
  21. data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +78 -0
  22. data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +43 -0
  23. data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +110 -0
  24. data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +38 -0
  25. data/lib/hybrid_platforms_conductor/config.rb +263 -0
  26. data/lib/hybrid_platforms_conductor/confluence.rb +119 -0
  27. data/lib/hybrid_platforms_conductor/connector.rb +84 -0
  28. data/lib/hybrid_platforms_conductor/credentials.rb +127 -0
  29. data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +42 -0
  30. data/lib/hybrid_platforms_conductor/deployer.rb +598 -0
  31. data/lib/hybrid_platforms_conductor/executable.rb +145 -0
  32. data/lib/hybrid_platforms_conductor/hpc_plugins/action/bash.rb +44 -0
  33. data/lib/hybrid_platforms_conductor/hpc_plugins/action/interactive.rb +44 -0
  34. data/lib/hybrid_platforms_conductor/hpc_plugins/action/my_action.rb.sample +79 -0
  35. data/lib/hybrid_platforms_conductor/hpc_plugins/action/remote_bash.rb +63 -0
  36. data/lib/hybrid_platforms_conductor/hpc_plugins/action/ruby.rb +69 -0
  37. data/lib/hybrid_platforms_conductor/hpc_plugins/action/scp.rb +61 -0
  38. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +78 -0
  39. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +104 -0
  40. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +114 -0
  41. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/my_cmdb.rb.sample +129 -0
  42. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +66 -0
  43. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/my_connector.rb.sample +156 -0
  44. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +702 -0
  45. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/platform_handler_plugin.rb.sample +292 -0
  46. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +148 -0
  47. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/my_provisioner.rb.sample +103 -0
  48. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +125 -0
  49. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +522 -0
  50. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +707 -0
  51. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +122 -0
  52. data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +69 -0
  53. data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +164 -0
  54. data/lib/hybrid_platforms_conductor/hpc_plugins/report/my_report_plugin.rb.sample +88 -0
  55. data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +61 -0
  56. data/lib/hybrid_platforms_conductor/hpc_plugins/report/templates/confluence_inventory.html.erb +33 -0
  57. data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +137 -0
  58. data/lib/hybrid_platforms_conductor/hpc_plugins/test/can_be_checked.rb +21 -0
  59. data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +112 -0
  60. data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_from_scratch.rb +35 -0
  61. data/lib/hybrid_platforms_conductor/hpc_plugins/test/connection.rb +28 -0
  62. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +44 -0
  63. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_from_scratch.rb +36 -0
  64. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +49 -0
  65. data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +25 -0
  66. data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +46 -0
  67. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +45 -0
  68. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +45 -0
  69. data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +25 -0
  70. data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +77 -0
  71. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +38 -0
  72. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +56 -0
  73. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +54 -0
  74. data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +47 -0
  75. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +82 -0
  76. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +120 -0
  77. data/lib/hybrid_platforms_conductor/hpc_plugins/test/my_test_plugin.rb.sample +143 -0
  78. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +74 -0
  79. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +85 -0
  80. data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +38 -0
  81. data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +38 -0
  82. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre-meltdown-checker.sh +1930 -0
  83. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +56 -0
  84. data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +31 -0
  85. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +159 -0
  86. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +122 -0
  87. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/my_test_report.rb.sample +48 -0
  88. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +120 -0
  89. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/templates/_confluence_errors_status.html.erb +46 -0
  90. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/templates/_confluence_gauge.html.erb +49 -0
  91. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/templates/confluence.html.erb +242 -0
  92. data/lib/hybrid_platforms_conductor/io_router.rb +70 -0
  93. data/lib/hybrid_platforms_conductor/json_dumper.rb +88 -0
  94. data/lib/hybrid_platforms_conductor/logger_helpers.rb +319 -0
  95. data/lib/hybrid_platforms_conductor/mutex_dir +76 -0
  96. data/lib/hybrid_platforms_conductor/nodes_handler.rb +597 -0
  97. data/lib/hybrid_platforms_conductor/parallel_threads.rb +97 -0
  98. data/lib/hybrid_platforms_conductor/platform_handler.rb +188 -0
  99. data/lib/hybrid_platforms_conductor/platforms_handler.rb +118 -0
  100. data/lib/hybrid_platforms_conductor/plugin.rb +53 -0
  101. data/lib/hybrid_platforms_conductor/plugins.rb +101 -0
  102. data/lib/hybrid_platforms_conductor/provisioner.rb +181 -0
  103. data/lib/hybrid_platforms_conductor/report.rb +31 -0
  104. data/lib/hybrid_platforms_conductor/reports_handler.rb +84 -0
  105. data/lib/hybrid_platforms_conductor/services_handler.rb +274 -0
  106. data/lib/hybrid_platforms_conductor/test.rb +141 -0
  107. data/lib/hybrid_platforms_conductor/test_by_service.rb +22 -0
  108. data/lib/hybrid_platforms_conductor/test_report.rb +282 -0
  109. data/lib/hybrid_platforms_conductor/tests_runner.rb +590 -0
  110. data/lib/hybrid_platforms_conductor/thycotic.rb +92 -0
  111. data/lib/hybrid_platforms_conductor/topographer.rb +859 -0
  112. data/lib/hybrid_platforms_conductor/topographer/plugin.rb +20 -0
  113. data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +127 -0
  114. data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +72 -0
  115. data/lib/hybrid_platforms_conductor/topographer/plugins/my_topographer_output_plugin.rb.sample +37 -0
  116. data/lib/hybrid_platforms_conductor/topographer/plugins/svg.rb +30 -0
  117. data/lib/hybrid_platforms_conductor/version.rb +5 -0
  118. data/spec/hybrid_platforms_conductor_test.rb +159 -0
  119. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +43 -0
  120. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +18 -0
  121. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +102 -0
  122. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +108 -0
  123. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +79 -0
  124. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +199 -0
  125. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +212 -0
  126. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +125 -0
  127. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +50 -0
  128. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +28 -0
  129. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +448 -0
  130. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +313 -0
  131. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +32 -0
  132. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +134 -0
  133. data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +256 -0
  134. data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +338 -0
  135. data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +101 -0
  136. data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +165 -0
  137. data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +238 -0
  138. data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +9 -0
  139. data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +243 -0
  140. data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +104 -0
  141. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +131 -0
  142. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/docker/Dockerfile +10 -0
  143. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/docker_spec.rb +123 -0
  144. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +211 -0
  145. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +126 -0
  146. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +290 -0
  147. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +43 -0
  148. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +60 -0
  149. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/proxmox.json +3 -0
  150. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +82 -0
  151. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +786 -0
  152. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +112 -0
  153. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +190 -0
  154. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +200 -0
  155. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +35 -0
  156. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +67 -0
  157. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +79 -0
  158. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +28 -0
  159. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +41 -0
  160. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +33 -0
  161. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +64 -0
  162. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +133 -0
  163. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +19 -0
  164. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +446 -0
  165. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +127 -0
  166. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +318 -0
  167. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +132 -0
  168. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +60 -0
  169. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +58 -0
  170. data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +97 -0
  171. data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +104 -0
  172. data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +243 -0
  173. data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +44 -0
  174. data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +121 -0
  175. data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +142 -0
  176. data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +101 -0
  177. data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +388 -0
  178. data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +274 -0
  179. data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +264 -0
  180. data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +194 -0
  181. data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +37 -0
  182. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +194 -0
  183. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +137 -0
  184. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +257 -0
  185. data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +110 -0
  186. data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +367 -0
  187. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +111 -0
  188. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +29 -0
  189. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +166 -0
  190. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb2.rb +93 -0
  191. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +60 -0
  192. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others2.rb +58 -0
  193. data/spec/hybrid_platforms_conductor_test/executables/check-node_spec.rb +35 -0
  194. data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +35 -0
  195. data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +158 -0
  196. data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +173 -0
  197. data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +283 -0
  198. data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +28 -0
  199. data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +28 -0
  200. data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +67 -0
  201. data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +251 -0
  202. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +111 -0
  203. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +71 -0
  204. data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +54 -0
  205. data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +139 -0
  206. data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +60 -0
  207. data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +173 -0
  208. data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +35 -0
  209. data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +41 -0
  210. data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +98 -0
  211. data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +92 -0
  212. data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +37 -0
  213. data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +20 -0
  214. data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +130 -0
  215. data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +149 -0
  216. data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +812 -0
  217. data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +96 -0
  218. data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +20 -0
  219. data/spec/hybrid_platforms_conductor_test/helpers/platform_handler_helpers.rb +35 -0
  220. data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +127 -0
  221. data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +48 -0
  222. data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +789 -0
  223. data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +29 -0
  224. data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +20 -0
  225. data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +38 -0
  226. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/test_plugin_id1.rb +22 -0
  227. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/test_plugin_id2.rb +22 -0
  228. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/test_plugin_type/test_plugin_id3.rb +26 -0
  229. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/test_plugin_type2/test_plugin_id4.rb +26 -0
  230. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +225 -0
  231. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test2.rb +11 -0
  232. data/spec/hybrid_platforms_conductor_test/report_plugin.rb +35 -0
  233. data/spec/hybrid_platforms_conductor_test/test_action.rb +66 -0
  234. data/spec/hybrid_platforms_conductor_test/test_connector.rb +151 -0
  235. data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +30 -0
  236. data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +53 -0
  237. data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +47 -0
  238. data/spec/hybrid_platforms_conductor_test/test_plugins/node_ssh.rb +42 -0
  239. data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +50 -0
  240. data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +50 -0
  241. data/spec/hybrid_platforms_conductor_test/test_provisioner.rb +95 -0
  242. data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +49 -0
  243. data/spec/spec_helper.rb +111 -0
  244. metadata +566 -0
@@ -0,0 +1,194 @@
1
+ describe HybridPlatformsConductor::TestsRunner do
2
+
3
+ it 'executes all tests when no test is selected' do
4
+ with_test_platform do
5
+ register_test_plugins(test_tests_runner,
6
+ global_test: HybridPlatformsConductorTest::TestPlugins::Global,
7
+ global_test_2: HybridPlatformsConductorTest::TestPlugins::Global
8
+ )
9
+ expect(test_tests_runner.run_tests([])).to eq 0
10
+ expect(HybridPlatformsConductorTest::TestPlugins::Global.nbr_runs).to eq 2
11
+ end
12
+ end
13
+
14
+ it 'executes all tests when all tests are selected' do
15
+ with_test_platform do
16
+ register_test_plugins(test_tests_runner,
17
+ global_test: HybridPlatformsConductorTest::TestPlugins::Global,
18
+ global_test_2: HybridPlatformsConductorTest::TestPlugins::Global
19
+ )
20
+ test_tests_runner.tests = [:all]
21
+ expect(test_tests_runner.run_tests([])).to eq 0
22
+ expect(HybridPlatformsConductorTest::TestPlugins::Global.nbr_runs).to eq 2
23
+ end
24
+ end
25
+
26
+ it 'returns 1 when tests are failing' do
27
+ with_test_platform do
28
+ register_test_plugins(test_tests_runner, global_test: HybridPlatformsConductorTest::TestPlugins::Global)
29
+ HybridPlatformsConductorTest::TestPlugins::Global.fail = true
30
+ expect(test_tests_runner.run_tests([])).to eq 1
31
+ expect(HybridPlatformsConductorTest::TestPlugins::Global.nbr_runs).to eq 0
32
+ end
33
+ end
34
+
35
+ it 'returns 0 when tests are failing as expected' do
36
+ with_test_platform({}, false, '
37
+ expect_tests_to_fail(:platform_test, \'Expected failure\')
38
+ ') do
39
+ register_test_plugins(test_tests_runner, platform_test: HybridPlatformsConductorTest::TestPlugins::Platform)
40
+ HybridPlatformsConductorTest::TestPlugins::Platform.fail_for = ['platform']
41
+ expect(test_tests_runner.run_tests([])).to eq 0
42
+ expect(HybridPlatformsConductorTest::TestPlugins::Platform.runs).to eq []
43
+ end
44
+ end
45
+
46
+ it 'returns 0 when tests are failing as expected on a given node' do
47
+ with_test_platform({ nodes: { 'node1' => {}, 'node2' => {}, 'node3' => {} } }, false, '
48
+ for_nodes(\'node2\') do
49
+ expect_tests_to_fail(:node_test, \'Expected failure\')
50
+ end
51
+ ') do
52
+ register_test_plugins(test_tests_runner, node_test: HybridPlatformsConductorTest::TestPlugins::Node)
53
+ HybridPlatformsConductorTest::TestPlugins::Node.fail_for = { node_test: ['node2'] }
54
+ expect(test_tests_runner.run_tests(%w[node1 node2 node3])).to eq 0
55
+ expect(HybridPlatformsConductorTest::TestPlugins::Node.runs.sort).to eq [[:node_test, 'node1'], [:node_test, 'node3']].sort
56
+ end
57
+ end
58
+
59
+ it 'returns 1 when tests are succeeding but were expected to fail' do
60
+ with_test_platform({}, false, '
61
+ expect_tests_to_fail(:platform_test, \'Expected failure\')
62
+ ') do
63
+ register_test_plugins(test_tests_runner, platform_test: HybridPlatformsConductorTest::TestPlugins::Platform)
64
+ expect(test_tests_runner.run_tests([])).to eq 1
65
+ expect(HybridPlatformsConductorTest::TestPlugins::Platform.runs).to eq [[:platform_test, 'platform']]
66
+ end
67
+ end
68
+
69
+ it 'returns 1 when extra expected failures have not been tested when running all tests' do
70
+ with_test_platform({ nodes: { 'another_node' => {} } }, false, '
71
+ for_nodes(\'another_node\') do
72
+ expect_tests_to_fail(:platform_test, \'Expected failure\')
73
+ end
74
+ ') do
75
+ register_test_plugins(test_tests_runner, platform_test: HybridPlatformsConductorTest::TestPlugins::Platform)
76
+ expect(test_tests_runner.run_tests([])).to eq 1
77
+ expect(HybridPlatformsConductorTest::TestPlugins::Platform.runs).to eq [[:platform_test, 'platform']]
78
+ end
79
+ end
80
+
81
+ it 'fails when expected failures reference missing nodes' do
82
+ with_test_platform({ nodes: { 'node' => {} } }, false, '
83
+ for_nodes(\'missing_node\') do
84
+ expect_tests_to_fail(:node_test, \'Expected failure\')
85
+ end
86
+ '
87
+ ) do
88
+ register_test_plugins(test_tests_runner, node_test: HybridPlatformsConductorTest::TestPlugins::Node)
89
+ expect { test_tests_runner.run_tests([{ all: true }]) }.to raise_error 'Unknown nodes: missing_node'
90
+ end
91
+ end
92
+
93
+ it 'fails when we ask for an unknown test' do
94
+ with_test_platform do
95
+ register_test_plugins(test_tests_runner, global_test: HybridPlatformsConductorTest::TestPlugins::Global)
96
+ test_tests_runner.tests = [:global_test_2]
97
+ expect { test_tests_runner.run_tests([]) }.to raise_error(RuntimeError, 'Unknown test names: global_test_2')
98
+ end
99
+ end
100
+
101
+ it 'executes different tests levels if 1 plugin defines them' do
102
+ with_test_platforms(
103
+ 'platform1' => { nodes: { 'node11' => {}, 'node12' => {} } },
104
+ 'platform2' => { nodes: { 'node21' => {}, 'node22' => {} } }
105
+ ) do
106
+ register_test_plugins(test_tests_runner, several_tests: HybridPlatformsConductorTest::TestPlugins::SeveralChecks)
107
+ # Mock the Actions Executor and Deployer expected calls
108
+ expect(test_deployer).to receive(:deploy_on).with(%w[node11 node12 node21 node22]).once do
109
+ expect(test_deployer.use_why_run).to eq true
110
+ {
111
+ 'node11' => [0, 'node11 check ok', 'node11 stderr'],
112
+ 'node12' => [0, 'node12 check ok', 'node12 stderr'],
113
+ 'node21' => [0, 'node21 check ok', 'node21 stderr'],
114
+ 'node22' => [0, 'node22 check ok', 'node22 stderr']
115
+ }
116
+ end
117
+ expect_actions_executor_runs([proc do |actions|
118
+ node_suffixes = %w[11 12 21 22]
119
+ expect(actions.size).to eq node_suffixes.size
120
+ node_suffixes.each do |node_suffix|
121
+ node = "node#{node_suffix}"
122
+ expect(actions.key?(node)).to eq true
123
+ expect(actions[node].size).to eq 1
124
+ expect(actions[node][:remote_bash]).to eq [
125
+ 'echo \'===== TEST COMMAND EXECUTION ===== Separator generated by Hybrid Platforms Conductor test framework =====\'',
126
+ '>&2 echo \'===== TEST COMMAND EXECUTION ===== Separator generated by Hybrid Platforms Conductor test framework =====\'',
127
+ "test_node#{node_suffix}.sh",
128
+ 'echo "$?"'
129
+ ]
130
+ end
131
+ Hash[node_suffixes.map do |node_suffix|
132
+ [
133
+ "node#{node_suffix}",
134
+ [
135
+ 0,
136
+ <<~EOS,
137
+ ===== TEST COMMAND EXECUTION ===== Separator generated by Hybrid Platforms Conductor test framework =====
138
+ stdout#{node_suffix}
139
+ 0
140
+ EOS
141
+ <<~EOS
142
+ ===== TEST COMMAND EXECUTION ===== Separator generated by Hybrid Platforms Conductor test framework =====
143
+ stderr#{node_suffix}
144
+ EOS
145
+ ]
146
+ ]
147
+ end]
148
+ end])
149
+ # Run everything
150
+ test_tests_runner.tests = [:several_tests]
151
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
152
+ expect(HybridPlatformsConductorTest::TestPlugins::SeveralChecks.runs.sort).to eq [
153
+ [:several_tests, '', '', 'Global test'],
154
+ [:several_tests, 'platform1', '', 'Platform test'],
155
+ [:several_tests, 'platform2', '', 'Platform test'],
156
+ [:several_tests, 'node11', 'Node test'],
157
+ [:several_tests, 'node12', 'Node test'],
158
+ [:several_tests, 'node21', 'Node test'],
159
+ [:several_tests, 'node22', 'Node test'],
160
+ [:several_tests, 'node11', 'Node SSH test: stdout11 - stderr11'],
161
+ [:several_tests, 'node12', 'Node SSH test: stdout12 - stderr12'],
162
+ [:several_tests, 'node21', 'Node SSH test: stdout21 - stderr21'],
163
+ [:several_tests, 'node22', 'Node SSH test: stdout22 - stderr22'],
164
+ [:several_tests, 'node11', 'Node check-node test: node11 check ok'],
165
+ [:several_tests, 'node12', 'Node check-node test: node12 check ok'],
166
+ [:several_tests, 'node21', 'Node check-node test: node21 check ok'],
167
+ [:several_tests, 'node22', 'Node check-node test: node22 check ok']
168
+ ].sort
169
+ end
170
+ end
171
+
172
+ # Specific test registered by the test platform handler
173
+ class SpecificPlatformHandlerTest < HybridPlatformsConductor::Test
174
+
175
+ class << self
176
+ attr_accessor :run
177
+ end
178
+ @run = false
179
+
180
+ def test
181
+ SpecificPlatformHandlerTest.run = true
182
+ end
183
+
184
+ end
185
+
186
+ it 'executes tests defined by a platform handler' do
187
+ with_test_platform(tests: { specific_platform_handler_test: SpecificPlatformHandlerTest }) do
188
+ test_tests_runner.tests = [:specific_platform_handler_test]
189
+ expect(test_tests_runner.run_tests([])).to eq 0
190
+ expect(SpecificPlatformHandlerTest.run).to eq true
191
+ end
192
+ end
193
+
194
+ end
@@ -0,0 +1,37 @@
1
+ describe HybridPlatformsConductor::TestsRunner do
2
+
3
+ context 'checking global tests execution' do
4
+
5
+ # Prepare the test platform with test plugins
6
+ #
7
+ # Parameters::
8
+ # * *platforms_info* (Hash): The platofrms info [default: {}]
9
+ def with_test_platform_for_global_tests(platforms_info: {})
10
+ with_test_platform(platforms_info) do
11
+ register_test_plugins(test_tests_runner,
12
+ global_test: HybridPlatformsConductorTest::TestPlugins::Global,
13
+ global_test_2: HybridPlatformsConductorTest::TestPlugins::Global
14
+ )
15
+ yield
16
+ end
17
+ end
18
+
19
+ it 'executes 1 global test only once even if there are several nodes' do
20
+ with_test_platform_for_global_tests(platforms_info: { nodes: { 'node1' => {}, 'node2' => {}, 'node3' => {} } }) do
21
+ test_tests_runner.tests = [:global_test]
22
+ expect(test_tests_runner.run_tests(%w[node1 node2 node3])).to eq 0
23
+ expect(HybridPlatformsConductorTest::TestPlugins::Global.nbr_runs).to eq 1
24
+ end
25
+ end
26
+
27
+ it 'executes several global tests' do
28
+ with_test_platform_for_global_tests do
29
+ test_tests_runner.tests = [:global_test, :global_test_2]
30
+ expect(test_tests_runner.run_tests([])).to eq 0
31
+ expect(HybridPlatformsConductorTest::TestPlugins::Global.nbr_runs).to eq 2
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,194 @@
1
+ describe HybridPlatformsConductor::TestsRunner do
2
+
3
+ context 'checking node tests on check-node results' do
4
+
5
+ # Prepare the test platform with test plugins
6
+ #
7
+ # Parameters::
8
+ # * Proc: Code called with the platform setup
9
+ def with_test_platform_for_node_check_tests
10
+ with_test_platforms(
11
+ 'platform1' => { nodes: { 'node11' => {}, 'node12' => {} } },
12
+ 'platform2' => { nodes: { 'node21' => {}, 'node22' => {} }, platform_type: :test2 }
13
+ ) do
14
+ register_test_plugins(test_tests_runner,
15
+ node_check_test: HybridPlatformsConductorTest::TestPlugins::NodeCheck,
16
+ node_check_test_2: HybridPlatformsConductorTest::TestPlugins::NodeCheck
17
+ )
18
+ yield
19
+ end
20
+ end
21
+
22
+ it 'executes check node tests once per node' do
23
+ with_test_platform_for_node_check_tests do
24
+ test_tests_runner.tests = [:node_check_test]
25
+ expect(test_deployer).to receive(:deploy_on).with(%w[node11 node12 node21 node22]).once do
26
+ expect(test_deployer.use_why_run).to eq true
27
+ {
28
+ 'node11' => [0, 'node11 check ok', 'node11 stderr'],
29
+ 'node12' => [0, 'node12 check ok', 'node12 stderr'],
30
+ 'node21' => [0, 'node21 check ok', 'node21 stderr'],
31
+ 'node22' => [0, 'node22 check ok', 'node22 stderr']
32
+ }
33
+ end
34
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
35
+ expect(HybridPlatformsConductorTest::TestPlugins::NodeCheck.runs.sort).to eq [
36
+ [:node_check_test, 'node11', 'node11 check ok', 'node11 stderr', 0],
37
+ [:node_check_test, 'node12', 'node12 check ok', 'node12 stderr', 0],
38
+ [:node_check_test, 'node21', 'node21 check ok', 'node21 stderr', 0],
39
+ [:node_check_test, 'node22', 'node22 check ok', 'node22 stderr', 0]
40
+ ].sort
41
+ end
42
+ end
43
+
44
+ it 'executes check node tests only on specified nodes' do
45
+ with_test_platform_for_node_check_tests do
46
+ test_tests_runner.tests = [:node_check_test]
47
+ expect(test_deployer).to receive(:deploy_on).with(%w[node12 node22]).once do
48
+ expect(test_deployer.use_why_run).to eq true
49
+ {
50
+ 'node12' => [0, 'node12 check ok', 'node12 stderr'],
51
+ 'node22' => [0, 'node22 check ok', 'node22 stderr']
52
+ }
53
+ end
54
+ expect(test_tests_runner.run_tests(%w[node12 node22])).to eq 0
55
+ expect(HybridPlatformsConductorTest::TestPlugins::NodeCheck.runs.sort).to eq [
56
+ [:node_check_test, 'node12', 'node12 check ok', 'node12 stderr', 0],
57
+ [:node_check_test, 'node22', 'node22 check ok', 'node22 stderr', 0]
58
+ ].sort
59
+ end
60
+ end
61
+
62
+ it 'executes check node tests once per node even if there are several tests using check reports' do
63
+ with_test_platform_for_node_check_tests do
64
+ test_tests_runner.tests = [:node_check_test, :node_check_test_2]
65
+ expect(test_deployer).to receive(:deploy_on).with(%w[node11 node12 node21 node22]).once do
66
+ expect(test_deployer.use_why_run).to eq true
67
+ {
68
+ 'node11' => [0, 'node11 check ok', 'node11 stderr'],
69
+ 'node12' => [0, 'node12 check ok', 'node12 stderr'],
70
+ 'node21' => [0, 'node21 check ok', 'node21 stderr'],
71
+ 'node22' => [0, 'node22 check ok', 'node22 stderr']
72
+ }
73
+ end
74
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
75
+ expect(HybridPlatformsConductorTest::TestPlugins::NodeCheck.runs.sort).to eq [
76
+ [:node_check_test, 'node11', 'node11 check ok', 'node11 stderr', 0],
77
+ [:node_check_test, 'node12', 'node12 check ok', 'node12 stderr', 0],
78
+ [:node_check_test, 'node21', 'node21 check ok', 'node21 stderr', 0],
79
+ [:node_check_test, 'node22', 'node22 check ok', 'node22 stderr', 0],
80
+ [:node_check_test_2, 'node11', 'node11 check ok', 'node11 stderr', 0],
81
+ [:node_check_test_2, 'node12', 'node12 check ok', 'node12 stderr', 0],
82
+ [:node_check_test_2, 'node21', 'node21 check ok', 'node21 stderr', 0],
83
+ [:node_check_test_2, 'node22', 'node22 check ok', 'node22 stderr', 0]
84
+ ].sort
85
+ end
86
+ end
87
+
88
+ it 'fails when a check node tests returns an error for a node' do
89
+ with_test_platform_for_node_check_tests do
90
+ test_tests_runner.tests = [:node_check_test]
91
+ expect(test_deployer).to receive(:deploy_on).with(%w[node11 node12 node21 node22]).once do
92
+ expect(test_deployer.use_why_run).to eq true
93
+ {
94
+ 'node11' => [0, 'node11 check ok', 'node11 stderr'],
95
+ 'node12' => [1, 'node12 check ok', 'node12 stderr'],
96
+ 'node21' => [0, 'node21 check ok', 'node21 stderr'],
97
+ 'node22' => [0, 'node22 check ok', 'node22 stderr']
98
+ }
99
+ end
100
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 1
101
+ expect(HybridPlatformsConductorTest::TestPlugins::NodeCheck.runs.sort).to eq [
102
+ [:node_check_test, 'node11', 'node11 check ok', 'node11 stderr', 0],
103
+ [:node_check_test, 'node12', 'node12 check ok', 'node12 stderr', 1],
104
+ [:node_check_test, 'node21', 'node21 check ok', 'node21 stderr', 0],
105
+ [:node_check_test, 'node22', 'node22 check ok', 'node22 stderr', 0]
106
+ ].sort
107
+ end
108
+ end
109
+
110
+ it 'fails when a check node tests raises an error' do
111
+ with_test_platform_for_node_check_tests do
112
+ test_tests_runner.tests = [:node_check_test]
113
+ expect(test_deployer).to receive(:deploy_on).with(%w[node11 node12 node21 node22]).once do
114
+ expect(test_deployer.use_why_run).to eq true
115
+ {
116
+ 'node11' => [0, 'node11 check ok', 'node11 stderr'],
117
+ 'node12' => [1, 'node12 check ok', 'node12 stderr'],
118
+ 'node21' => [0, 'node21 check ok', 'node21 stderr'],
119
+ 'node22' => [0, 'node22 check ok', 'node22 stderr']
120
+ }
121
+ end
122
+ HybridPlatformsConductorTest::TestPlugins::NodeCheck.fail_for = ['node12']
123
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 1
124
+ expect(HybridPlatformsConductorTest::TestPlugins::NodeCheck.runs.sort).to eq [
125
+ [:node_check_test, 'node11', 'node11 check ok', 'node11 stderr', 0],
126
+ [:node_check_test, 'node21', 'node21 check ok', 'node21 stderr', 0],
127
+ [:node_check_test, 'node22', 'node22 check ok', 'node22 stderr', 0]
128
+ ].sort
129
+ end
130
+ end
131
+
132
+ it 'reuses run_logs logs instead of running check-node when we ask for it' do
133
+ with_test_platform_for_node_check_tests do
134
+ run_logs_dir = "#{ENV['hpc_platforms']}/run_logs"
135
+ FileUtils.mkdir_p run_logs_dir
136
+ File.write("#{run_logs_dir}/node11.stdout", 'node11 check ok from logs')
137
+ File.write("#{run_logs_dir}/node12.stdout", 'node12 check ok from logs')
138
+ File.write("#{run_logs_dir}/node21.stdout", 'node21 check ok from logs')
139
+ File.write("#{run_logs_dir}/node22.stdout", 'node22 check ok from logs')
140
+ test_tests_runner.tests = [:node_check_test]
141
+ expect(test_deployer).not_to receive(:deploy_on)
142
+ test_tests_runner.skip_run = true
143
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
144
+ expect(HybridPlatformsConductorTest::TestPlugins::NodeCheck.runs.sort).to eq [
145
+ [:node_check_test, 'node11', 'node11 check ok from logs', '', 0],
146
+ [:node_check_test, 'node12', 'node12 check ok from logs', '', 0],
147
+ [:node_check_test, 'node21', 'node21 check ok from logs', '', 0],
148
+ [:node_check_test, 'node22', 'node22 check ok from logs', '', 0]
149
+ ].sort
150
+ end
151
+ end
152
+
153
+ it 'fails when some run_logs are missing' do
154
+ with_test_platform_for_node_check_tests do
155
+ run_logs_dir = "#{ENV['hpc_platforms']}/run_logs"
156
+ FileUtils.mkdir_p run_logs_dir
157
+ File.write("#{run_logs_dir}/node11.stdout", 'node11 check ok from logs')
158
+ File.write("#{run_logs_dir}/node12.stdout", 'node12 check ok from logs')
159
+ FileUtils.rm_f "#{run_logs_dir}/node21.stdout"
160
+ File.write("#{run_logs_dir}/node22.stdout", 'node22 check ok from logs')
161
+ test_tests_runner.tests = [:node_check_test]
162
+ expect(test_deployer).not_to receive(:deploy_on)
163
+ test_tests_runner.skip_run = true
164
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 1
165
+ expect(HybridPlatformsConductorTest::TestPlugins::NodeCheck.runs.sort).to eq [
166
+ [:node_check_test, 'node11', 'node11 check ok from logs', '', 0],
167
+ [:node_check_test, 'node12', 'node12 check ok from logs', '', 0],
168
+ [:node_check_test, 'node22', 'node22 check ok from logs', '', 0]
169
+ ].sort
170
+ end
171
+ end
172
+
173
+ it 'executes check node tests only on valid nodes' do
174
+ with_test_platform_for_node_check_tests do
175
+ HybridPlatformsConductorTest::TestPlugins::NodeCheck.only_on_nodes = %w[node12 node22]
176
+ test_tests_runner.tests = [:node_check_test]
177
+ expect(test_deployer).to receive(:deploy_on).with(%w[node12 node22]).once do
178
+ expect(test_deployer.use_why_run).to eq true
179
+ {
180
+ 'node12' => [0, 'node12 check ok', 'node12 stderr'],
181
+ 'node22' => [0, 'node22 check ok', 'node22 stderr']
182
+ }
183
+ end
184
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
185
+ expect(HybridPlatformsConductorTest::TestPlugins::NodeCheck.runs.sort).to eq [
186
+ [:node_check_test, 'node12', 'node12 check ok', 'node12 stderr', 0],
187
+ [:node_check_test, 'node22', 'node22 check ok', 'node22 stderr', 0]
188
+ ].sort
189
+ end
190
+ end
191
+
192
+ end
193
+
194
+ end
@@ -0,0 +1,137 @@
1
+ describe HybridPlatformsConductor::TestsRunner do
2
+
3
+ context 'checking node tests execution' do
4
+
5
+ # Prepare the test platform with test plugins
6
+ #
7
+ # Parameters::
8
+ # * Proc: Code called with the platform setup
9
+ def with_test_platform_for_node_tests
10
+ with_test_platforms(
11
+ 'platform1' => { nodes: { 'node11' => {}, 'node12' => {}, 'node13' => {} } },
12
+ 'platform2' => { nodes: { 'node21' => {}, 'node22' => {}, 'node23' => {} }, platform_type: :test2 }
13
+ ) do
14
+ register_test_plugins(test_tests_runner,
15
+ node_test: HybridPlatformsConductorTest::TestPlugins::Node,
16
+ node_test_2: HybridPlatformsConductorTest::TestPlugins::Node
17
+ )
18
+ yield
19
+ end
20
+ end
21
+
22
+ it 'executes node tests once per node' do
23
+ with_test_platform_for_node_tests do
24
+ test_tests_runner.tests = [:node_test]
25
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
26
+ expect(HybridPlatformsConductorTest::TestPlugins::Node.runs.sort).to eq [
27
+ [:node_test, 'node11'],
28
+ [:node_test, 'node12'],
29
+ [:node_test, 'node13'],
30
+ [:node_test, 'node21'],
31
+ [:node_test, 'node22'],
32
+ [:node_test, 'node23']
33
+ ].sort
34
+ end
35
+ end
36
+
37
+ it 'executes node tests only on selected nodes' do
38
+ with_test_platform_for_node_tests do
39
+ test_tests_runner.tests = [:node_test]
40
+ expect(test_tests_runner.run_tests(%w[node12 node22])).to eq 0
41
+ expect(HybridPlatformsConductorTest::TestPlugins::Node.runs.sort).to eq [
42
+ [:node_test, 'node12'],
43
+ [:node_test, 'node22']
44
+ ].sort
45
+ end
46
+ end
47
+
48
+ it 'executes several node tests' do
49
+ with_test_platform_for_node_tests do
50
+ test_tests_runner.tests = [:node_test, :node_test_2]
51
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
52
+ expect(HybridPlatformsConductorTest::TestPlugins::Node.runs.sort).to eq [
53
+ [:node_test, 'node11'],
54
+ [:node_test, 'node12'],
55
+ [:node_test, 'node13'],
56
+ [:node_test, 'node21'],
57
+ [:node_test, 'node22'],
58
+ [:node_test, 'node23'],
59
+ [:node_test_2, 'node11'],
60
+ [:node_test_2, 'node12'],
61
+ [:node_test_2, 'node13'],
62
+ [:node_test_2, 'node21'],
63
+ [:node_test_2, 'node22'],
64
+ [:node_test_2, 'node23']
65
+ ].sort
66
+ end
67
+ end
68
+
69
+ it 'executes node tests only on valid nodes' do
70
+ with_test_platform_for_node_tests do
71
+ test_tests_runner.tests = [:node_test]
72
+ HybridPlatformsConductorTest::TestPlugins::Node.only_on_nodes = %w[node12 node22]
73
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
74
+ expect(HybridPlatformsConductorTest::TestPlugins::Node.runs.sort).to eq [
75
+ [:node_test, 'node12'],
76
+ [:node_test, 'node22']
77
+ ].sort
78
+ end
79
+ end
80
+
81
+ it 'executes node tests in parallel' do
82
+ with_test_platform_for_node_tests do
83
+ test_tests_runner.tests = [:node_test]
84
+ test_tests_runner.max_threads_nodes = 6
85
+ HybridPlatformsConductorTest::TestPlugins::Node.sleeps = { node_test: {
86
+ 'node11' => 3.0,
87
+ 'node12' => 0.5,
88
+ 'node13' => 1.5,
89
+ 'node21' => 2.0,
90
+ 'node22' => 1.0,
91
+ 'node23' => 2.5
92
+ } }
93
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
94
+ expect(HybridPlatformsConductorTest::TestPlugins::Node.runs).to eq [
95
+ [:node_test, 'node12'],
96
+ [:node_test, 'node22'],
97
+ [:node_test, 'node13'],
98
+ [:node_test, 'node21'],
99
+ [:node_test, 'node23'],
100
+ [:node_test, 'node11']
101
+ ]
102
+ end
103
+ end
104
+
105
+ it 'executes node tests not in parallel with a limiting number of threads' do
106
+ with_test_platform_for_node_tests do
107
+ test_tests_runner.tests = [:node_test]
108
+ test_tests_runner.max_threads_nodes = 3
109
+ HybridPlatformsConductorTest::TestPlugins::Node.sleeps = { node_test: {
110
+ 'node11' => 1.4,
111
+ 'node12' => 0.2,
112
+ 'node13' => 0.6,
113
+ 'node21' => 0.8,
114
+ 'node22' => 0.6,
115
+ 'node23' => 1
116
+ } }
117
+ # Here is the sequence:
118
+ # Thread 1: +-node11 1.4--------------------------------------------+
119
+ # Thread 2: +-node12 0.2-+-node21 0.8--------------+-node23 1.0-----|---+
120
+ # Thread 3: +-node13 0.6-|------------+-node22 0.6-|------------+ | |
121
+ # | | | | | | |
122
+ # Time : 0 0.2 0.6 1.0 1.2 1.4 2.0
123
+ expect(test_tests_runner.run_tests([{ all: true }])).to eq 0
124
+ expect(HybridPlatformsConductorTest::TestPlugins::Node.runs).to eq [
125
+ [:node_test, 'node12'],
126
+ [:node_test, 'node13'],
127
+ [:node_test, 'node21'],
128
+ [:node_test, 'node22'],
129
+ [:node_test, 'node11'],
130
+ [:node_test, 'node23']
131
+ ]
132
+ end
133
+ end
134
+
135
+ end
136
+
137
+ end