engineyard-serverside 2.8.0.pre → 3.0.3

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 (312) hide show
  1. checksums.yaml +7 -0
  2. data/bin/engineyard-serverside-execute-service-hook +1 -1
  3. data/features/hook/running-a-deploy-hook.feature +277 -0
  4. data/features/hook/step_definitions/running-a-deploy-hook-steps.rb +200 -0
  5. data/features/step_definitions/command_steps.rb +8 -0
  6. data/features/step_definitions/version_steps.rb +5 -0
  7. data/features/support/env.rb +63 -0
  8. data/features/support/error_codes.rb +17 -0
  9. data/features/support/fs_helpers.rb +82 -0
  10. data/features/support/output_helpers.rb +7 -0
  11. data/features/support/runner.rb +41 -0
  12. data/features/version.feature +7 -0
  13. data/lib/engineyard-serverside.rb +2 -5
  14. data/lib/engineyard-serverside/callbacks/collection/base.rb +12 -5
  15. data/lib/engineyard-serverside/callbacks/distributor.rb +2 -7
  16. data/lib/engineyard-serverside/callbacks/executor/executable.rb +2 -0
  17. data/lib/engineyard-serverside/cli/app.rb +6 -0
  18. data/lib/engineyard-serverside/cli/workflows/calling_deploy_hooks.rb +1 -2
  19. data/lib/engineyard-serverside/configuration.rb +3 -3
  20. data/lib/engineyard-serverside/deploy.rb +4 -8
  21. data/lib/engineyard-serverside/shell.rb +38 -10
  22. data/lib/engineyard-serverside/version.rb +1 -1
  23. data/spec/engineyard-serverside/callbacks/collection/combined_spec.rb +232 -0
  24. data/spec/engineyard-serverside/callbacks/collection/deploy_hooks_spec.rb +170 -0
  25. data/spec/engineyard-serverside/callbacks/collection/service_hooks/collection_spec.rb +171 -0
  26. data/spec/engineyard-serverside/callbacks/collection/service_hooks/combined_spec.rb +174 -0
  27. data/spec/engineyard-serverside/callbacks/collection/service_hooks_spec.rb +31 -0
  28. data/spec/engineyard-serverside/callbacks/collection_spec.rb +49 -0
  29. data/spec/engineyard-serverside/callbacks/distributor/remote_spec.rb +135 -0
  30. data/spec/engineyard-serverside/callbacks/distributor/viability_filter_spec.rb +208 -0
  31. data/spec/engineyard-serverside/callbacks/distributor_spec.rb +43 -0
  32. data/spec/engineyard-serverside/callbacks/executor/executable_spec.rb +386 -0
  33. data/spec/engineyard-serverside/callbacks/executor/ruby/context_spec.rb +538 -0
  34. data/spec/engineyard-serverside/callbacks/executor/ruby/executor_spec.rb +313 -0
  35. data/spec/engineyard-serverside/callbacks/executor/ruby_spec.rb +35 -0
  36. data/spec/engineyard-serverside/callbacks/executor_spec.rb +45 -0
  37. data/spec/engineyard-serverside/callbacks_spec.rb +31 -0
  38. data/spec/engineyard-serverside/cli/workflows/base_spec.rb +237 -0
  39. data/spec/engineyard-serverside/cli/workflows/calling_deploy_hooks_spec.rb +65 -0
  40. data/spec/engineyard-serverside/cli/workflows/deploying_applications_spec.rb +61 -0
  41. data/spec/engineyard-serverside/cli/workflows/disabling_maintenance_spec.rb +61 -0
  42. data/spec/engineyard-serverside/cli/workflows/enabling_maintenance_spec.rb +61 -0
  43. data/spec/engineyard-serverside/cli/workflows/helpers_spec.rb +64 -0
  44. data/spec/engineyard-serverside/cli/workflows/rolling_back_applications_spec.rb +61 -0
  45. data/spec/engineyard-serverside/cli/workflows/showing_maintenance_status_spec.rb +60 -0
  46. data/spec/engineyard-serverside/cli/workflows_spec.rb +87 -0
  47. data/spec/engineyard-serverside/dependency_manager/base_spec.rb +139 -0
  48. data/spec/engineyard-serverside/paths_spec.rb +820 -0
  49. data/spec/engineyard-serverside/propagator_spec.rb +56 -0
  50. data/spec/engineyard-serverside/server_spec.rb +390 -0
  51. data/spec/engineyard-serverside/shell/helpers_spec.rb +98 -0
  52. data/spec/engineyard-serverside/shell/yieldio_spec.rb +33 -0
  53. data/spec/engineyard-serverside/shell_spec.rb +543 -0
  54. data/spec/engineyard-serverside/slug/distributor_spec.rb +199 -0
  55. data/spec/engineyard-serverside/slug/enabler_spec.rb +191 -0
  56. data/spec/engineyard-serverside/slug/failure_handler_spec.rb +114 -0
  57. data/spec/engineyard-serverside/slug/finalizer_spec.rb +191 -0
  58. data/spec/engineyard-serverside/slug/generator_spec.rb +82 -0
  59. data/spec/engineyard-serverside/slug/migrator_spec.rb +137 -0
  60. data/spec/engineyard-serverside/slug/restarter_spec.rb +226 -0
  61. data/spec/engineyard-serverside/slug/source/updater_spec.rb +710 -0
  62. data/spec/engineyard-serverside/slug/source_spec.rb +40 -0
  63. data/spec/engineyard-serverside/source_spec.rb +171 -0
  64. data/spec/railway_spec.rb +130 -0
  65. data/spec/result/failure_spec.rb +113 -0
  66. data/spec/result/success_spec.rb +109 -0
  67. data/spec/result_spec.rb +23 -0
  68. data/spec/spec_helper.rb +3 -349
  69. metadata +327 -602
  70. data/lib/vendor/json_pure/COPYING +0 -57
  71. data/lib/vendor/json_pure/GPL +0 -340
  72. data/lib/vendor/json_pure/README.rdoc +0 -358
  73. data/lib/vendor/json_pure/VERSION +0 -1
  74. data/lib/vendor/json_pure/lib/json.rb +0 -62
  75. data/lib/vendor/json_pure/lib/json/add/bigdecimal.rb +0 -28
  76. data/lib/vendor/json_pure/lib/json/add/complex.rb +0 -22
  77. data/lib/vendor/json_pure/lib/json/add/core.rb +0 -11
  78. data/lib/vendor/json_pure/lib/json/add/date.rb +0 -34
  79. data/lib/vendor/json_pure/lib/json/add/date_time.rb +0 -48
  80. data/lib/vendor/json_pure/lib/json/add/exception.rb +0 -31
  81. data/lib/vendor/json_pure/lib/json/add/ostruct.rb +0 -31
  82. data/lib/vendor/json_pure/lib/json/add/range.rb +0 -29
  83. data/lib/vendor/json_pure/lib/json/add/rational.rb +0 -22
  84. data/lib/vendor/json_pure/lib/json/add/regexp.rb +0 -30
  85. data/lib/vendor/json_pure/lib/json/add/struct.rb +0 -30
  86. data/lib/vendor/json_pure/lib/json/add/symbol.rb +0 -25
  87. data/lib/vendor/json_pure/lib/json/add/time.rb +0 -38
  88. data/lib/vendor/json_pure/lib/json/common.rb +0 -484
  89. data/lib/vendor/json_pure/lib/json/ext.rb +0 -21
  90. data/lib/vendor/json_pure/lib/json/generic_object.rb +0 -70
  91. data/lib/vendor/json_pure/lib/json/pure.rb +0 -21
  92. data/lib/vendor/json_pure/lib/json/pure/generator.rb +0 -522
  93. data/lib/vendor/json_pure/lib/json/pure/parser.rb +0 -359
  94. data/lib/vendor/json_pure/lib/json/version.rb +0 -8
  95. data/lib/vendor/multi_json/CHANGELOG.md +0 -121
  96. data/lib/vendor/multi_json/CONTRIBUTING.md +0 -46
  97. data/lib/vendor/multi_json/Gemfile +0 -31
  98. data/lib/vendor/multi_json/LICENSE.md +0 -20
  99. data/lib/vendor/multi_json/README.md +0 -105
  100. data/lib/vendor/multi_json/Rakefile +0 -12
  101. data/lib/vendor/multi_json/lib/multi_json.rb +0 -137
  102. data/lib/vendor/multi_json/lib/multi_json/adapters/gson.rb +0 -20
  103. data/lib/vendor/multi_json/lib/multi_json/adapters/json_common.rb +0 -35
  104. data/lib/vendor/multi_json/lib/multi_json/adapters/json_gem.rb +0 -12
  105. data/lib/vendor/multi_json/lib/multi_json/adapters/json_pure.rb +0 -12
  106. data/lib/vendor/multi_json/lib/multi_json/adapters/nsjsonserialization.rb +0 -35
  107. data/lib/vendor/multi_json/lib/multi_json/adapters/oj.rb +0 -29
  108. data/lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb +0 -58
  109. data/lib/vendor/multi_json/lib/multi_json/adapters/yajl.rb +0 -20
  110. data/lib/vendor/multi_json/lib/multi_json/vendor/okjson.rb +0 -602
  111. data/lib/vendor/multi_json/lib/multi_json/version.rb +0 -3
  112. data/lib/vendor/multi_json/spec/adapter_shared_example.rb +0 -162
  113. data/lib/vendor/multi_json/spec/helper.rb +0 -45
  114. data/lib/vendor/multi_json/spec/json_common_shared_example.rb +0 -36
  115. data/lib/vendor/multi_json/spec/multi_json_spec.rb +0 -151
  116. data/spec/archive_deploy_spec.rb +0 -53
  117. data/spec/basic_deploy_spec.rb +0 -26
  118. data/spec/bundler_deploy_spec.rb +0 -160
  119. data/spec/configuration_spec.rb +0 -206
  120. data/spec/custom_deploy_spec.rb +0 -128
  121. data/spec/deploy_hook_spec.rb +0 -378
  122. data/spec/deprecation_spec.rb +0 -23
  123. data/spec/ey_yml_customized_deploy_spec.rb +0 -99
  124. data/spec/fixtures/gitrepo.tar.gz +0 -0
  125. data/spec/fixtures/invalid_hook.rb +0 -1
  126. data/spec/fixtures/lockfiles/0.9-no-bundler +0 -111
  127. data/spec/fixtures/lockfiles/0.9-with-bundler +0 -117
  128. data/spec/fixtures/lockfiles/1.0-no-bundler +0 -54
  129. data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +0 -162
  130. data/spec/fixtures/lockfiles/1.0.18-do_mysql +0 -88
  131. data/spec/fixtures/lockfiles/1.0.18-do_postgres +0 -79
  132. data/spec/fixtures/lockfiles/1.0.18-mysql +0 -43
  133. data/spec/fixtures/lockfiles/1.0.18-mysql2 +0 -43
  134. data/spec/fixtures/lockfiles/1.0.18-pg +0 -43
  135. data/spec/fixtures/lockfiles/1.0.6-no-bundler +0 -51
  136. data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +0 -52
  137. data/spec/fixtures/lockfiles/1.0.6-with-bundler +0 -52
  138. data/spec/fixtures/lockfiles/1.15.1-no-bundler +0 -51
  139. data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +0 -112
  140. data/spec/fixtures/lockfiles/not-a-lockfile +0 -1
  141. data/spec/fixtures/repos/assets_detected/Gemfile +0 -5
  142. data/spec/fixtures/repos/assets_detected/Gemfile.lock +0 -88
  143. data/spec/fixtures/repos/assets_detected/README +0 -1
  144. data/spec/fixtures/repos/assets_detected/Rakefile +0 -5
  145. data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
  146. data/spec/fixtures/repos/assets_detected/config/application.rb +0 -5
  147. data/spec/fixtures/repos/assets_detected/config/ey.yml +0 -3
  148. data/spec/fixtures/repos/assets_disabled/Gemfile +0 -5
  149. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +0 -88
  150. data/spec/fixtures/repos/assets_disabled/README +0 -1
  151. data/spec/fixtures/repos/assets_disabled/Rakefile +0 -6
  152. data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
  153. data/spec/fixtures/repos/assets_disabled/config/application.rb +0 -5
  154. data/spec/fixtures/repos/assets_disabled/config/ey.yml +0 -3
  155. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +0 -5
  156. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +0 -88
  157. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +0 -1
  158. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +0 -6
  159. data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
  160. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +0 -5
  161. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +0 -5
  162. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +0 -5
  163. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +0 -88
  164. data/spec/fixtures/repos/assets_disabled_utf8/README +0 -3
  165. data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +0 -5
  166. data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
  167. data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +0 -7
  168. data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +0 -3
  169. data/spec/fixtures/repos/assets_enabled_all/Gemfile +0 -5
  170. data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +0 -88
  171. data/spec/fixtures/repos/assets_enabled_all/README +0 -1
  172. data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
  173. data/spec/fixtures/repos/assets_enabled_all/config/application.rb +0 -5
  174. data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +0 -6
  175. data/spec/fixtures/repos/assets_enabled_all/script/assets +0 -5
  176. data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +0 -1
  177. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +0 -3
  178. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +0 -10
  179. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +0 -1
  180. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +0 -8
  181. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +0 -4
  182. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +0 -5
  183. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +0 -88
  184. data/spec/fixtures/repos/assets_enabled_util_only/README +0 -1
  185. data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +0 -6
  186. data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
  187. data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +0 -5
  188. data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +0 -6
  189. data/spec/fixtures/repos/assets_error/Gemfile +0 -5
  190. data/spec/fixtures/repos/assets_error/Gemfile.lock +0 -88
  191. data/spec/fixtures/repos/assets_error/README +0 -1
  192. data/spec/fixtures/repos/assets_error/Rakefile +0 -4
  193. data/spec/fixtures/repos/assets_error/app/assets/empty +0 -0
  194. data/spec/fixtures/repos/assets_error/config/application.rb +0 -5
  195. data/spec/fixtures/repos/assets_error/config/ey.yml +0 -4
  196. data/spec/fixtures/repos/assets_in_hook/Gemfile +0 -5
  197. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +0 -88
  198. data/spec/fixtures/repos/assets_in_hook/README +0 -2
  199. data/spec/fixtures/repos/assets_in_hook/Rakefile +0 -5
  200. data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
  201. data/spec/fixtures/repos/assets_in_hook/config/application.rb +0 -5
  202. data/spec/fixtures/repos/assets_in_hook/config/ey.yml +0 -3
  203. data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +0 -2
  204. data/spec/fixtures/repos/bundle_fails/Gemfile +0 -1
  205. data/spec/fixtures/repos/bundle_fails/README +0 -1
  206. data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +0 -1
  207. data/spec/fixtures/repos/bundler_disabled/Gemfile +0 -4
  208. data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +0 -12
  209. data/spec/fixtures/repos/bundler_disabled/README +0 -1
  210. data/spec/fixtures/repos/bundler_disabled/config/ey.yml +0 -2
  211. data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +0 -1
  212. data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +0 -1
  213. data/spec/fixtures/repos/bundler_old/Gemfile +0 -5
  214. data/spec/fixtures/repos/bundler_old/Gemfile.lock +0 -15
  215. data/spec/fixtures/repos/bundler_old/README +0 -1
  216. data/spec/fixtures/repos/default/Gemfile +0 -4
  217. data/spec/fixtures/repos/default/Gemfile.lock +0 -12
  218. data/spec/fixtures/repos/default/README +0 -5
  219. data/spec/fixtures/repos/default/ey.yml +0 -3
  220. data/spec/fixtures/repos/executable_hooks/README +0 -1
  221. data/spec/fixtures/repos/executable_hooks/deploy/before_restart +0 -72
  222. data/spec/fixtures/repos/executable_hooks_not_executable/README +0 -3
  223. data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +0 -3
  224. data/spec/fixtures/repos/ey_yml/Gemfile +0 -4
  225. data/spec/fixtures/repos/ey_yml/Gemfile.lock +0 -12
  226. data/spec/fixtures/repos/ey_yml/README +0 -1
  227. data/spec/fixtures/repos/ey_yml/config/ey.yml +0 -18
  228. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +0 -6
  229. data/spec/fixtures/repos/ey_yml_alt/Gemfile +0 -4
  230. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +0 -12
  231. data/spec/fixtures/repos/ey_yml_alt/README +0 -1
  232. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +0 -6
  233. data/spec/fixtures/repos/ey_yml_alt/ey.yml +0 -12
  234. data/spec/fixtures/repos/hook_fails/README +0 -1
  235. data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +0 -1
  236. data/spec/fixtures/repos/hooks/README +0 -1
  237. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +0 -1
  238. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +0 -1
  239. data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +0 -1
  240. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +0 -1
  241. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +0 -1
  242. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +0 -1
  243. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +0 -1
  244. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +0 -1
  245. data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +0 -1
  246. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +0 -1
  247. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +0 -1
  248. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +0 -1
  249. data/spec/fixtures/repos/multi_dep_manager/README +0 -1
  250. data/spec/fixtures/repos/multi_dep_manager/composer.json +0 -5
  251. data/spec/fixtures/repos/multi_dep_manager/composer.lock +0 -462
  252. data/spec/fixtures/repos/multi_dep_manager/package.json +0 -7
  253. data/spec/fixtures/repos/multi_dep_manager/public/index.php +0 -4
  254. data/spec/fixtures/repos/no_ey_config/Gemfile +0 -3
  255. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +0 -10
  256. data/spec/fixtures/repos/no_ey_config/README +0 -1
  257. data/spec/fixtures/repos/no_ey_config/ey.yml +0 -3
  258. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile +0 -3
  259. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile.lock +0 -10
  260. data/spec/fixtures/repos/no_ey_config_no_warning/README +0 -1
  261. data/spec/fixtures/repos/no_ey_config_no_warning/ey.yml +0 -5
  262. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +0 -4
  263. data/spec/fixtures/repos/no_gemfile_lock/README +0 -1
  264. data/spec/fixtures/repos/no_gemfile_lock/ey.yml +0 -3
  265. data/spec/fixtures/repos/nodejs/README +0 -1
  266. data/spec/fixtures/repos/nodejs/package.json +0 -7
  267. data/spec/fixtures/repos/not_bundled/README +0 -1
  268. data/spec/fixtures/repos/npm_disabled/README +0 -1
  269. data/spec/fixtures/repos/npm_disabled/config/ey.yml +0 -2
  270. data/spec/fixtures/repos/npm_disabled/package.json +0 -7
  271. data/spec/fixtures/repos/php_composer_disabled/README +0 -1
  272. data/spec/fixtures/repos/php_composer_disabled/composer.json +0 -5
  273. data/spec/fixtures/repos/php_composer_disabled/composer.lock +0 -462
  274. data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +0 -2
  275. data/spec/fixtures/repos/php_composer_disabled/public/index.php +0 -4
  276. data/spec/fixtures/repos/php_composer_lock/README +0 -1
  277. data/spec/fixtures/repos/php_composer_lock/composer.json +0 -5
  278. data/spec/fixtures/repos/php_composer_lock/composer.lock +0 -462
  279. data/spec/fixtures/repos/php_composer_lock/public/index.php +0 -4
  280. data/spec/fixtures/repos/php_no_composer_lock/README +0 -1
  281. data/spec/fixtures/repos/php_no_composer_lock/composer.json +0 -21
  282. data/spec/fixtures/repos/php_no_composer_lock/public/index.php +0 -4
  283. data/spec/fixtures/repos/public_system/Gemfile +0 -4
  284. data/spec/fixtures/repos/public_system/Gemfile.lock +0 -12
  285. data/spec/fixtures/repos/public_system/README +0 -5
  286. data/spec/fixtures/repos/public_system/ey.yml +0 -3
  287. data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +0 -3
  288. data/spec/fixtures/repos/sqlite3/Gemfile +0 -4
  289. data/spec/fixtures/repos/sqlite3/Gemfile.lock +0 -89
  290. data/spec/fixtures/repos/sqlite3/README +0 -1
  291. data/spec/fixtures/retwisj.war +0 -0
  292. data/spec/fixtures/valid_hook.rb +0 -1
  293. data/spec/git_strategy_spec.rb +0 -34
  294. data/spec/lockfile_parser_spec.rb +0 -126
  295. data/spec/maintenance_spec.rb +0 -44
  296. data/spec/multi_dependency_manager_spec.rb +0 -25
  297. data/spec/nodejs_deploy_spec.rb +0 -30
  298. data/spec/php_deploy_spec.rb +0 -81
  299. data/spec/platform_configure_spec.rb +0 -61
  300. data/spec/rails31_deploy_spec.rb +0 -172
  301. data/spec/restart_spec.rb +0 -43
  302. data/spec/rollback_spec.rb +0 -87
  303. data/spec/server_spec.rb +0 -70
  304. data/spec/services_deploy_spec.rb +0 -165
  305. data/spec/shell_spec.rb +0 -57
  306. data/spec/source/archive_spec.rb +0 -33
  307. data/spec/source/git_spec.rb +0 -44
  308. data/spec/sqlite3_deploy_spec.rb +0 -38
  309. data/spec/support/integration.rb +0 -103
  310. data/spec/support/source_doubles.rb +0 -28
  311. data/spec/support/timecop.rb +0 -5
  312. data/spec/symlink_spec.rb +0 -15
