engineyard-serverside 2.8.0.pre4 → 2.8.0

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 (261) hide show
  1. checksums.yaml +4 -4
  2. data/features/enable_maintenance/step_definitions/enable_maintenance_steps.rb +43 -0
  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/app_steps.rb +10 -0
  6. data/features/step_definitions/command_steps.rb +8 -0
  7. data/features/step_definitions/server_steps.rb +14 -0
  8. data/features/step_definitions/version_steps.rb +5 -0
  9. data/features/support/env.rb +63 -0
  10. data/features/support/error_codes.rb +17 -0
  11. data/features/support/fs_helpers.rb +82 -0
  12. data/features/support/output_helpers.rb +7 -0
  13. data/features/support/runner.rb +41 -0
  14. data/features/version.feature +7 -0
  15. data/lib/engineyard-serverside/cli/app.rb +6 -0
  16. data/lib/engineyard-serverside/shell.rb +38 -10
  17. data/lib/engineyard-serverside/version.rb +1 -1
  18. data/spec/engineyard-serverside/callbacks/collection/combined_spec.rb +232 -0
  19. data/spec/engineyard-serverside/callbacks/collection/deploy_hooks_spec.rb +170 -0
  20. data/spec/engineyard-serverside/callbacks/collection/service_hooks/collection_spec.rb +171 -0
  21. data/spec/engineyard-serverside/callbacks/collection/service_hooks/combined_spec.rb +174 -0
  22. data/spec/engineyard-serverside/callbacks/collection/service_hooks_spec.rb +31 -0
  23. data/spec/engineyard-serverside/callbacks/collection_spec.rb +49 -0
  24. data/spec/engineyard-serverside/callbacks/distributor/remote_spec.rb +135 -0
  25. data/spec/engineyard-serverside/callbacks/distributor/viability_filter_spec.rb +208 -0
  26. data/spec/engineyard-serverside/callbacks/distributor_spec.rb +43 -0
  27. data/spec/engineyard-serverside/callbacks/executor/executable_spec.rb +386 -0
  28. data/spec/engineyard-serverside/callbacks/executor/ruby/context_spec.rb +538 -0
  29. data/spec/engineyard-serverside/callbacks/executor/ruby/executor_spec.rb +313 -0
  30. data/spec/engineyard-serverside/callbacks/executor/ruby_spec.rb +35 -0
  31. data/spec/engineyard-serverside/callbacks/executor_spec.rb +45 -0
  32. data/spec/engineyard-serverside/callbacks_spec.rb +31 -0
  33. data/spec/engineyard-serverside/cli/workflows/base_spec.rb +237 -0
  34. data/spec/engineyard-serverside/cli/workflows/calling_deploy_hooks_spec.rb +65 -0
  35. data/spec/engineyard-serverside/cli/workflows/deploying_applications_spec.rb +61 -0
  36. data/spec/engineyard-serverside/cli/workflows/disabling_maintenance_spec.rb +61 -0
  37. data/spec/engineyard-serverside/cli/workflows/enabling_maintenance_spec.rb +61 -0
  38. data/spec/engineyard-serverside/cli/workflows/helpers_spec.rb +64 -0
  39. data/spec/engineyard-serverside/cli/workflows/rolling_back_applications_spec.rb +61 -0
  40. data/spec/engineyard-serverside/cli/workflows/showing_maintenance_status_spec.rb +60 -0
  41. data/spec/engineyard-serverside/cli/workflows_spec.rb +87 -0
  42. data/spec/engineyard-serverside/dependency_manager/base_spec.rb +139 -0
  43. data/spec/engineyard-serverside/paths_spec.rb +820 -0
  44. data/spec/engineyard-serverside/propagator_spec.rb +56 -0
  45. data/spec/engineyard-serverside/server_spec.rb +390 -0
  46. data/spec/engineyard-serverside/shell/helpers_spec.rb +98 -0
  47. data/spec/engineyard-serverside/shell/yieldio_spec.rb +33 -0
  48. data/spec/engineyard-serverside/shell_spec.rb +543 -0
  49. data/spec/engineyard-serverside/slug/distributor_spec.rb +199 -0
  50. data/spec/engineyard-serverside/slug/enabler_spec.rb +191 -0
  51. data/spec/engineyard-serverside/slug/failure_handler_spec.rb +114 -0
  52. data/spec/engineyard-serverside/slug/finalizer_spec.rb +191 -0
  53. data/spec/engineyard-serverside/slug/generator_spec.rb +82 -0
  54. data/spec/engineyard-serverside/slug/migrator_spec.rb +137 -0
  55. data/spec/engineyard-serverside/slug/restarter_spec.rb +226 -0
  56. data/spec/engineyard-serverside/slug/source/updater_spec.rb +710 -0
  57. data/spec/engineyard-serverside/slug/source_spec.rb +40 -0
  58. data/spec/engineyard-serverside/source_spec.rb +171 -0
  59. data/spec/railway_spec.rb +130 -0
  60. data/spec/result/failure_spec.rb +113 -0
  61. data/spec/result/success_spec.rb +109 -0
  62. data/spec/result_spec.rb +23 -0
  63. data/spec/spec_helper.rb +3 -349
  64. metadata +182 -404
  65. data/spec/archive_deploy_spec.rb +0 -53
  66. data/spec/basic_deploy_spec.rb +0 -26
  67. data/spec/bundler_deploy_spec.rb +0 -160
  68. data/spec/configuration_spec.rb +0 -206
  69. data/spec/custom_deploy_spec.rb +0 -128
  70. data/spec/deploy_hook_spec.rb +0 -378
  71. data/spec/deprecation_spec.rb +0 -23
  72. data/spec/ey_yml_customized_deploy_spec.rb +0 -99
  73. data/spec/fixtures/gitrepo.tar.gz +0 -0
  74. data/spec/fixtures/invalid_hook.rb +0 -1
  75. data/spec/fixtures/lockfiles/0.9-no-bundler +0 -111
  76. data/spec/fixtures/lockfiles/0.9-with-bundler +0 -117
  77. data/spec/fixtures/lockfiles/1.0-no-bundler +0 -54
  78. data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +0 -162
  79. data/spec/fixtures/lockfiles/1.0.18-do_mysql +0 -88
  80. data/spec/fixtures/lockfiles/1.0.18-do_postgres +0 -79
  81. data/spec/fixtures/lockfiles/1.0.18-mysql +0 -43
  82. data/spec/fixtures/lockfiles/1.0.18-mysql2 +0 -43
  83. data/spec/fixtures/lockfiles/1.0.18-pg +0 -43
  84. data/spec/fixtures/lockfiles/1.0.6-no-bundler +0 -51
  85. data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +0 -52
  86. data/spec/fixtures/lockfiles/1.0.6-with-bundler +0 -52
  87. data/spec/fixtures/lockfiles/1.15.1-no-bundler +0 -51
  88. data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +0 -112
  89. data/spec/fixtures/lockfiles/not-a-lockfile +0 -1
  90. data/spec/fixtures/repos/assets_detected/Gemfile +0 -5
  91. data/spec/fixtures/repos/assets_detected/Gemfile.lock +0 -88
  92. data/spec/fixtures/repos/assets_detected/README +0 -1
  93. data/spec/fixtures/repos/assets_detected/Rakefile +0 -5
  94. data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
  95. data/spec/fixtures/repos/assets_detected/config/application.rb +0 -5
  96. data/spec/fixtures/repos/assets_detected/config/ey.yml +0 -3
  97. data/spec/fixtures/repos/assets_disabled/Gemfile +0 -5
  98. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +0 -88
  99. data/spec/fixtures/repos/assets_disabled/README +0 -1
  100. data/spec/fixtures/repos/assets_disabled/Rakefile +0 -6
  101. data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
  102. data/spec/fixtures/repos/assets_disabled/config/application.rb +0 -5
  103. data/spec/fixtures/repos/assets_disabled/config/ey.yml +0 -3
  104. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +0 -5
  105. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +0 -88
  106. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +0 -1
  107. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +0 -6
  108. data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
  109. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +0 -5
  110. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +0 -5
  111. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +0 -5
  112. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +0 -88
  113. data/spec/fixtures/repos/assets_disabled_utf8/README +0 -3
  114. data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +0 -5
  115. data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
  116. data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +0 -7
  117. data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +0 -3
  118. data/spec/fixtures/repos/assets_enabled_all/Gemfile +0 -5
  119. data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +0 -88
  120. data/spec/fixtures/repos/assets_enabled_all/README +0 -1
  121. data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
  122. data/spec/fixtures/repos/assets_enabled_all/config/application.rb +0 -5
  123. data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +0 -6
  124. data/spec/fixtures/repos/assets_enabled_all/script/assets +0 -5
  125. data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +0 -1
  126. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +0 -3
  127. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +0 -10
  128. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +0 -1
  129. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +0 -8
  130. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +0 -4
  131. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +0 -5
  132. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +0 -88
  133. data/spec/fixtures/repos/assets_enabled_util_only/README +0 -1
  134. data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +0 -6
  135. data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
  136. data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +0 -5
  137. data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +0 -6
  138. data/spec/fixtures/repos/assets_error/Gemfile +0 -5
  139. data/spec/fixtures/repos/assets_error/Gemfile.lock +0 -88
  140. data/spec/fixtures/repos/assets_error/README +0 -1
  141. data/spec/fixtures/repos/assets_error/Rakefile +0 -4
  142. data/spec/fixtures/repos/assets_error/app/assets/empty +0 -0
  143. data/spec/fixtures/repos/assets_error/config/application.rb +0 -5
  144. data/spec/fixtures/repos/assets_error/config/ey.yml +0 -4
  145. data/spec/fixtures/repos/assets_in_hook/Gemfile +0 -5
  146. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +0 -88
  147. data/spec/fixtures/repos/assets_in_hook/README +0 -2
  148. data/spec/fixtures/repos/assets_in_hook/Rakefile +0 -5
  149. data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
  150. data/spec/fixtures/repos/assets_in_hook/config/application.rb +0 -5
  151. data/spec/fixtures/repos/assets_in_hook/config/ey.yml +0 -3
  152. data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +0 -2
  153. data/spec/fixtures/repos/bundle_fails/Gemfile +0 -1
  154. data/spec/fixtures/repos/bundle_fails/README +0 -1
  155. data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +0 -1
  156. data/spec/fixtures/repos/bundler_disabled/Gemfile +0 -4
  157. data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +0 -12
  158. data/spec/fixtures/repos/bundler_disabled/README +0 -1
  159. data/spec/fixtures/repos/bundler_disabled/config/ey.yml +0 -2
  160. data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +0 -1
  161. data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +0 -1
  162. data/spec/fixtures/repos/bundler_old/Gemfile +0 -5
  163. data/spec/fixtures/repos/bundler_old/Gemfile.lock +0 -15
  164. data/spec/fixtures/repos/bundler_old/README +0 -1
  165. data/spec/fixtures/repos/default/Gemfile +0 -4
  166. data/spec/fixtures/repos/default/Gemfile.lock +0 -12
  167. data/spec/fixtures/repos/default/README +0 -5
  168. data/spec/fixtures/repos/default/ey.yml +0 -3
  169. data/spec/fixtures/repos/executable_hooks/README +0 -1
  170. data/spec/fixtures/repos/executable_hooks/deploy/before_restart +0 -72
  171. data/spec/fixtures/repos/executable_hooks_not_executable/README +0 -3
  172. data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +0 -3
  173. data/spec/fixtures/repos/ey_yml/Gemfile +0 -4
  174. data/spec/fixtures/repos/ey_yml/Gemfile.lock +0 -12
  175. data/spec/fixtures/repos/ey_yml/README +0 -1
  176. data/spec/fixtures/repos/ey_yml/config/ey.yml +0 -18
  177. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +0 -6
  178. data/spec/fixtures/repos/ey_yml_alt/Gemfile +0 -4
  179. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +0 -12
  180. data/spec/fixtures/repos/ey_yml_alt/README +0 -1
  181. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +0 -6
  182. data/spec/fixtures/repos/ey_yml_alt/ey.yml +0 -12
  183. data/spec/fixtures/repos/hook_fails/README +0 -1
  184. data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +0 -1
  185. data/spec/fixtures/repos/hooks/README +0 -1
  186. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +0 -1
  187. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +0 -1
  188. data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +0 -1
  189. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +0 -1
  190. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +0 -1
  191. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +0 -1
  192. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +0 -1
  193. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +0 -1
  194. data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +0 -1
  195. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +0 -1
  196. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +0 -1
  197. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +0 -1
  198. data/spec/fixtures/repos/multi_dep_manager/README +0 -1
  199. data/spec/fixtures/repos/multi_dep_manager/composer.json +0 -5
  200. data/spec/fixtures/repos/multi_dep_manager/composer.lock +0 -462
  201. data/spec/fixtures/repos/multi_dep_manager/package.json +0 -7
  202. data/spec/fixtures/repos/multi_dep_manager/public/index.php +0 -4
  203. data/spec/fixtures/repos/no_ey_config/Gemfile +0 -3
  204. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +0 -10
  205. data/spec/fixtures/repos/no_ey_config/README +0 -1
  206. data/spec/fixtures/repos/no_ey_config/ey.yml +0 -3
  207. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile +0 -3
  208. data/spec/fixtures/repos/no_ey_config_no_warning/Gemfile.lock +0 -10
  209. data/spec/fixtures/repos/no_ey_config_no_warning/README +0 -1
  210. data/spec/fixtures/repos/no_ey_config_no_warning/ey.yml +0 -5
  211. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +0 -4
  212. data/spec/fixtures/repos/no_gemfile_lock/README +0 -1
  213. data/spec/fixtures/repos/no_gemfile_lock/ey.yml +0 -3
  214. data/spec/fixtures/repos/nodejs/README +0 -1
  215. data/spec/fixtures/repos/nodejs/package.json +0 -7
  216. data/spec/fixtures/repos/not_bundled/README +0 -1
  217. data/spec/fixtures/repos/npm_disabled/README +0 -1
  218. data/spec/fixtures/repos/npm_disabled/config/ey.yml +0 -2
  219. data/spec/fixtures/repos/npm_disabled/package.json +0 -7
  220. data/spec/fixtures/repos/php_composer_disabled/README +0 -1
  221. data/spec/fixtures/repos/php_composer_disabled/composer.json +0 -5
  222. data/spec/fixtures/repos/php_composer_disabled/composer.lock +0 -462
  223. data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +0 -2
  224. data/spec/fixtures/repos/php_composer_disabled/public/index.php +0 -4
  225. data/spec/fixtures/repos/php_composer_lock/README +0 -1
  226. data/spec/fixtures/repos/php_composer_lock/composer.json +0 -5
  227. data/spec/fixtures/repos/php_composer_lock/composer.lock +0 -462
  228. data/spec/fixtures/repos/php_composer_lock/public/index.php +0 -4
  229. data/spec/fixtures/repos/php_no_composer_lock/README +0 -1
  230. data/spec/fixtures/repos/php_no_composer_lock/composer.json +0 -21
  231. data/spec/fixtures/repos/php_no_composer_lock/public/index.php +0 -4
  232. data/spec/fixtures/repos/public_system/Gemfile +0 -4
  233. data/spec/fixtures/repos/public_system/Gemfile.lock +0 -12
  234. data/spec/fixtures/repos/public_system/README +0 -5
  235. data/spec/fixtures/repos/public_system/ey.yml +0 -3
  236. data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +0 -3
  237. data/spec/fixtures/repos/sqlite3/Gemfile +0 -4
  238. data/spec/fixtures/repos/sqlite3/Gemfile.lock +0 -89
  239. data/spec/fixtures/repos/sqlite3/README +0 -1
  240. data/spec/fixtures/retwisj.war +0 -0
  241. data/spec/fixtures/valid_hook.rb +0 -1
  242. data/spec/git_strategy_spec.rb +0 -34
  243. data/spec/lockfile_parser_spec.rb +0 -126
  244. data/spec/maintenance_spec.rb +0 -44
  245. data/spec/multi_dependency_manager_spec.rb +0 -25
  246. data/spec/nodejs_deploy_spec.rb +0 -30
  247. data/spec/php_deploy_spec.rb +0 -81
  248. data/spec/platform_configure_spec.rb +0 -61
  249. data/spec/rails31_deploy_spec.rb +0 -172
  250. data/spec/restart_spec.rb +0 -43
  251. data/spec/rollback_spec.rb +0 -87
  252. data/spec/server_spec.rb +0 -70
  253. data/spec/services_deploy_spec.rb +0 -165
  254. data/spec/shell_spec.rb +0 -57
  255. data/spec/source/archive_spec.rb +0 -33
  256. data/spec/source/git_spec.rb +0 -44
  257. data/spec/sqlite3_deploy_spec.rb +0 -38
  258. data/spec/support/integration.rb +0 -103
  259. data/spec/support/source_doubles.rb +0 -28
  260. data/spec/support/timecop.rb +0 -5
  261. data/spec/symlink_spec.rb +0 -15