@@ -0,0 +1,174 @@
1
+ require 'spec_helper'
2
+
3
+ require 'pathname'
4
+
5
+ require 'engineyard-serverside/callbacks/collection/service_hooks/combined'
6
+
7
+ module EY
8
+ module Serverside
9
+ module Callbacks
10
+ module Collection
11
+ module ServiceHooks
12
+
13
+ describe Combined do
14
+ let(:paths) {Object.new}
15
+ let(:app_base_path) {Pathname.new('/data/someapp')}
16
+ let(:shared_hooks_path) {app_base_path.join('shared', 'hooks')}
17
+ let(:service_1_path) {shared_hooks_path.join('svc1')}
18
+ let(:service_2_path) {shared_hooks_path.join('svc2')}
19
+ let(:service_paths) {[service_1_path.to_s, service_2_path.to_s]}
20
+
21
+ let(:service_1_hook_1) {Object.new}
22
+ let(:service_1_hook_2) {Object.new}
23
+ let(:service_2_hook_1) {Object.new}
24
+ let(:service_2_hook_2) {Object.new}
25
+
26
+ let(:service_1_collection) {Object.new}
27
+ let(:service_2_collection) {Object.new}
28
+
29
+ let(:collection) {described_class.load(paths)}
30
+
31
+ before(:each) do
32
+ allow(paths).
33
+ to receive(:shared_hooks).
34
+ and_return(shared_hooks_path)
35
+
36
+ allow(Dir).to receive(:[]).and_return([])
37
+ allow(Dir).
38
+ to receive(:[]).
39
+ with("#{shared_hooks_path}/*").
40
+ and_return(service_paths)
41
+
42
+ # Stub out a collection for service 1
43
+ allow(ServiceHooks::Collection).
44
+ to receive(:load).
45
+ with(service_1_path.to_s).
46
+ and_return(service_1_collection)
47
+
48
+ allow(service_1_collection).
49
+ to receive(:all).
50
+ and_return([service_1_hook_1, service_1_hook_2])
51
+
52
+ allow(service_1_collection).
53
+ to receive(:matching).
54
+ and_return([service_1_hook_2])
55
+
56
+ # Stub out a collection for service 2
57
+ allow(ServiceHooks::Collection).
58
+ to receive(:load).
59
+ with(service_2_path.to_s).
60
+ and_return(service_2_collection)
61
+
62
+ allow(service_2_collection).
63
+ to receive(:all).
64
+ and_return([service_2_hook_1, service_2_hook_2])
65
+
66
+ allow(service_2_collection).
67
+ to receive(:matching).
68
+ and_return([service_2_hook_1])
69
+ end
70
+
71
+ describe '.load' do
72
+ let(:service_hooks) {Object.new}
73
+ let(:result) {described_class.load(paths)}
74
+
75
+ context 'with service hooks present' do
76
+ it 'loads a collection for each service' do
77
+ service_paths.each do |path|
78
+ expect(ServiceHooks::Collection).
79
+ to receive(:load).
80
+ with(path)
81
+ end
82
+
83
+ result
84
+ end
85
+ end
86
+
87
+ it 'is a callbacks collection' do
88
+ expect(result).to be_a(Callbacks::Collection::Base)
89
+ end
90
+ end
91
+
92
+ describe '#all' do
93
+ let(:all_known_hooks) {
94
+ [
95
+ service_1_hook_1,
96
+ service_1_hook_2,
97
+ service_2_hook_1,
98
+ service_2_hook_2
99
+ ]
100
+ }
101
+
102
+ let(:result) {collection.all}
103
+
104
+ it 'is an Array' do
105
+ expect(result).to be_a(Array)
106
+ end
107
+
108
+ it 'contains all known service hooks' do
109
+ all_known_hooks.each do |hook|
110
+ expect(result).to include(hook)
111
+ end
112
+ end
113
+ end
114
+
115
+ describe '#matching' do
116
+ let(:name) {:hook_2}
117
+ let(:result) {collection.matching(name)}
118
+
119
+ it 'is an Array' do
120
+ expect(result).to be_a(Array)
121
+ end
122
+
123
+ it 'contains hooks with the desired name' do
124
+ [service_1_hook_2, service_2_hook_1].each do |hook|
125
+ expect(result).to include(hook)
126
+ end
127
+ end
128
+
129
+ it 'omits hooks without the desired name' do
130
+ [service_1_hook_1, service_2_hook_2].each do |hook|
131
+ expect(result).not_to include(hook)
132
+ end
133
+ end
134
+ end
135
+
136
+ describe '#distribute' do
137
+ let(:runner) {Object.new}
138
+ let(:name) {:hook_2}
139
+ let(:distributor) {Callbacks::Distributor}
140
+ let(:distribution_result) {Object.new}
141
+ let(:matched) {[service_1_hook_2, service_2_hook_1]}
142
+ let(:result) {collection.distribute(runner, name)}
143
+
144
+ before(:each) do
145
+ allow(distributor).to receive(:distribute)
146
+
147
+ # Bypass Base#minimize_ruby
148
+ allow(collection).to receive(:minimize_ruby) {|matches|
149
+ matches
150
+ }
151
+ end
152
+
153
+ it 'distributes matching hooks via an distributor' do
154
+ expect(distributor).
155
+ to receive(:distribute).
156
+ with(runner, matched).
157
+ and_return(distribution_result)
158
+
159
+ expect(result).to eql(distribution_result)
160
+ end
161
+
162
+ it 'skips non-matching hooks' do
163
+ expect(distributor).not_to receive(:distribute).with(runner, :hook_1)
164
+
165
+ result
166
+ end
167
+ end
168
+ end
169
+
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ require 'pathname'
4
+
5
+ require 'engineyard-serverside/callbacks/collection'
6
+
7
+ module EY
8
+ module Serverside
9
+ module Callbacks
10
+ module Collection
11
+
12
+ describe ServiceHooks do
13
+ let(:paths) {Object.new}
14
+
15
+ describe '.load' do
16
+ let(:combined) {Object.new}
17
+ let(:result) {described_class.load(paths)}
18
+
19
+ it 'is a combined service hooks collection' do
20
+ expect(described_class::Combined).
21
+ to receive(:load).with(paths).and_return(combined)
22
+
23
+ expect(result).to eql(combined)
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ require 'pathname'
4
+
5
+ require 'engineyard-serverside/callbacks/collection'
6
+
7
+ module EY
8
+ module Serverside
9
+ module Callbacks
10
+
11
+ describe Collection do
12
+ let(:paths) {Object.new}
13
+ let(:deploy_hooks) {described_class::DeployHooks}
14
+ let(:service_hooks) {described_class::ServiceHooks}
15
+
16
+ before(:each) do
17
+ allow(deploy_hooks).
18
+ to receive(:load).
19
+ with(paths)
20
+
21
+ allow(service_hooks).
22
+ to receive(:load).
23
+ with(paths)
24
+ end
25
+
26
+ describe '.load' do
27
+ let(:result) {described_class.load(paths)}
28
+
29
+ it 'loads deploy hooks' do
30
+ expect(deploy_hooks).to receive(:load).with(paths)
31
+
32
+ result
33
+ end
34
+
35
+ it 'loads service hooks' do
36
+ expect(service_hooks).to receive(:load).with(paths)
37
+
38
+ result
39
+ end
40
+
41
+ it 'is a combined callbacks collection' do
42
+ expect(result).to be_a(described_class::Combined)
43
+ end
44
+ end
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+
3
+ require 'pathname'
4
+ require 'escape'
5
+
6
+ require 'engineyard-serverside/callbacks/distributor/remote'
7
+
8
+ module EY
9
+ module Serverside
10
+ module Callbacks
11
+ module Distributor
12
+
13
+ describe Remote do
14
+ let(:runner) {Object.new}
15
+ let(:callback_name) {:some_callback}
16
+ let(:shell) {Object.new}
17
+ let(:config) {Object.new}
18
+ let(:paths) {Object.new}
19
+ let(:app) {'some_app'}
20
+ let(:account_name) {'some_account'}
21
+ let(:config_json) {'i am a json config'}
22
+ let(:environment_name) {'some_environment'}
23
+ let(:framework_env) {'some_framework_env'}
24
+ let(:verbose) {nil}
25
+ let(:active_release) {'/data/some_app/releases/123456789'}
26
+ let(:server) {Object.new}
27
+ let(:server_name) {nil}
28
+ let(:roles) {[:hamlet, :ophelia]}
29
+ let(:cmd) {'some command'}
30
+
31
+ let(:distributor) {described_class.new(runner, callback_name)}
32
+
33
+ before(:each) do
34
+ # Stub out the parts of the runner interface that we use
35
+ allow(runner).to receive(:shell).and_return(shell)
36
+ allow(runner).to receive(:run).and_yield(server, cmd)
37
+ allow(runner).to receive(:config).and_return(config)
38
+ allow(runner).to receive(:paths).and_return(paths)
39
+
40
+ # Stub out the parts of the shell interface that we use
41
+ allow(shell).to receive(:status)
42
+
43
+ # Stub out the parts of the config interface that we use
44
+ allow(config).to receive(:account_name).and_return(account_name)
45
+ allow(config).to receive(:app).and_return(app)
46
+ allow(config).
47
+ to receive(:environment_name).
48
+ and_return(environment_name)
49
+ allow(config).to receive(:framework_env).and_return(framework_env)
50
+ allow(config).to receive(:to_json).and_return(config_json)
51
+ allow(config).to receive(:verbose).and_return(verbose)
52
+
53
+ # Stub out the parts of the paths interface that we use
54
+ allow(paths).to receive(:active_release).and_return(active_release)
55
+
56
+ # Stub out the parts of the server interface that we use
57
+ allow(server).to receive(:roles).and_return(roles)
58
+ allow(server).to receive(:name).and_return(server_name)
59
+ end
60
+
61
+ describe '.distribute' do
62
+ let(:result) {described_class.distribute(runner, callback_name)}
63
+
64
+ it 'uses a new distributor to distribute the hook' do
65
+ distributor = Object.new
66
+
67
+ expect(described_class).
68
+ to receive(:new).
69
+ with(runner, callback_name).
70
+ and_return(distributor)
71
+
72
+ expect(distributor).to receive(:distribute)
73
+
74
+ result
75
+ end
76
+ end
77
+
78
+ describe '#distribute' do
79
+ let(:result) {distributor.distribute}
80
+
81
+ it 'runs the escaped command for the callback' do
82
+ escaped_command = 'i am an escaped command'
83
+
84
+ expect(distributor).
85
+ to receive(:escaped_command).
86
+ and_return(escaped_command)
87
+
88
+ expect(runner).
89
+ to receive(:run).
90
+ with(escaped_command).
91
+ and_yield(server, escaped_command)
92
+
93
+ result
94
+ end
95
+
96
+ it 'announces that the hook is being run' do
97
+ expect(shell).
98
+ to receive(:status).
99
+ with("Running deploy hook: #{callback_name}")
100
+
101
+ result
102
+ end
103
+
104
+ it 'adds the escaped current roles flag' do
105
+ expect(result).to match(/--current-roles 'hamlet ophelia'/)
106
+ end
107
+
108
+ it 'adds the escaped config flag' do
109
+ expect(result).to match(/--config '#{config_json}'/)
110
+ end
111
+
112
+ context 'when the server has a name' do
113
+ let(:server_name) {'frank'}
114
+
115
+ it 'adds the current name flag' do
116
+ expect(result).to match(/--current-name #{server_name}/)
117
+ end
118
+ end
119
+
120
+ context 'when the server has a name' do
121
+ let(:server_name) {nil}
122
+
123
+ it 'omits the current name flag' do
124
+ expect(result).not_to match(/--current-name/)
125
+ end
126
+ end
127
+
128
+ end
129
+ end
130
+
131
+ end
132
+ end
133
+ end
134
+ end
135
+
@@ -0,0 +1,208 @@
1
+ require 'spec_helper'
2
+
3
+ require 'pathname'
4
+
5
+ require 'railway'
6
+ require 'engineyard-serverside/callbacks/distributor/viability_filter'
7
+
8
+ module EY
9
+ module Serverside
10
+ module Callbacks
11
+ module Distributor
12
+
13
+ describe ViabilityFilter do
14
+ let(:shell) {Object.new}
15
+ let(:ruby_hook) {Object.new}
16
+ let(:executable_hook) {Object.new}
17
+ let(:executable_path) {Object.new}
18
+ let(:hooks) {[ruby_hook, executable_hook]}
19
+ let(:callback_name) {:some_callback}
20
+
21
+ let(:filter) {described_class.new}
22
+
23
+ before(:each) do
24
+ allow(ruby_hook).to receive(:flavor).and_return(:ruby)
25
+ allow(executable_hook).to receive(:flavor).and_return(:executable)
26
+ hooks.each do |hook|
27
+ allow(hook).to receive(:callback_name).and_return(callback_name)
28
+ end
29
+
30
+ allow(executable_hook).to receive(:path).and_return(executable_path)
31
+ allow(executable_path).to receive(:executable?).and_return(false)
32
+
33
+ allow(shell).to receive(:warning)
34
+ end
35
+
36
+ it 'is a Railway' do
37
+ expect(filter).to be_a(Railway)
38
+ end
39
+
40
+ it 'has the exact steps for filtering hooks' do
41
+ steps = described_class.steps.map {|s| s[:name]}
42
+
43
+ expect(steps).to eql(
44
+ [
45
+ :normalize_input,
46
+ :check_ruby_candidates,
47
+ :check_executable_candidates,
48
+ :calculate_callback_name
49
+ ]
50
+ )
51
+ end
52
+
53
+ describe '#normalize_input' do
54
+ let(:candidates) {hooks}
55
+
56
+ let(:input) {
57
+ {
58
+ :candidates => candidates,
59
+ :shell => shell
60
+ }
61
+ }
62
+
63
+ let(:result) {filter.normalize_input(input)}
64
+
65
+ it 'is always a success' do
66
+ expect(filter.normalize_input).to be_a(Result::Success)
67
+ end
68
+
69
+ it 'adds a viable array to the input hash' do
70
+ expect(result.value[:viable]).to be_a(Array)
71
+ end
72
+
73
+ context 'when given a non-array candidate' do
74
+ let(:candidates) {ruby_hook}
75
+
76
+ it 'converts the candidate to an array' do
77
+ expect(result.value[:candidates]).to eql([ruby_hook])
78
+ end
79
+ end
80
+ end
81
+
82
+ describe '#check_ruby_candidates' do
83
+ let(:input) {
84
+ {
85
+ :candidates => hooks,
86
+ :shell => shell,
87
+ :viable => []
88
+ }
89
+ }
90
+
91
+ let(:result) {filter.check_ruby_candidates(input)}
92
+
93
+ it 'adds all ruby hooks to the viable array' do
94
+ expect(result.value[:viable]).to include(ruby_hook)
95
+ end
96
+
97
+ it 'ignores non-ruby hooks' do
98
+ expect(result.value[:viable]).not_to include(executable_hook)
99
+ end
100
+
101
+ it 'does not alter the candidates' do
102
+ expect(result.value[:candidates]).to eql(hooks)
103
+ end
104
+ end
105
+
106
+ describe '#check_executable_candidates' do
107
+ let(:input) {
108
+ {
109
+ :candidates => hooks,
110
+ :shell => shell,
111
+ :viable => []
112
+ }
113
+ }
114
+
115
+ let(:result) {filter.check_executable_candidates(input)}
116
+
117
+ it 'ignores ruby hooks' do
118
+ expect(result.value[:viable]).not_to include(ruby_hook)
119
+ end
120
+
121
+ it 'does not alter the candidates' do
122
+ expect(result.value[:candidates]).to eql(hooks)
123
+ end
124
+
125
+ context 'with a hook that has the executable bit' do
126
+ before(:each) do
127
+ allow(executable_path).to receive(:executable?).and_return(true)
128
+ end
129
+
130
+ it 'adds that hook to the viable array' do
131
+ expect(result.value[:viable]).to include(executable_hook)
132
+ end
133
+ end
134
+
135
+ context 'with a hook that lacks the executable bit' do
136
+ before(:each) do
137
+ allow(executable_path).to receive(:executable?).and_return(false)
138
+ end
139
+
140
+ it 'warns the user that the hook is being skipped' do
141
+ expect(shell).
142
+ to receive(:warning).
143
+ with(
144
+ "Skipping possible deploy hook #{executable_hook} because it is not executable."
145
+ )
146
+
147
+ result
148
+ end
149
+
150
+ it 'omits that hook from the viable array' do
151
+ expect(result.value[:viable]).not_to include(executable_hook)
152
+ end
153
+ end
154
+ end
155
+
156
+ describe '#calculate_callback_name' do
157
+ let(:viable) {hooks}
158
+
159
+ let(:input) {
160
+ {
161
+ :candidates => hooks,
162
+ :shell => shell,
163
+ :viable => viable
164
+ }
165
+ }
166
+
167
+ let(:result) {filter.calculate_callback_name(input)}
168
+
169
+ context 'with viable hooks' do
170
+ let(:viable) {hooks}
171
+
172
+ it 'is a Success' do
173
+ expect(result).to be_a(Result::Success)
174
+ end
175
+
176
+ it 'has a callback name value' do
177
+ expect(result.value).to eql(callback_name)
178
+ end
179
+ end
180
+
181
+ context 'with no viable hooks' do
182
+ let(:viable) {[]}
183
+
184
+ it 'is a Failure' do
185
+ expect(result).to be_a(Result::Failure)
186
+ end
187
+
188
+ it 'includes a failure reason' do
189
+ expect(result.error[:reason]).to eql(:no_viable_hooks)
190
+ end
191
+
192
+ it 'does not modify the viable array' do
193
+ expect(result.error[:candidates]).to eql(hooks)
194
+ end
195
+
196
+ it 'does not modify the candidates array' do
197
+ expect(result.error[:viable]).to eql(viable)
198
+ end
199
+ end
200
+ end
201
+
202
+ end
203
+
204
+ end
205
+ end
206
+ end
207
+ end
208
+