@@ -0,0 +1,109 @@
1
+ require 'spec_helper'
2
+
3
+ require 'result/success'
4
+
5
+ module Result
6
+ describe Success do
7
+ let(:dummy) {Object.new}
8
+ let(:wrapped) {3}
9
+ let(:result) {described_class.new(wrapped)}
10
+
11
+ before(:each) do
12
+ allow(dummy).to receive(:process)
13
+ end
14
+
15
+ it 'is a result' do
16
+ expect(result).to be_a(Result::Base)
17
+ end
18
+
19
+ describe '#success?' do
20
+ let(:success) {result.success?}
21
+
22
+ it 'is true' do
23
+ expect(success).to eql(true)
24
+ end
25
+ end
26
+
27
+ describe '#failure?' do
28
+ let(:failure) {result.failure?}
29
+
30
+ it 'is false' do
31
+ expect(failure).to eql(false)
32
+ end
33
+ end
34
+
35
+ describe '#value' do
36
+ let(:value) {result.value}
37
+
38
+ it 'is the wrapped value' do
39
+ expect(value).to eql(wrapped)
40
+ end
41
+ end
42
+
43
+ describe '#error' do
44
+ let(:error) {result.error}
45
+
46
+ it 'raises an exception' do
47
+ expect {error}.to raise_exception
48
+ end
49
+ end
50
+
51
+ describe '#and_then' do
52
+ it 'yields the wrapped value to the block' do
53
+ expect(dummy).to receive(:process).with(wrapped)
54
+
55
+ result.and_then {|v| dummy.process(v)}
56
+ end
57
+
58
+ it 'is the result of yielding the wrapped value to the block' do
59
+ actual = result.and_then {|v| v + 1}
60
+
61
+ expect(actual).to eql(wrapped + 1)
62
+ end
63
+ end
64
+
65
+ describe '#or_else' do
66
+ it 'does not call the block' do
67
+ expect(dummy).not_to receive(:process)
68
+
69
+ result.or_else {|v| dummy.process(v)}
70
+ end
71
+
72
+ it 'is the success itself' do
73
+ actual = result.or_else {|v| v}
74
+
75
+ expect(actual).to eql(result)
76
+ end
77
+ end
78
+
79
+ describe '#on_success' do
80
+ it 'yields the wrapped value to the block' do
81
+ expect(dummy).to receive(:process).with(wrapped)
82
+
83
+ result.on_success {|v| dummy.process(v)}
84
+ end
85
+
86
+ it 'is the success itself' do
87
+ actual = result.on_success {|v| v}
88
+
89
+ expect(actual).to eql(result)
90
+ end
91
+ end
92
+
93
+ describe '#on_failure' do
94
+ it 'does not call the block' do
95
+ expect(dummy).not_to receive(:process)
96
+
97
+ result.on_failure {|v| dummy.process(v)}
98
+ end
99
+
100
+ it 'is the success itself' do
101
+ actual = result.on_failure {|v| v}
102
+
103
+ expect(actual).to eql(result)
104
+ end
105
+ end
106
+
107
+
108
+ end
109
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ require 'result'
4
+
5
+ describe Result do
6
+ let(:value) {3}
7
+
8
+ describe '.Success' do
9
+ let(:result) {described_class.Success(value)}
10
+
11
+ it 'is a success' do
12
+ expect(result).to be_a(described_class::Success)
13
+ end
14
+ end
15
+
16
+ describe '.Failure' do
17
+ let(:result) {described_class.Failure(value)}
18
+
19
+ it 'is a failure' do
20
+ expect(result).to be_a(described_class::Failure)
21
+ end
22
+ end
23
+ end
@@ -1,361 +1,15 @@
1
- $LOAD_PATH.push File.expand_path("../lib", File.dirname(__FILE__))
2
-
3
- unless defined?(Bundler)
4
- require 'rubygems'
5
- end
6
-
7
-
8
1
  unless RUBY_VERSION =~ /^1\.8\./
9
2
  require 'simplecov'
10
- SimpleCov.coverage_dir 'coverage/outside'
3
+ SimpleCov.coverage_dir 'coverage/inside'
11
4
  SimpleCov.start do
12
5
  add_filter '/spec/'
13
6
  add_filter '/features/'
14
7
  add_filter '/mock/'
15
8
  add_filter '/lib/vendor/'
16
9
  add_group 'CLI Workflows', 'lib/engineyard-serverside/cli/workflows/'
17
- add_group 'Callbacks', 'lib/engineyard-serverside/callbacks'
10
+ add_group 'Callbacks', 'lib/engineyard-serverside/callbacks/'
18
11
  end
19
12
  end
20
13
 
21
- require 'pp'
14
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
22
15
  require 'engineyard-serverside'
23
- require 'engineyard-serverside-adapter'
24
- require 'support/integration'
25
- require 'support/source_doubles'
26
- require 'support/timecop'
27
-
28
- FIXTURES_DIR = Pathname.new(__FILE__).dirname.join("fixtures")
29
- TMPDIR = Pathname.new(__FILE__).dirname.parent.join('tmp')
30
- GROUP = `id -gn`.strip
31
- INTERNAL_KEY = Pathname.new("~/.ssh/id_rsa").expand_path
32
-
33
- module EY
34
- module Serverside
35
- def self.dna_json=(j)
36
- @dna_json = j
37
- @node = nil
38
- end
39
- end
40
- end
41
-
42
- module SpecDependencyHelpers
43
- $NPM_INSTALLED = system('which npm 2>&1')
44
- unless $NPM_INSTALLED
45
- $stderr.puts "npm not found; skipping Node.js specs."
46
- end
47
-
48
- def with_npm_mocked(&block)
49
- context("mocked") { yield true }
50
- context("unmocked") { yield false } if $NPM_INSTALLED
51
- end
52
-
53
- $COMPOSER_INSTALLED = system('command -v composer > /dev/null')
54
- if $COMPOSER_INSTALLED
55
- $stderr.puts "composer found; skipping tests that expect it to be missing."
56
- else
57
- $stderr.puts "composer not found; skipping tests that expect it to be available."
58
- end
59
-
60
- def with_composer_mocked(&block)
61
- context("mocked") { yield true }
62
- context("unmocked") { yield false } if $COMPOSER_INSTALLED
63
- end
64
- end
65
-
66
- RSpec.configure do |config|
67
- config.extend SpecDependencyHelpers
68
-
69
- config.before(:all) do
70
- make_tmpdir
71
- EY::Serverside.dna_json = MultiJson.dump({})
72
- end
73
-
74
- config.after(:all) do
75
- delete_tmpdir
76
- end
77
-
78
- class VerboseStringIO < StringIO
79
- def <<(str)
80
- if ENV['VERBOSE'] || ENV['DEBUG']
81
- STDERR << str
82
- end
83
- super
84
- end
85
- end
86
-
87
- def tmpdir
88
- TMPDIR
89
- end
90
-
91
- def make_tmpdir
92
- tmpdir.mkpath
93
- end
94
-
95
- def delete_tmpdir
96
- tmpdir.exist? && tmpdir.rmtree
97
- end
98
-
99
- def stdout
100
- @stdout ||= VerboseStringIO.new
101
- end
102
-
103
- def stderr
104
- @stderr ||= VerboseStringIO.new
105
- end
106
-
107
- def read_stdout
108
- stdout.rewind
109
- stdout.read
110
- end
111
-
112
- def read_stderr
113
- stderr.rewind
114
- stderr.read
115
- end
116
-
117
- def read_output
118
- read_stdout + "\n" + read_stderr
119
- end
120
-
121
- def capture
122
- begin
123
- $stdout = @stdout = VerboseStringIO.new
124
- $stderr = @stderr = VerboseStringIO.new
125
- yield
126
- ensure
127
- $stdout, $stderr = STDOUT, STDERR
128
- end
129
- end
130
-
131
- def test_shell(verbose=true)
132
- @test_shell ||= begin
133
- @log_path = tmpdir.join("serverside-deploy-#{Time.now.to_f}-#{$$}.log")
134
- EY::Serverside::Shell.new(:verbose => verbose, :log_path => @log_path, :stdout => stdout, :stderr => stderr)
135
- end
136
- end
137
-
138
- def exist
139
- be_exist
140
- end
141
-
142
- def bindir
143
- @bindir ||= begin
144
- dir = tmpdir.join("ey_test_cmds_#{Time.now.to_f}_#{$$}")
145
- dir.mkpath
146
- dir
147
- end
148
- end
149
-
150
- def mock_command(cmd, contents, &block)
151
- bindir.join(cmd).open('w') do |f|
152
- f.write contents
153
- f.chmod(0755)
154
- end
155
- with_mocked_commands(&block) if block_given?
156
- end
157
-
158
- def mock_bundler(failure = false, &block)
159
- mock_command('bundle', <<-SCRIPT, &block)
160
- #!#{`which ruby`}
161
- puts "Bundling gems"
162
- $stdout.flush
163
- #{failure && '$stderr.puts "bundle install failure"; exit 1'}
164
- SCRIPT
165
- end
166
-
167
- def mock_npm(&block)
168
- mock_command('npm', <<-SCRIPT, &block)
169
- #!/bin/bash
170
- echo "Running npm with $@"
171
- SCRIPT
172
- end
173
-
174
- def mock_composer(&block)
175
- mock_command('composer', <<-SCRIPT, &block)
176
- #!/bin/bash
177
- echo "Running composer with $@"
178
- SCRIPT
179
- end
180
-
181
- def mock_sudo(&block)
182
- mock_command('sudo', <<-SCRIPT, &block)
183
- #!/bin/bash
184
- echo "$@"
185
- exec "$@"
186
- SCRIPT
187
- end
188
-
189
- def with_mocked_commands(&block)
190
- with_env('PATH' => "#{bindir}:#{ENV['PATH']}", &block)
191
- end
192
-
193
- def with_env(new_env_vars)
194
- raise ArgumentError, "with_env takes a block" unless block_given?
195
-
196
- old_env_vars = {}
197
- new_env_vars.each do |k, v|
198
- if ENV.has_key?(k)
199
- old_env_vars[k] = ENV[k]
200
- end
201
- ENV[k] = v if v
202
- end
203
-
204
- yield
205
- ensure
206
- new_env_vars.keys.each do |k|
207
- if old_env_vars.has_key?(k)
208
- ENV[k] = old_env_vars[k]
209
- else
210
- ENV.delete(k)
211
- end
212
- end
213
- end
214
-
215
-
216
- def deploy_dir
217
- @deploy_dir ||= tmpdir.join("serverside-deploy-#{Time.now.to_f}-#{$$}")
218
- end
219
-
220
- def whoami
221
- ENV['USER']
222
- end
223
-
224
- # set up EY::Serverside::Server like we're on a solo
225
- def test_servers
226
- @test_servers ||= EY::Serverside::Servers.from_hashes([{:hostname => 'localhost', :roles => %w[solo], :user => whoami}], test_shell)
227
- end
228
-
229
- def default_configuration
230
- {
231
- "source_class" => "IntegrationSpec",
232
- "deploy_to" => deploy_dir.to_s,
233
- "group" => GROUP,
234
- "stack" => 'nginx_passenger',
235
- "migrate" => "ruby -e 'puts ENV[\"PATH\"]' > #{deploy_dir}/path-when-migrating",
236
- "app" => 'rails31',
237
- "environment_name" => 'env',
238
- "account_name" => 'acc',
239
- "framework_env" => 'staging',
240
- "branch" => 'somebranch',
241
- "verbose" => true,
242
- "git" => FIXTURES_DIR.join('repos', 'default'),
243
- }
244
- end
245
-
246
- def test_adapter(repo_fixture_name = 'default', extra_config = {})
247
- options = default_configuration.merge({ "git" => FIXTURES_DIR.join('repos', repo_fixture_name)}).merge(extra_config)
248
-
249
- # pretend there is a shared bundled_gems directory
250
- deploy_dir.join('shared', 'bundled_gems').mkpath
251
- %w(RUBY_VERSION SYSTEM_VERSION).each do |name|
252
- deploy_dir.join('shared', 'bundled_gems', name).open("w") { |f| f.write("old\n") }
253
- end
254
-
255
- EY::Serverside::Adapter.new do |args|
256
- args.app = options['app']
257
- args.environment_name = options['environment_name']
258
- args.account_name = options['account_name']
259
- args.migrate = options['migrate']
260
- args.ref = options['branch']
261
- args.git = options['git']
262
- args.serverside_version = Gem::Version.create(EY::Serverside::VERSION.dup).release
263
- args.config = {
264
- "services_check_command" => "which echo",
265
- "services_setup_command" => "echo 'services setup command'",
266
- "source_class" => options["source_class"],
267
- "deploy_to" => options["deploy_to"],
268
- "group" => options["group"],
269
- }.merge(options['config'] || {})
270
- args.framework_env = options['framework_env']
271
- args.stack = options['stack']
272
- args.verbose = options['verbose']
273
- args.clean = options['clean']
274
- args.instances = test_servers.map {|s| {:hostname => s.hostname, :roles => s.roles.to_a, :name => s.name} }
275
- end
276
- end
277
-
278
- # When a repo fixture name is specified, the files found in the specified
279
- # spec/fixtures/repos dir are copied into the test github repository.
280
- def deploy_test_application(repo_fixture_name = 'default', extra_config = {}, &block)
281
- Timecop.travel(1)
282
- @adapter = test_adapter(repo_fixture_name, extra_config)
283
- @argv = @adapter.deploy.commands.last.to_argv[2..-1]
284
-
285
- FullTestDeploy.on_create_callback = block
286
-
287
- mock_bundler(extra_config['bundle_install_fails'])
288
- with_mocked_commands do
289
- capture do
290
- EY::Serverside::CLI::App.start(@argv)
291
- end
292
- end
293
- ensure
294
- @deployer = EY::Serverside::Deploy.deployer
295
- @config = EY::Serverside::Deploy.config
296
- end
297
-
298
- def redeploy_test_application(extra_config = {}, &block)
299
- Timecop.travel(1)
300
- raise "Please deploy_test_application first" unless @argv
301
- bundle_install_fails = extra_config.delete('bundle_install_fails')
302
-
303
- @action = @adapter.deploy do |args|
304
- extra_config.each do |key,val|
305
- case key
306
- when 'branch' then args.ref = val
307
- when 'config' then args.config = args.config.merge(val || {})
308
- else args.send("#{key}=", val)
309
- end
310
- end
311
- end
312
-
313
- @argv = @action.commands.last.to_argv[2..-1]
314
-
315
- FullTestDeploy.on_create_callback = block
316
-
317
- mock_bundler(bundle_install_fails)
318
-
319
- with_mocked_commands do
320
- capture do
321
- EY::Serverside::CLI::App.start(@argv)
322
- end
323
- end
324
- ensure
325
- @deployer = EY::Serverside::Deploy.deployer
326
- @config = EY::Serverside::Deploy.config
327
- end
328
-
329
- def enable_maintenance(extra_adapter_config = {})
330
- @adapter = test_adapter("default", extra_adapter_config)
331
- @argv = @adapter.enable_maintenance.commands.last.to_argv[2..-1]
332
-
333
- with_mocked_commands do
334
- capture do
335
- EY::Serverside::CLI::App.start(@argv)
336
- end
337
- end
338
- end
339
-
340
- def disable_maintenance(extra_adapter_config = {})
341
- @adapter = test_adapter("default", extra_adapter_config)
342
- @argv = @adapter.disable_maintenance.commands.last.to_argv[2..-1]
343
-
344
- with_mocked_commands do
345
- capture do
346
- EY::Serverside::CLI::App.start(@argv)
347
- end
348
- end
349
- end
350
-
351
- def maintenance_status(extra_adapter_config = {})
352
- @adapter = test_adapter("default", extra_adapter_config)
353
- @argv = @adapter.maintenance_status.commands.last.to_argv[2..-1]
354
-
355
- with_mocked_commands do
356
- capture do
357
- EY::Serverside::CLI::App.start(@argv)
358
- end
359
- end
360
- end
361
- end